所有一切都回到牛顿的方程式:
F = m * a
s = s_o + v * t + a * t^2 / 2
v = v_o + a * t
在这种情况下,
F
代表力(推力),
a
代表加速度,
m
代表船的质量。
s
表示当前位置,
s_o
表示原始位置,
v
表示速度,
t
表示当前时间。
当然,这是沿着一条直线进行的,所以如果你想转换为二维或三维,则需要进行一些数学计算。
F
、
s
、
v
和
a
都是向量,也就是说它们的方向同样重要。技术上讲,
t
也是一个向量,但由于时间通常只能朝一个方向流动,因此我们不必担心这个问题。
2d:
F^2 = F_x^2 + F_y^2 (use Pythagorean theorem to split force into components)
F_x = m * a_x
F_y = m * a_y
s_x = s_o_x + v_x * t + a_x * t^2 / 2
s_y = s_o_y + v_y * t + a_y * t^2 / 2
v_x = v_o_x + a_x * t
v_y = v_o_y + a_y * t
3d:
F^2 = F_x^2 + F_y^2 + F_z^2 (surprisingly, this works)
F_x = m * a_x
F_y = m * a_y
F_z = m * a_z
s_x = s_o_x + v_x * t + a_x * t^2 / 2
s_y = s_o_y + v_y * t + a_y * t^2 / 2
s_z = s_o_z + v_z * t + a_z * t^2 / 2
v_x = v_o_x + a_x * t
v_y = v_o_y + a_y * t
v_z = v_o_z + a_z * t
现在,为了将你的速度调整到玩家的方向上,你需要有一个固定的总力量(
F
),以改变你当前的速度朝向玩家。在物理学中,事情不是瞬间发生的,但你的目标应该是尽量缩短发生变化的时间(
t
)。
这给出了一个方程式,涉及你当前的位置(
(s_o_x,s_o_y)
或
(s_o_x,s_o_y,s_o_z)
)和你的对手的当前位置或你的目标位置(
(s_x,s_y)
或
(s_x,s_y,s_z)
),用于计算你的目标速度(忽略加速度)。
v_x = (s_x - s_o_x) / t
v_y = (s_y - s_o_y) / t
v_x = (s_x - s_o_x) / t
v_y = (s_y - s_o_y) / t
v_z = (s_z - z_o_y) / t
我们可以用这个方程替代另一个方程:
(s_x - s_o_x) / t = v_o_x + a_x * t
(s_y - s_o_y) / t = v_o_y + a_y * t
(s_x - s_o_x) / t = v_o_x + a_x * t
(s_y - s_o_y) / t = v_o_y + a_y * t
(s_z - z_o_y) / t = v_o_z + a_z * t
我们接下来要求解加速度(这与力有关,我们正试图计算的就是力)。
(s_x - s_o_x) / t^2 - v_o_x / t = a_x
(s_y - s_o_y) / t^2 - v_o_y / t = a_y
(s_x - s_o_x) / t^2 - v_o_x / t = a_x
(s_y - s_o_y) / t^2 - v_o_y / t = a_y
(s_z - z_o_y) / t^2 - v_o_z / t = a_z
将此插入力学方程中:
F_x = m * (s_x - s_o_x) / t^2 - m * v_o_x / t
F_y = m * (s_y - s_o_y) / t^2 - m * v_o_y / t
F_x = m * (s_x - s_o_x) / t^2 - m * v_o_x / t
F_y = m * (s_y - s_o_y) / t^2 - m * v_o_y / t
F_z = m * (s_z - z_o_y) / t^2 - m * v_o_z / t
现在解决
t
的问题:
t = (-m * v_o_x +/- sqrt(m^2 * v_o_x^2 - 4 * F_x * m * (s_x - s_o_x))) / 2 / F_x
t = (-m * v_o_y +/- sqrt(m^2 * v_o_y^2 - 4 * F_y * m * (s_y - s_o_y))) / 2 / F_y
t = (-m * v_o_x +/- sqrt(m^2 * v_o_x^2 - 4 * F_x * m * (s_x - s_o_x))) / 2 / F_x
t = (-m * v_o_y +/- sqrt(m^2 * v_o_y^2 - 4 * F_y * m * (s_y - s_o_y))) / 2 / F_y
t = (-m * v_o_z +/- sqrt(m^2 * v_o_z^2 - 4 * F_z * m * (s_z - s_o_z))) / 2 / F_z
时间应该会趋于一致,因此时间将是相等的!这为每个坐标(平面和球体)给我们一个方程组。请注意,有多个可能的值,但其中一些涉及虚数,因此您需要消除这些解:
(-m * v_o_x +/- sqrt(m^2 * v_o_x^2 - 4 * F_x * m * (s_x - s_o_x))) / 2 / F_x
= (-m * v_o_y +/- sqrt(m^2 * v_o_y^2 - 4 * F_y * m * (s_y - s_o_y))) / 2 / F_y
F^2 = F_x^2 + F_y^2
(-m * v_o_x +/- sqrt(m^2 * v_o_x^2 - 4 * F_x * m * (s_x - s_o_x))) / 2 / F_x
= (-m * v_o_y +/- sqrt(m^2 * v_o_y^2 - 4 * F_y * m * (s_y - s_o_y))) / 2 / F_y
= (-m * v_o_z +/- sqrt(m^2 * v_o_z^2 - 4 * F_z * m * (s_z - s_o_z))) / 2 / F_z
F^2 = F_x^2 + F_y^2 + F_z^2
解决 (F_x,F_y)
或 (F_x,F_y,F_z)
坐标,即可得到所需的力量。
如果您对我的数学有任何问题或发现错误,请告诉我。