如何使用贝塞尔曲线控制动画的速度?

时间:2014-11-24 21:24:26

标签: math game-physics physics-engine

我发现只有三维曲线的矢量坐标有助于描绘(构建矢量图像)。

这是:

B(t) = (1-t)^3*P0 + 3*t*(1-t)^2*P1 + 3*t^2*(1-t)*P2 + t^3*P3

此公式返回向量的坐标,但我无法理解它们如何影响动画的速度,如http://cubic-bezier.com/#.17,.67,.83,.67中所示。

请指导我以正确的方式让我理解。

1 个答案:

答案 0 :(得分:1)

贝塞尔曲线是从线性空间(通常在区间<0,1>)到非线性空间的映射。这意味着您可以将其用于任何信号/值的形状失真。在你的情况下,不受时间影响,而是速度(首先推导出位置)

怎么做:

我认为有很多方法可以完成:

如果贝塞尔曲线的控制点沿路径均匀分布,则运动是线性的。当它们更密集时,速度更慢,反之亦然。如果你需要更复杂的动作,可以添加更多的点/ bezier补丁。

另一种选择是使运动变为线性但不是时间


x(t) = x0 + (x1-x0)*t/t_duration;
x(t)是动画项目位置
t是动画时间<0,t_duration>
t_duration是获得边缘位置所需的时间
x0,x1是开始/结束位置

现在,如果你在计时器中线性增加时间,那么如果你这样做,移动是线性的:

u=Bezier(t/t_duration)*t_duration;

并使用u代替t,然后你就可以实现相同的目标......要明确Bezier内部的时间,请将时间转换为范围<0,1>,然后再返回<0,t_duration> < / p>

<强> [注释]

第二种选择(离散非线性时间)带来了全新的数学问题。

但是我在高级运动控制和刨削中使用了很多。你可以在那里实现令人讨厌的东西,这在标准时空中几乎是不可能的,而复杂性非常小。但缺点是古典时空中的简单事物很难做到。