投稿者 tel | 2013年12月27日

ベクトルのなす角度を求める

アークコサイン(acos)を使うと0~πの範囲しか求められないのでatan2を使う。

ベクトルz0(x0,y0)とz1(x1, y1)のなす角度は以下のコードで求められる。

Math.atan2(x1 * y0 - x0 * y1, x0 * x1 + y0 * y1);

これだと-π~πまでなので0~2πにしたい場合は、値が負のときに2π足してあげればいい。
実際に書いてみた。
http://jsdo.it/sapphire_al2o3/angle

求め方

導出方法のメモ。

ベクトルを複素数平面で表すと、

z0z1

複素数の割り算は偏角の差になる。複素数をオイラー形式で表記すれば明らか。

euler

計算すると

z0divz1

 

なので実部をx、虚部をyとして、あとはatan2で求められる。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。