【发布时间】:2013-03-21 19:59:55
【问题描述】:
我有 3 个值来确定对象的运动:velocity、acceleration 和 maxVelocity。我还有一个distance 值,它决定了它们与目标的接近程度(基本上是一个X)。此代码运行每一帧以根据 3 个值确定实际运动:
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
如果velocityDelta 有点混乱,基本上是这样的:
velocityDelta = velocity + (acceleration * 0.016);
if (velocityDelta > maxVelocity) velocityDelta = maxVelocity;
else if (velocityDelta < -maxVelocity) velocityDelta = -maxVelocity;
velocityDelta = (velocityDelta - velocity) / 2;
现在,假设您只能更改acceleration 的值,有没有一种方法可以计算出您需要多大的加速度才能确保distance 最终恰好为0?在运行上述代码的其中一个帧中的含义,distance - delta == 0。所以假设代码如下所示:
var distance = 300.5;
var velocity = 125.86;
var maxVelocity = 300;
while (distance != 0) {
acceleration = ?
var velocityDelta = (Math.max(Math.min(velocity + (acceleration * 0.016), maxVelocity), -maxVelocity) - velocity) / 2;
velocity += velocityDelta;
var delta = velocity*0.016;
velocity += velocityDelta;
distance -= delta;
}
您会在acceleration 中添加什么值以确保循环不会永远运行?假设距离/速度/最大值可以是您无法更改的任何数字。
【问题讨论】:
标签: c++ math physics acceleration