少し上手くいかないことがあって投稿させていただきます。
C言語+DXライブラリを用いて、三次元シューティングゲームを作っています。
三次元空間上に2つの点(自機と敵機)があり、
片方(自機)からもう片方(敵機)を見た時の水平方向の(y軸を軸にした)角度と、
垂直方向の(x軸を軸にした)角度を求めたいと思っています。
自機はPc[0]、敵機はPc[1]で、
それぞれの座標(x, y, z)は(Pc.Pos.x, Pc.Pos.y, Pc.Pos.z)で表現しています。
また、Pcのメンバー変数RotTarはh(水平方向の角度),v(垂直方向の角度)を保持しています。
Pc[0].RotTar.h = atan2( Pc[1].Pos.x - Pc[0].Pos.x, Pc[1].Pos.z - Pc[0].Pos.z );
Pc[0].RotTar.v = atan2( Pc[1].Pos.y - Pc[0].Pos.y, Pc[1].Pos.z - Pc[0].Pos.z );
ある一定範囲内の角度からなら上手くいくこともありました。
なので場合分けが必要なのかと考えましたが、数学には明るくなく頓挫してしまいました。
2行目について気付くことがありましたらよろしくお願いします。