斜方投射の軌跡を求める方法を紹介していきます。
ゲームプログラミングに使う物なので空気抵抗は考えません。重力だけを使い単純な放物線を描く斜方投射を扱います。
高校の物理で習う三角関数を使った方法でも斜方投射の軌跡は計算できますが、
三角関数は処理に負担がかかりますのでゲームプログラミングではできるだけ避けたい計算です。
ベクトルを使った計算では、かけ算ひとつとベクトルの足し算だけで斜方投射の軌跡が得られます。
図はV0の角度と速度で斜方投射した物体の軌跡とベクトルの関係を表しています。赤丸の点は軌跡上にあり、放物線を描きます。
上の図から、物体の次の位置は以前の位置からの相対ベクトルに重力ベクトルを足すことで決まることが分かります。
重力ベクトルを足しながら次の位置を探し続けることで、斜方投射の軌跡を得ることができます。
前回の位置からの相対ベクトルと重力で次の位置が分かりますが、投射開始位置においては前回の位置が分かりませんのでベクトルvは計算が必要です。
投射ベクトルのV0をそのまま使うことはできません。物体の次の位置を表しているわけでは無いからです。
V0に重力ベクトルの半分を足すことで正しいベクトルvが作れます。
なぜ重力の半分を足せば良いのかについて解説します。
高校で習う程度の物理の本に物体の位置を求めるこんな公式が乗っています。
物体の位置 = 初速度 * 時間 + 1/2( 加速度 * 時間の二乗 )
この式を元に物体を打ち出すベクトルV0についてX軸とY軸それぞれで考えます。
Voを上の図のように分けると
斜方投射された物体の位置x,yは次の式になります。
gは重力(加速度)、tは時間です。
このときt=1とすると・・・
時間t=1の時のxとyが物体の次の位置なので、V0で投射した時の次の位置は重力ベクトルの半分を足した場所であることが分かります。
これで軌跡を得ることができました。
次は斜方投射のせいでまっすぐ飛ばない弾をどうやって目標に当てるかを紹介していきます。