以几何级数移动物体
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);
我正在通过它的 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);