ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

ターゲットの方向への角度を求める

この前、分からなかった誘導弾の角度を求める式がやっと分かった。こういうときはコードを見ているだけでは駄目で、実際に手を動かして図を書いてみると分かりやすい。図を書くのはデジタルよりもまだ紙とペンのほうが手軽で早い。
ゲームプログラマになる前に覚えておきたい技術に載っていたコード。そのままでなくちょっと書き換えてある。

vector target;
vector myPos;
vector myAngle;

// 方向角度
vector dir = target - myPos;
// Y軸角度
float yAngle = atan2( dir.x, dir.z );
//180度以上差があれば+-360度して逆回し
if( yAngle - myAngle.y > 180.0f ) {
    yAngle -= 360.0f;
} else if( myAngle.y - yAngle > 180.0f ) {
    yAngle += 360.0f;
}
// X軸角度
float zxLen = sqrt( dir.x * dir.x + dir.z * dir.z );
float xAngle = atan2( dir.y, zxLen );