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

时间:2014-02-04 23:22:32

标签: c++ algorithm interpolation

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

这就是我要找的东西:

考虑到x = 0处的原点位置和x = 8的最终位置,我希望缓慢加速并从一开始就进一步加速,然后在它到达终点时放慢速度。是否有平滑算法?

2 个答案:

答案 0 :(得分:1)

有很多算法可供选择。一个想法是建立线性插值:

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

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

如果您想要慢启动和慢速结束,则可以将t = sin(theta)/2.0 + 1.0用于theta,从-pi / 2到pi / 2.

答案 1 :(得分:1)

二阶平滑路径在上半部分持续加速,然后在第二部分持续减速。

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