2009年06月18日

外積の使い方

前回は内積のことを書いたので、今回はその友達の外積についてです。

内積も便利な道具ですが、外積も同じくらいかそれ以上に便利なもので、さらに内積と力を合わせると非常に強力な武器となります。

外積の定義は内積と比べると少し複雑で、ベクトルA(x1,y1,z1)とベクトルB(x2,y2,z2)の外積は次のようになります。

A×B = (y1*z2 - y2*z1, z1*x2 - z2*x1, x1*y2 - x2*y1)

内積の結果がスカラー値だったのに対して、外積の結果はベクトルである点が大きく違います。また、内積は何次元でも同じように定義されますが、外積は3次元ベクトルでしか使えません。(実際には1,3,7次元で使えるらしい。他の次元でも使える一般化した外積を定義するという試みも有ります)

外積の結果はこの式を見ても何のことだか分かりにくいと思います。実はこのベクトルは、AともBとも直行するベクトルです。外積には交換法則が成り立たず、A×BB×Aでは結果は逆向きのベクトルになります。また、|A×B|はABを辺とする平行四辺形の面積に等しくなります。

ところで、平行四辺形の面積というのは、底辺×高さと小学校で習ったと思いますが、Bを底辺とすると次のようになります。

S = |B| * h

高さhは三角関数を使って書くと |A|sinθ なので次のようになります。(θはABのなす角)

S = |A||B|sinθ

内積がcosと関係が深い計算なら、外積はsinと関係が深い計算になります。ここからsinθ=の式に変換するのは簡単ですね。

3次元ベクトルでしか使えない外積ですが、2次元の処理でも(x,y,0)と3次元に拡張すれば使うことができ、色々と面白い使い方があります。その場合、結果のベクトルは必ずx,y成分が0になってz成分だけが変化するので、z成分だけを計算して使います。

それでは、外積の使い道をいくつか挙げていきます。

法線ベクトルを求める

ある平面上の一直線上にない3点が分かれば、そこから法線ベクトルを求めることができます。三角形などの多角形なら、並行でない2辺から計算できます。

三角形の面積を求める

平行四辺形の面積は底辺×高さ、三角形の面積は底辺×高さ÷2と非常によく似ているので、三角形の面積も外積から簡単に求まります。

ある点が右左どちらにあるか分かる

内積では前後関係が分かりましたが、外積では左右が分かります。ただし、この判定は3Dだと使いにくいので、主に2Dで使います。(3Dの場合は右向きベクトルとの内積を取る方が楽)

2Dでの左右の判定は、自分の向きを表す方向ベクトルと、自分から相手への方向ベクトルの外積を取り、結果のベクトルのz成分の正負の符号で分かります。

凸多角形と点の内外判定ができる

凸多角形とは、180度以上の角を持たない多角形です。(ちなみに凸という字は凸多角形ではありません)

凸多角形の辺を時計周りに調べたとき、点Pが全ての辺に対して右側にある場合、Pは凸多角形の中にあります。(半時計回りなら左側)

この前の回転する矩形も凸多角形なので、この方法が使えます。

タグ:代数幾何
2009年06月18日 【プログラミング】 | コメント(0) |

この記事へのトラックバック
この記事へのコメント

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。