以几何级数移动对象

时间:2018-10-16 14:57:10

标签: math formula easing

我正在通过X坐标将某个对象移向这样的目标:

object.x += (target - object.x) * 0.1;  // Distance reduced by 10% each frame

我正在以60 FPS执行每一帧。如何计算到达目标(比给定半径更近)所需的时间(以秒(或帧数)为单位)?

我认为它叫做geometric progressionexponential decay,但是找不到如何应用这些想法和公式来解决我的问题。

1 个答案:

答案 0 :(得分:1)

提示提供了线索:

// Distance reduced by 10% each frame

这可用于构造最终位置的显式公式:

final = abs(initial - target) * pow(1 - 0.1, frames);

每帧的初始位移乘以0.9(即降低10%)。幂项累积了这些因素。

要反转表达式,请使用对数

frames = log(min_dist / abs(initial - target)) / log(1 - 0.1);

(请注意,某些语言有log的变体,该变体接受基数;在您的语言不接受的情况下,以上是等效的选择。)


编辑:计算乘数:

mult = 1 - pow(min_dist / abs(initial - target)), 1 / frames);