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

斜方投射で弾を目標に当てる方法

斜方投射のせいでまっすぐ飛ばない物体はどうやって当てるのか。ゲームプログラミングに欠かせない「狙って投射する方法」を紹介します。

斜方投射で弾を目標に当てる

斜方投射をコントロールして物体を目標に当てる方法を紹介していきます。
ゲームプログラミングでは敵の攻撃をプレイヤーに当てる時の計算に活用できます。

斜方投射の軌跡は「投射角度」と「強さ」でコントロールできます

斜方投射では物体の投射角度と強さの2つをコントロールして弾道を変えることができます。
ゲームプログラミングで使う場合は弓や大砲などを一定の強さで打ち出すと思いますので、ここでは目標に当てるための投射角度を計算していきます。

斜方投射の投射角を計算する方法

力学の公式から角度の計算式を求める

高校の物理で習った計算式によれば、
物体の位置 = 初速度 * 時間 + 1/2( 加速度 * 時間の二乗 )
この式を使ってX軸とY軸それぞれについて考えます。
投射ベクトルV0のX,Y成分は図のようになりますので・・・

斜方投射された物体の位置x,yについて、次のような式ができます。

   ・・・(1)
      ・・・(2)

gは重力(加速度)、tは時間です。

計算式から時間の成分を取り除く

式(1)(2)から時間tを外します。
(2)より

となるのでこれを(1)に代入すると式(3)になります。

   ・・・(3)

角度の二次方程式にする

式(3)のsin cosはtanθのみの二次方程式に変えることができます。


さらにとすると

   ・・・(4)
式(4)はtanθの二次方程式で、角度以外は全て定数です。
二次方程式を解くと角度が得られます

二次方程式を解く

のような形の二次方程式からXを求める場合。
   ・・・(5)
で解けますのでXをtanθにおきかえれば同様に解くことができます。
プログラミングでは解けたtanθをatan関数を使って角度に戻します。


二次方程式なので斜方投射の軌跡は2通り得られます。

斜方投射した弾が届かない場合があります

斜方投射の強さを一定として計算するため、目標が遠い場合は届きません。 このとき上の計算式(5)でルートの中身が0未満になりますので、投射した弾が届くかどうかの判断に使うことができます。
戻る     次へ

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