方向ベクトルと長さ
http://d.hatena.ne.jp/kenmo/20050817#p1
で
「移動量は極座標にするべきだにゃーー!!」
なんてことを書いたわけですが、
これにはちょっとした欠点がありまして、、。
それは、極座標同士の加算・減算の手順が面倒、ということです。
例えば、
- 45°方向に5のスピード
- 135°方向に3のスピード
という2つの移動量を加算する場合、
というように一度直交座標に変換して、
としてやる必要があります。
さらにこれを極座標の移動量に変換するには、
となってしまいます。
このsin()/cos()→atan()/sqrt()という無駄な処理を何とかしたいなー、
と思っていたわけですが、
kenmoの知識ではなんともなりませんでした(´Д`;
で、なんとなく
ゲームプログラミングのための数学と物理
を読んでいたら、玉突きゲームの衝突処理のところで、
移動量を「方向ベクトルとスピード」を使っているのを見つけて、
なるほどー、と思ったわけです。
この方法なら、
- 単位ベクトル(x,y)=(0.707,0.707)、スピード5
- 単位ベクトル(x,y)=(-0.707,0.707)、スピード3
という情報を持っておけば、
となり、簡単に移動量の加算ができてしまいます。
単位ベクトルとスピードに戻す場合は、sqrt()と正規化で求められますね。
あと「スピード」が使えるので「加速減速」がやりやすいのも利点です。
ただ、方向転換するときはsin()/cos()/atan()を使う必要はあるのですがー。
ということでまとめです。
この3つのステップを踏むことで、
敵キャラの動きとかの細かい制御が容易になると思います。