我想把东西移动一段距离。然而,在我的系统中,存在惯性/阻力/负加速。我使用这样一个简单的计算:
v = oldV + ((targetV - oldV) * inertia)将其应用于多个帧会使运动“加速”或衰减,例如:
v = 10 + ((0 - 10) * 0.25) = 7.5 // velocity changes from 10 to 7.5 this frame所以我知道我想要旅行的距离和加速度,但不知道到达那里的初始速度。也许一个更好的解释是,我想知道击打台球有多难,这样它就会停在某个点上。
我一直在研究运动方程(http://en.wikipedia.org/wiki/Equations_of_motion),但找不出适合我的问题的正确方法是什么……
有什么想法吗?谢谢--我的背景是设计,而不是科学。
更新: Fiirhok有一个固定加速值的解决方案;HTML+jQuery演示:
http://pastebin.com/ekDwCYvj
有没有办法用小数值或松弛函数来做到这一点?在我的经验中,这样做的好处是固定的加速度和基于帧的动画有时会超出最后一个点,需要强制执行,从而造成轻微的捕捉故障。
发布于 2010-03-22 00:18:01
这是一个简单的运动学问题。
在某一时刻t,物体在恒定加速度下的速度(v)由下式描述:
v = v0 + at其中v0是初始速度,a是加速度。在您的情况下,最终速度为零(对象停止),因此我们可以求解t:
t = -v0/a为了找出总的差值,我们取速度(第一个方程)随时间的积分。我已经有几年没有做积分了,但我很确定这一次的结果是:
d = v0t + 1/2 * at^2我们可以在方程中替换我们早先开发的t:
d = v0^2/a + 1/2 * v0^2 / a以及v0的解决方案:
v0 = sqrt(-2ad)或者,以一种更具编程语言的格式:
initialVelocity = sqrt( -2 * acceleration * distance );在这种情况下,加速度是负的(物体正在减速),我假设它是恒定的,否则就会变得更复杂。
如果你想在一个步骤数有限的循环中使用它,你需要小心一点。循环的每次迭代代表一段时间。物体将移动一个等于平均速度乘以时间长度的量。迭代时间长度等于1的示例循环将如下所示:
position = 0;
currentVelocity = initialVelocity;
while( currentVelocity > 0 )
{
averageVelocity = currentVelocity + (acceleration / 2);
position = position + averageVelocity;
currentVelocity += acceleration;
}发布于 2010-03-21 20:42:42
如果要移动设定的距离,请使用以下方法:

发布于 2010-03-21 20:41:10
行进距离就是速度对时间的积分。你需要将关于时间的表达式与限制v,0进行积分,这将给出一个关于v(初始速度)的距离表达式。
https://stackoverflow.com/questions/2487065
复制相似问题