计算加速度曲线

时间:2017-01-26 16:00:32

标签: ios animation math logarithm curves

我需要计算视图从A点到B点的位置。将会有一个输入值线性变化,并根据我需要计算视图位置的输入值。到最后,输入值和我的视图将移动完全相同的数量。视图仅沿一个轴移动。

棘手的部分是我想要进出动画,所以在动作的开始和结束时它的移动速度比输入值慢,而在中间它需要比它更快地移动,为了从缓慢的开始和结束来弥补失去的旅行距离。

所以基本上我尝试写的公式将有一个看起来像这样的速度曲线。 Acceleration Curve

所以我的签名看起来像这样:

func smoothedPosition(position: CGFloat, minPosition: CGFloat, maxPosition: CGFloat) -> CGFloat {

结果需要随着时间的推移而均匀,所以它应该像

,其中 smoothedPosition(位置:100,minPosition:100,maxPosition:200) 期待100

,其中 smoothedPosition(位置:101,minPosition:100,maxPosition:200)) 期望100到101之间的东西

,其中 smoothedPosition(位置:150,minPosition:100,maxPosition:200)) 期待150

smoothedPosition(位置:199,minPosition:100,maxPosition:200)) 期望199到200之间的东西

,其中 smoothedPosition(位置:200,minPosition:100,maxPosition:200)) 期待200

我确定有某种方程可以做到这一点,但数学从来都不是我的强项。有人能指出我正确的方向。

1 个答案:

答案 0 :(得分:0)

你可能想要做的是使用从距离到距离的负余弦函数。缩放输入距离,使其从0度到180度。然后该函数将类似于(C ++)

double f(double inDist)
{
    return 1 - cos(inDist) / 2;
}

此函数返回0到1之间的数字。这是您对输出距离的倍数比例因子。