如何将定时功能从线性转换为立方贝塞尔?

时间:2011-10-21 12:58:28

标签: math animation timing

我有一个动画序列,显示一个接一个的特定帧。原始规格是:

  • 我们将为您提供动画的总持续时间
  • 将每个连续帧的显示时间缩短20ms

所以我写了这个线性计时功能:

/**
 * Get the delay until the next animation frame.
 *
 * @returns the number of ms until the next animation frame.
 */
getNextTiming: function () {
    var n = this.getLength(), // total number of frames
        t = this.animationDuration,
        x = this.durationDelta, // 20 ms, according to spec
        d = ((n * n * x) - (n * x) + (2 * t)) / (2 * n),
        c = this.cursor; // current frame
    // d is the duration of the first frame of animation.
    return d - c * x;
},

当然,艺术家并不开心。他们希望动画遵循曲线。当然,他们并不确切地知道什么是曲线,所以我需要写一些我可以用数字调整的东西,直到他们开心。在我看来,我应该看看立方Bézier函数,但是我能找到的那些函数有抽象符号,我发现很难解析,或者它们被定义为p(t),而不是Δt/Δp。

我曾经擅长数学,但现在我被卡住了。我可以用正确的方向推。如何重写上述功能,以便我可以将立方Bézier控制点P1和P2输入并输出每个连续帧的时间?

0 个答案:

没有答案