找出以0速度击中目标位置的加速度?

时间:2010-02-12 23:34:17

标签: language-agnostic math physics

我正试图让我的模拟停在特定点上。我有我的起始位置,结束位置,我当前的速度以及我想要到达那里的时间。时间:

d = vt + (at^2)/2

我在想那个

d = (end - start)
a = 2(d - vt) / t^2

但是当我运行它时,我的结束点已经过时了。我尝试过使用两个简单的更新,第一个:

v += a * dt
d += v * dt

和第二:

d += v * dt + a * dt * dt / 2;
v += a * dt;

如果重要的话。在这种情况下的位置是1d,所以不需要疯狂的矢量东西。任何帮助将不胜感激:)谢谢!

(编辑:格式化) (编辑2:更正的更新#2) (编辑3:更新现在显示dt而不是t)

3 个答案:

答案 0 :(得分:2)

我们从x_start(和t = 0)开始,速度为v_start,我们希望以x_end结束,速度为零。

由于我们有一个恒定的加速度,平均速度将为v_start/2,这意味着我们将在t_end = (x_end - x_start) / (v_start / 2)达到x_end。

好的,那么我们可以使用x(t) = x_start + v_start * t + at^2/2。作为完整性检查,插入t = 0并确保获得x = x_start。

然后插入t_end,你可以解决一个问题。我得到-v^2/(2D),其中D是x_end - x_start。负号只是意味着你正在放慢速度而不是加速。

如果您将其插入到原始功能中,您将获得:

x(t) = x_start + v_start * t - (v^2/4D) * t^2

如果你有一个计数器告诉你t的值(它将在0和t_end之间变化),你可以在每个时刻将对象移动到正确的位置。

或(这可能更有意义,取决于语言,环境等),您可以按照CoderTao的答案计算每个时间步的瞬时速度,然后计算瞬时位置。

答案 1 :(得分:0)

一个可能的问题;从你到目前为止所写的不清楚的是方程式:

v+=a*t
d+=v*t
...
d+=v*t + a*t*t/2
v+=a*t

应该是:

v+=a*dt
d+=v*dt
...
d+=v*dt + a*dt*dt/2
v+=a*dt

其中dt是自上次更新以来的时间差异。获得更多信息 - 周围的代码,示例输入/输出等

将是有用的

答案 2 :(得分:0)

为什么要更改物理公式?只需更改加速度,即可将对象停在您想要的位置。

您所要求的加速度是:

a = 2(d - vt) / t^2

只需在代码中指定a即可开始停止。