外積(クロス積・ウェッジ積) とはなんぞや
3次元空間(以下、単に空間と呼ぶ)上の2つのベクトルに対する乗算として、高校の数学で習う範囲では「内積」がありますが、「外積」というものもあります。
外積は、
ベクトル × ベクトル → ベクトル
となる計算ですが、計算の結果となるベクトルは、掛けあわせた2つのベクトルの両方に垂直です。 この図で、a×bはa, b の両方に垂直で、大きさが|a||b|sinθ のベクトルです(ただしθはa, bのなす角)。
この計算は、使用する演算子にちなんで「クロス積」と呼ばれることがあります。
しかし、今回紹介するのは「2次元空間(以下、平面)上の外積」です。
2つの平面ベクトルに対して記号「∧」を用いて、
ベクトル ∧ ベクトル → スカラー(ふつうの数)
となる計算を外積と呼びます。
また、3次元での外積「クロス積」と区別するために、3次元以外での外積を「ウェッジ積」と呼びます。
ウェッジ積の求め方を、内積と比較して書いてみます。(ベクトルを太文字で表します)
ベクトル a = ( x1, y1 ), b = ( x2, y2 ) が角θをなすとき、
内積: a・b = x1x2 + y1y2 = |a||b|cosθ
ウェッジ積: a∧b = x1y2 - y1x2 = |a||b|sinθ
それぞれ、次のような性質があります。
内積
- ①2つのベクトルが垂直ならば結果が0になる。
②2つのベクトルがなす角が鋭角ならば正、鈍角ならば負になる。
(鋭角とは90度未満の鋭い角、鈍角は90度より大きい角です)
③交換法則が成り立つ。
つまり a・b = b・a
④分配法則が成り立つ。
つまり a・(b + c) = a・b + a・c
⑤k(a・b) = (ka)・b = a・(kb) である。
- ①2つのベクトルが平行なら結果が0になる。
②2つのベクトルの向きの関係が符号に現れる。
左から掛けたベクトルから見て、右から掛けたベクトルが右を向いているか、左を向いているかで結果の符号が異なります。
③交換法則は成り立たないが、次のような性質がある。
a∧b = -a∧b
④分配法則が成り立つ。
a∧( b + c ) = a∧b + a∧c
⑤k(a∧b) = (ka)∧b = a∧(kb)
⑥結果の絶対値は、2つのベクトルのなす平行四辺形の面積となる。
さて、ウェッジ積を使うと、点と直線の距離を調べることができます。 いま、点Pと直線ABがあるとき、ベクトルAB, APを考えます。
ABとAPが角θを成すとき、図のように直線と点の距離は |AP|sinθ となります。
ここで、2つのベクトルのウェッジ積は AB ∧ AP = |AB||AP|sinθ ですので、これを|AB|で割れば距離が求まります。
よって、直線と点の間の距離は
|AB ∧ AP|/|AB|
となります。
わざわざウェッジ積を使うより、直接 |AP|sinθ を計算したほうが早い気もしますが、ウェッジ積をベクトルの成分から計算すれば、θを求めることなく距離を計算することができます。
なす角が分からなくてもsinの値を使える、それが外積のメリットです。
そして、直線と点の間の距離を求めることができると、そこから線分と円の当たり判定に発展します。
その他にも、当たり判定にウェッジ積を使うとすっきりすることが幾らかありますので、これから説明していきたいと思います。
と、言う訳で、次回は線分に関する当たり判定を解説する予定です。軌跡はまた今度。
参考文献
平面での外積について、以下の資料が詳しいです。
今回は雑に説明してしまったので、わけが分からなかった場合は ◯×つくろーどっとコム さんの資料を参考にするといいと思います。
外積代数 from Wikipedia
ベクトル(高校の数学) from ++C++; // 未確認飛行C
内積と外積の使い方 from ◯×つくろーどっとコム