我正在通过X坐标将某个对象移向这样的目标:
object.x += (target - object.x) * 0.1; // Distance reduced by 10% each frame
我正在以60 FPS执行每一帧。如何计算到达目标(比给定半径更近)所需的时间(以秒(或帧数)为单位)?
我认为它叫做geometric progression或exponential decay,但是找不到如何应用这些想法和公式来解决我的问题。
答案 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);