计算出以 0 速度撞击目标位置的加速度?

Sea*_*ean 5 language-agnostic math physics

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

d = vt + (at^2)/2
Run Code Online (Sandbox Code Playgroud)

我在想

d = (end - start)
a = 2(d - vt) / t^2
Run Code Online (Sandbox Code Playgroud)

但当我运行它时,我的终点还很遥远。我尝试使用两个简单的更新,首先:

v += a * dt
d += v * dt
Run Code Online (Sandbox Code Playgroud)

第二:

d += v * dt + a * dt * dt / 2;
v += a * dt;
Run Code Online (Sandbox Code Playgroud)

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

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

Mat*_*rog 3

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

由于加速度恒定,因此平均速度v_start/2,这意味着我们将在 时到达 x_end t_end = (x_end - x_start) / (v_start / 2)

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

然后代入t_end即可求解a。我知道-v^2/(2D)D 在哪里了x_end - x_start。负号仅意味着您正在减速而不是加速。

如果将其插入到原始函数中,您将得到:

x(t) = x_start + v_start * t - (v^2/4D) * t^2
Run Code Online (Sandbox Code Playgroud)

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

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