javascript – 如何计算1/4圆弧移动(贝塞尔曲线)?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何计算1/4圆弧移动(贝塞尔曲线)?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1830字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 如何计算1/4圆弧移动(贝塞尔曲线)?](/upload/InfoBanner/zyjiaocheng/795/7131c458ee084459a7b89214c7db3240.jpg)
我正在使用JQuery.path沿着贝塞尔曲线移动物体.单击该项目时,我可以确定起点和终点.如何计算角度和长度,使元素在距离起点和终点相交的圆的1/4处从A点移动到B点?
我基本上希望它沿着一条曲线移动,该曲线永远不会低于起始位置,也绝不会落到末尾x位置的左侧.
var path = {
start: {
x: currentLeft,
y: currentTop,
angle: ????, //Don't know how to calculate this
length: ???? //Don't know how to calculate this
},
end: {
x: endLeft,
y: endTop,
angle: ????, //Don't know how to calculate this
length: ???? //Don't know how to calculate this
}
};
jQuery(myElement).animate(
{
path: new jQuery.path.bezier(path)
}
);
约.我想要的是:
接近我得到的东西(它们浸得太低):
解决方法:
一般化的解决方案有点棘手,因为它必须处理四个对角线方向,水平和垂直方向中的对角线运动.
首先,您需要一些实用功能:
function r2d(x) {
/* radians to degrees */
return x * 180 / Math.PI;
}
function smaller(x, y) {
/* returns the closer of x|y to zero */
var x_ = Math.abs(x);
var y_ = Math.abs(y);
return (Math.min(x_, y_) === x_) ? x : y;
}
现在,一个主函数anim接受一个jQuery对象(包含感兴趣的元素)和一个结束对象(具有属性.left和.top).
function anim($el, end) {
var current = $el.position();
var slope1 = (end.top - current.top) / (end.left - current.left);
var slope2 = 1 / slope1;
var endAngle = r2d(Math.atan(smaller(slope1, slope2)));
var startAngle = -endAngle;
var length = 1/3; //Vary between 0 and 1 to affect the path's curvature. Also, try >1 for an interesting effect.
//For debugging
$("#endAngle").text(endAngle);
$("#startAngle").text(startAngle);
$("#length").text(length);
var path = {
start: {
x: current.left,
y: current.top,
angle: startAngle,
length: length
},
end: {
x: end.left,
y: end.top,
angle: endAngle,
length: length
}
};
$el.animate({ path: new jQuery.path.bezier(path) });
}
endAngle的计算对于每个单独的情况(四个对角线,水平和垂直)都非常简单,但对于通用解决方案来说有点棘手.我花了一些时间开发出适用于所有情况的东西.
内容总结
以上是互联网集市为您收集整理的javascript – 如何计算1/4圆弧移动(贝塞尔曲线)?全部内容,希望文章能够帮你解决javascript – 如何计算1/4圆弧移动(贝塞尔曲线)?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。