以几何级数移动物体

Moving an object with geometric progression

我正在通过它的 X 坐标将一些对象移向这样的目标:

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

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

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

线索由评论给出:

// 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);