Javascript 沿三次贝塞尔曲线设置动画时速度不一致

Javascript 沿三次贝塞尔曲线设置动画时速度不一致,javascript,animation,bezier,Javascript,Animation,Bezier,我使用下面的示例沿一组贝塞尔曲线设置对象的动画。出于某种原因,立方贝塞尔曲线(蓝色)会使动画速度略微加快。我试图实现的是以相同速度在所有曲线上平滑一致的动画。为什么蓝色曲线上的动画速度会加快?我该如何解决这个问题 链接示例使用此方程式计算特定时间(百分比)沿三次贝塞尔曲线的点。我怀疑这是我需要纠正的,但我的数学能力不够强,无法做到这一点: // cubic bezier percent is 0-1 function getCubicBezierXYatPercent(startPt, con

我使用下面的示例沿一组贝塞尔曲线设置对象的动画。出于某种原因,立方贝塞尔曲线(蓝色)会使动画速度略微加快。我试图实现的是以相同速度在所有曲线上平滑一致的动画。为什么蓝色曲线上的动画速度会加快?我该如何解决这个问题

链接示例使用此方程式计算特定时间(百分比)沿三次贝塞尔曲线的点。我怀疑这是我需要纠正的,但我的数学能力不够强,无法做到这一点:

// 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;
}

在100次重绘曲线(和矩形)所花费的固定时间内,矩形必须从曲线的起点到终点进行遍历。由于蓝色曲线较长,因此矩形将在其穿过其他较短曲线的同时穿过较长的距离。因此,矩形在蓝色曲线上的移动速度似乎比在其他曲线上快


若要使矩形以恒定速度移动,必须为较短的曲线重新绘制较少的次数,为较长的曲线重新绘制更多的次数。这意味着在您的代码中,对于较长的曲线,可以使“方向”的绝对值小于1.0,对于较短的曲线,可以使“方向”的绝对值大于1.0。

在100次重新绘制曲线(和矩形)的固定时间内,矩形必须从曲线的起点穿过到终点。由于蓝色曲线较长,因此矩形将在其穿过其他较短曲线的同时穿过较长的距离。因此,矩形在蓝色曲线上的移动速度似乎比在其他曲线上快


若要使矩形以恒定速度移动,必须为较短的曲线重新绘制较少的次数,为较长的曲线重新绘制更多的次数。这意味着在您的代码中,对于较长的曲线,您可以使“方向”的绝对值小于1.0,而对于较短的曲线,您可以使“方向”的绝对值大于1.0。

在不知道任何数学知识的情况下,速度似乎是根据直线长度计算的。蓝线较长,因此移动速度加快。绿色是最短的,那个颜色的移动速度似乎较慢。你能让蓝色曲线变短吗?在不懂任何数学的情况下,速度似乎是根据直线长度计算的。蓝线较长,因此移动速度加快。绿色是最短的,那个颜色的移动速度似乎较慢。你能把蓝色曲线缩短些吗?