我想移动的东西设定距离。然而,在我的系统有惯性/阻力/负accelaration。我使用一个简单的计算像这样它:

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 结果 有没有办法用一个分数值或宽松的功能做到这一点?的是,在我的经验的好处是,固定加速度和基于帧的动画有时过冲的最终点,需要强制,产生轻微的卡扣毛刺。

有帮助吗?

解决方案

这是一个简单的运动学问题。

目前一段时间t时,速度(v)在恒定加速度下的物体的通过描述:

v = v0 + at

其中v0为初始速度,a是加速度。在你的情况下,最终速度为零(对象停止),这样我们就可以解决对于t:

t = -v0/a

要找到总差行进,我们采取随时间的速度(第一方程)的积分。我没有做一个整体的几年,但我敢肯定这一个工程以:

d = v0t + 1/2 * at^2

我们可以在方程对于t我们开发了替代ealier:

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;
}

其他提示

如果你想移动设定的距离,使用以下命令:

“替代文字”

行驶距离仅仅是相对于时间的速度的积分。您需要将表达相对于与限制[V,0]和这会给你在V(初速)换算为距离的表达式。

集成到时间
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top