内積も外積も高校の数学で習うかもしれない計算方法のことです。(掛け算の仲間です)。 なので、難しく話すといくらでも難しくなりますが、プチコンプログラマにとっては意味は分からなくても高速化できるかもしれない計算テクニックにすぎません。
内積・外積は2つのベクトルの掛け算にあたります。
ベクトルとは長さと向きを持った数のことで、要はX軸方向の値と、Y軸方向の値をまとめて1つの数とみなしたものです。
以下の、変数を使って説明します。
A | 掛けられる側のベクトル |
---|---|
B | 掛ける側のベクトル |
Ax | ベクトルAのX軸方向の長さ |
Ay | ベクトルAのY軸方向の長さ |
Bx | ベクトルBのX軸方向の長さ |
By | ベクトルBのY軸方向の長さ |
R | ベクトルBからAへの角度 |
以下に内積と外積の定義になります。そして定義からゴチャゴチャした計算をした結果、以下の計算結果になります。
定義 | 計算結果 | |
---|---|---|
内積 | |A||B|cos(R) | Ax*Bx + Ay*By |
外積 | |A||B|sin(R) | Ax*By - Ay*Bx |
|A|と|B|はベクトルの長さのことです。
cosとsinの詳細が知りたいときは三角関数の使い方をご覧ください。
ここで、この計算で求められた値にどんな意味があるんだろう?とか、考えちゃダメです。
重要なのは定義と計算結果が一致するということです。
|A|と|B|は絶対にプラスの値なので、三角関数と計算結果の符号が一致します。つまり
内積 | SGN(cos(R)) == SGN(Ax*Bx + Ay*By) |
---|---|
外積 | SGN(sin(R)) == SGN(Ax*By - Ay*Bx) |
が、成り立ちます。 要するに内積を求めるとcosの、外積を求めるとsinの符号が分かるということです。
では、sin・cosの符号が分かると何がうれしいのでしょうか?
それは、角度Rの大まかな値が分かるということです。
sin・cosは角度によってこのように変化します。
角度はラジアンで表してあります。ラジアンについても三角関数の使い方をご覧ください。
このようにsin・cosの値はπ/2(90°)単位で変化するので、大まかな前後左右が判断できます。
Bから見たAの方向 | ||||||||
---|---|---|---|---|---|---|---|---|
左後 | 左 | 左前 | 前 | 右前 | 右 | 右後 | 後 | |
内積 | - | 0 | + | + | + | 0 | - | - |
外積 | - | - | - | 0 | + | + | + | 0 |
コメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)