ゲームプログラミング技術集 
ひっと

斜方投射の軌跡の求め方

斜方投射の軌跡を求めます。ゲームプログラミングに最適なベクトルを使った方法を紹介します。

斜方投射の軌跡を求める

斜方投射の軌跡を求める方法を紹介していきます。
ゲームプログラミングに使う物なので空気抵抗は考えません。重力だけを使い単純な放物線を描く斜方投射を扱います。

斜方投射の軌跡はベクトルを使うと簡単、高速

ベクトルで計算すると三角関数を使わずに解ける

高校の物理で習う三角関数を使った方法でも斜方投射の軌跡は計算できますが、 三角関数は処理に負担がかかりますのでゲームプログラミングではできるだけ避けたい計算です。
ベクトルを使った計算では、かけ算ひとつとベクトルの足し算だけで斜方投射の軌跡が得られます。

ベクトルを使った斜方投射の軌跡の求め方

ベクトルと斜方投射の軌跡の関係


図はV0の角度と速度で斜方投射した物体の軌跡とベクトルの関係を表しています。赤丸の点は軌跡上にあり、放物線を描きます。

物体の次の点は以前の位置と重力ベクトルで決まる

上の図から、物体の次の位置は以前の位置からの相対ベクトルに重力ベクトルを足すことで決まることが分かります。
重力ベクトルを足しながら次の位置を探し続けることで、斜方投射の軌跡を得ることができます。

放物線の軌跡を求める最初のベクトルは重力の半分を足して作る

前回の位置からの相対ベクトルと重力で次の位置が分かりますが、投射開始位置においては前回の位置が分かりませんのでベクトルvは計算が必要です。
投射ベクトルのV0をそのまま使うことはできません。物体の次の位置を表しているわけでは無いからです。
V0に重力ベクトルの半分を足すことで正しいベクトルvが作れます。

投射ベクトルに重力の半分を足す根拠

なぜ重力の半分を足せば良いのかについて解説します。
高校で習う程度の物理の本に物体の位置を求めるこんな公式が乗っています。

物体の位置 = 初速度 * 時間 + 1/2( 加速度 * 時間の二乗 )

この式を元に物体を打ち出すベクトルV0についてX軸とY軸それぞれで考えます。

Voを上の図のように分けると 斜方投射された物体の位置x,yは次の式になります。




gは重力(加速度)、tは時間です。
このときt=1とすると・・・




時間t=1の時のxとyが物体の次の位置なので、V0で投射した時の次の位置は重力ベクトルの半分を足した場所であることが分かります。

これで軌跡を得ることができました。
次は斜方投射のせいでまっすぐ飛ばない弾をどうやって目標に当てるかを紹介していきます。

      次へ

弾道計算プログラミング - 斜方投射