【发布时间】:2020-07-04 02:58:18
【问题描述】:
我正在使用以下示例http://jsfiddle.net/m1erickson/LumMX/ 沿一组贝塞尔曲线为对象设置动画。出于某种原因,三次贝塞尔曲线(蓝色)使动画略微加快。我想要完成的是在所有曲线上以相同的速度平滑一致的动画。为什么沿蓝色曲线的动画会加速,我该如何解决?
链接的示例使用此等式计算在特定时间(百分比)沿三次贝塞尔曲线的点。我怀疑这是我需要纠正的,但我的数学能力不够强:
// cubic bezier percent is 0-1
function getCubicBezierXYatPercent(startPt, controlPt1, controlPt2, endPt, percent) {
var x = CubicN(percent, startPt.x, controlPt1.x, controlPt2.x, endPt.x);
var y = CubicN(percent, startPt.y, controlPt1.y, controlPt2.y, endPt.y);
return ({
x: x,
y: y
});
}
// cubic helper formula at percent distance
function CubicN(pct, a, b, c, d) {
var t2 = pct * pct;
var t3 = t2 * pct;
return a + (-a * 3 + pct * (3 * a - a * pct)) * pct + (3 * b + pct * (-6 * b + b * 3 * pct)) * pct + (c * 3 - c * 3 * pct) * t2 + d * t3;
}
【问题讨论】:
-
在不知道任何数学的情况下,似乎速度是根据行长计算的。蓝线较长,因此移动速度加快。绿色是最短的,运动看起来更慢。你能把蓝色曲线变短吗?
标签: javascript animation bezier