C++ - 对象的平滑加速和减速



我正在处理Cocos2dx中的一些对象位置,但这个问题几乎适用于所有需要平稳启动和停止的情况。

这是我正在寻找的:

给定一个 x = 0 的原点位置和 x = 8 的最终位置,我想慢慢加速,离起点越远越远,然后在到达终点时让它减速。有没有平滑算法?

有很多算法可以做到这一点。 一个想法是设置线性插值:

x(t) = t * x0 + (1.0 - t) * x1;

如果输入从 0.0 到 1.0 的均匀间隔的t值,您将获得平滑的线性动画。

如果你想要慢速启动和慢速结束,则可以使用t = sin(theta)/2.0 + 1.0进行从 -pi/2 到 pi/2 的theta

二阶平滑路径在前半部分具有恒定的加速度,然后在第二部分具有恒定的减速。

这意味着您可以从x=0加速到x=4。该公式x(t)=a*t*t因此您选择的加速度a直接影响所需的时间。如果将减速设置为相同的值,则在x=8中两倍的时间后到达。因此,第二部分的公式x(t) = 16 - a*t*t.中途时间点是t=sqrt(4/a).

最新更新