Pointy 的回答很好地总结了如何在给定初始轨迹的情况下模拟物体的运动(其中轨迹被认为是一个方向和一个速度,或者是一个向量的组合)。
但是,您在问题中说过(如果我没看错的话)您想确定初始轨迹,只知道原点O
和目标的预期点P
。
坏消息是,在实践中,对于任何特定P
的事物,都有无数的抛物线轨迹可以让你从O
. 角度和速度是相互依赖的。
如果我们翻译所有内容以使 O 位于原点(即 [0, 0]),则:
T_x = P_x - O_x // the X distance to travel
T_y = P_y - O_y // the Y distance to travel
s_x = speed * cos(angle) // the X speed
s_y = speed * sin(angle) // the Y speed
那么(x, y)
任意时间点的位置(t)
为:
x = s_x * t
y = s_y * t - 0.5 * g * (t ^ 2)
所以在影响你有
T_x = s_x * t
T_y = -0.5 * g * (t ^ 2) + s_y * t
但是您有三个未知数(t
和s_x
)s_y
和两个联立方程。如果您修复其中之一,则足以解决方程式。
FWIW,固定s_x
ors_y
相当于固定speed
or angle
,那个位只是简单的三角函数。
有些组合当然是不可能的——如果速度太低或角度太高,弹丸会在到达目标之前击中地面。
注意:这假设位置是连续评估的。根据 Pointy 的回答和您自己对如何模拟运动的描述,它与时间以离散增量流逝时发生的情况并不完全匹配。但是,如果您足够频繁地重新计算位置(即每秒 10 次),它应该足够准确。