【问题标题】:Calculate acceleration curve计算加速度曲线
【发布时间】:2017-01-26 16:00:31
【问题描述】:

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

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

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

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

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

随着时间的推移,结果需要平衡,所以应该是这样的

在哪里 平滑位置(位置:100,最小位置:100,最大位置:200) 预计 100

在哪里 平滑位置(位置:101,最小位置:100,最大位置:200)) 期望值在 100 到 101 之间

在哪里 平滑位置(位置:150,最小位置:100,最大位置:200)) 预计 150

其中smoothedPosition(位置:199,minPosition:100,maxPosition:200)) 预计在 199 到 200 之间

在哪里 平滑位置(位置:200,最小位置:100,最大位置:200)) 预计 200

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

【问题讨论】:

  • 那是加速度图还是真正的速度图?
  • 想一想,就是速度。
  • 从速度的角度考虑它可能会让您有些困惑。速度是距离的时间导数,虽然可以用速度来编写像这样的函数,但如果我理解正确的话,你真正需要的是距离函数。

标签: ios animation math logarithm curves


【解决方案1】:

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

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

此函数返回一个从 0 到 1 的数字。这是您的比例因子,与输出距离的倍数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多