それはすべてニュートンの方程式に戻ります。
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
は現在の時刻です。
もちろん、これは直線に沿っているので、2 次元または 3 次元に変換したい場合は、計算を行う必要があります。 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)
必要な力が得られます。
ご不明な点がございましたら、または私の計算に誤りがありましたらお知らせください。