首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算初始速度以惯性移动一段设定的距离

计算初始速度以惯性移动一段设定的距离
EN

Stack Overflow用户
提问于 2010-03-21 20:36:03
回答 3查看 3.8K关注 0票数 6

我想把东西移动一段距离。然而,在我的系统中,存在惯性/阻力/负加速。我使用这样一个简单的计算:

代码语言:javascript
复制
v = oldV + ((targetV - oldV) * inertia)

将其应用于多个帧会使运动“加速”或衰减,例如:

代码语言:javascript
复制
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

有没有办法用小数值或松弛函数来做到这一点?在我的经验中,这样做的好处是固定的加速度和基于帧的动画有时会超出最后一个点,需要强制执行,从而造成轻微的捕捉故障。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-22 00:18:01

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

在某一时刻t,物体在恒定加速度下的速度(v)由下式描述:

代码语言:javascript
复制
v = v0 + at

其中v0是初始速度,a是加速度。在您的情况下,最终速度为零(对象停止),因此我们可以求解t:

代码语言:javascript
复制
t = -v0/a

为了找出总的差值,我们取速度(第一个方程)随时间的积分。我已经有几年没有做积分了,但我很确定这一次的结果是:

代码语言:javascript
复制
d = v0t + 1/2 * at^2

我们可以在方程中替换我们早先开发的t:

代码语言:javascript
复制
d = v0^2/a + 1/2 * v0^2 / a

以及v0的解决方案:

代码语言:javascript
复制
v0 = sqrt(-2ad)

或者,以一种更具编程语言的格式:

代码语言:javascript
复制
initialVelocity = sqrt( -2 * acceleration * distance );

在这种情况下,加速度是负的(物体正在减速),我假设它是恒定的,否则就会变得更复杂。

如果你想在一个步骤数有限的循环中使用它,你需要小心一点。循环的每次迭代代表一段时间。物体将移动一个等于平均速度乘以时间长度的量。迭代时间长度等于1的示例循环将如下所示:

代码语言:javascript
复制
position = 0;
currentVelocity = initialVelocity;
while( currentVelocity > 0 )
{
    averageVelocity = currentVelocity + (acceleration / 2);
    position = position + averageVelocity;
    currentVelocity += acceleration;
}
票数 8
EN

Stack Overflow用户

发布于 2010-03-21 20:42:42

如果要移动设定的距离,请使用以下方法:

票数 3
EN

Stack Overflow用户

发布于 2010-03-21 20:41:10

行进距离就是速度对时间的积分。你需要将关于时间的表达式与限制v,0进行积分,这将给出一个关于v(初始速度)的距离表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2487065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档