D11 現時点でのホーミングの実装のまとめ

パンツァードラグーンのサントラを聞きながら手前味噌のホーミングを発射して
うっとりしている今日この頃。変人街道を突っ走りつつあるようです。


一応ホーミングしてるみたいなので現時点での計算方法をまとめておきます。
結局、全部ベクトルで計算しました。私は行列が苦手なので
3次元でのホーミングはできないのではないかと思っていましたが、
よく調べてみたらベクトルでも問題なく計算できることが分かりました。
まあベクトルでも行列でも根本は同じで、
表現方法が違っているというだけなんですけどね。


ちなみに私はビルボードもベクトルを使っています。
ググるとどこもかしこも逆行列とか使ってて私には理解できません。
行列って難しいですよね。わけわかめです。
ベクトルを使って計算しているサンプルを探し当てることができて良かったです。
探せなかったら挫折していました。


http://www.wink.ac/~h-muro/d/ss/ss24.png


1.
ソースにのっとって書くと、まず相対的な原点がホーミングレーザの先端です。
そこからターゲット(以下、敵)の方向を向いたベクトルが Vt です。
以前の速度が Vv です。添え字は適当なので気にしないでください。


何も考えないで次の速度を Vt にすれば、敵を追っかけるようになりますが
それだとまっすぐ敵のほうに向かうだけになってしまいます。
敵の方向を向きたいけど、 (Vv から)一定角度しか曲がれないようにして
「ぐにゃー」と曲がりながら敵の方向へ向かうようにします。


そのためには、Vv と Vt が作る平面に沿って、Vv のベクトルを
相対的な原点を中心として Vt の方向へ一定角度回転させればいいことになります。


2.
面に沿って回転するためには、その面の垂線を回転軸として回転すればいいです。
その回転軸は、Vt と Vv の外積 Vc になります。Vt と Vv は単位化しておきます。
Vc を回転軸として Vv を一定角度回転させます。


3.
そのために、Vv を 90度回転させた Vcr を計算します。
Vcr は Vv と Vc の外積です。Vv と Vcr から進みたい方向 Vg を計算します。


4.
Vv と Vcr が作る平面で Vv を一定角度(θ)回転させるには、三角関数を使います。
Vg = Vv * cos(θ) + Vcr * sin(θ) です。
これだけです。


現時点では、敵との角度(1 におけるφ)が許容角度より大きい場合、角度制限をしています。
制限角度は 6度です。敵との角度がどんなに大きくても、6度ずつ曲がりながら
敵を追いかけるようになっています。
敵との角度が 6度以下の場合、敵に向かって一直線に進みます。


案外簡単ネ。ベクトル万歳。外積万歳。