我需要计算视图从A点到B点的位置。将会有一个输入值线性变化,并根据我需要计算视图位置的输入值。到最后,输入值和我的视图将移动完全相同的数量。视图仅沿一个轴移动。
棘手的部分是我想要进出动画,所以在动作的开始和结束时它的移动速度比输入值慢,而在中间它需要比它更快地移动,为了从缓慢的开始和结束来弥补失去的旅行距离。
所以我的签名看起来像这样:
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
我确定有某种方程可以做到这一点,但数学从来都不是我的强项。有人能指出我正确的方向。
答案 0 :(得分:0)
你可能想要做的是使用从距离到距离的负余弦函数。缩放输入距离,使其从0度到180度。然后该函数将类似于(C ++)
double f(double inDist)
{
return 1 - cos(inDist) / 2;
}
此函数返回0到1之间的数字。这是您对输出距离的倍数比例因子。