« アクティブサスペンションジェネレータ | トップページ | サスペンションの比較テスト »

2011年5月 6日 (金)

角度差の求め方

2つのベクトルa=( ax, ay)とb=( bx, by)がなす角θを求めたいとする。

ベクトルaが自機の進行方向で、ベクトルbはターゲットの方向かもしれない。
ベクトルaが1フレーム前の速度で、ベクトルbが現在の速度かもしれない。

この角度をatanを使って求めようとすると、180度境界、360度境界の処理が複雑になってはまる。

内積を使って求めると、スマートだ。
|a| = sqrt( ax^2+ay^2)
|b| = sqrt( bx^2+by^2)
として、2つのベクトルの内積を
a・b = ax*bx+ay*by
とすると、
a・b = |a||b| cosθ
なので
θ = acos( a・b / |a||b|)
として求められる。

しかし、これだけではbがaに対して右向きなのか左向きなのかわからない。
向きを求めるために、外積を使う。
a×b = ax*by-ay*bx
外積が正の時はbはaに対して左側にあり、負の時は右側にある。

« アクティブサスペンションジェネレータ | トップページ | サスペンションの比較テスト »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1499066/39878857

この記事へのトラックバック一覧です: 角度差の求め方:

« アクティブサスペンションジェネレータ | トップページ | サスペンションの比較テスト »