前回の話でベクトルの内積が出てきたので、ついでに内積の使い道をいくつか書いておきます。
まず、内積の定義だけ書いておきます。証明は教科書を読んでください。
ベクトルA(x1,y1,z1)、ベクトルB(x2,y2,z2)において、AとBの内積は次のようになります。
A・B = |A||B|cosθ
= x1*x2+y1*y2+z1*z2
ここでは3次元ベクトルを例にしましたが、内積は何次元のベクトルでも同じように定義されます。
最初の式にcosθが出てくるのに注目してください。内積の使い道は、このcosの性質を利用するものが多く、cosの使い道とも言えます。
2つのベクトルのなす角θにおけるcosθの値を求める
定義をちょっと変形するだけで、cosθが求まります。
cosθ = (A・B)÷(|A||B|)
= (x1*x2+y1*y2+z1*z2)÷(sqrt(x1^2+y1^2+z1^2)*sqrt(x2^2+y2^2+z2^2))
特にA、Bが単位ベクトルの場合は、分母の部分が1になるので省略でき、A・B=cosθになります。3D CG等では方向を表すのに単位ベクトルをよく使うので、cosθが欲しいときは簡単な計算で得られます。
直線上に垂線をおろした点の長さを求める
前回の話に出てきたものです。これはcosの定義そのもので、直角三角形においてcosに斜辺の長さを掛けると底辺の長さになります。
ベクトルAが斜辺だとすると、cosθ=の式の両辺に|A|を掛けて次のように変形します。
|A|cosθ = (A・B)÷|B|
Bを正規化したベクトルにこの値を掛ければ、垂線と交差する具体的な座標を得ることもできます。
また、平面と点Pの距離というのも、点Pから平面の法線に対して垂線をおろしたときの距離と考えることができるので、この性質が使えます。
相手が自分の前にいるのか後ろにいるのか判別する
自分から相手までの方向ベクトルと、自分の向きの方向ベクトルの内積をとり、その符号を調べることで、相手が自分の前方にいるのか後方にいるのか分かります。
cosは0度を中心とする山になっており、±90度以上でマイナスの値になります。相手が前にいるということは、自分の向いている方向から90度以内にいるということなので、cosの符号を見れば前後関係が分かります。
符号だけでなく具体的なcosの値を比較すれば、前方45度の範囲というような判別も簡単にできます。敵キャラクタに視野の幅を持たせるときに使えます。

