内積とは 2 つのベクトルの間がどれくらい近いかを表す量です。
ベクトル a と、ベクトル b の内積 a * b は以下のように定義されます。
ここで、|a| はベクトル a の長さ、
|b| はベクトル b の長さ、
θ は 2 つのベクトルの間の角度です。
|a| = |b| = 1 の場合、内積 a * b は cosθ に等しくなることに注意してください。
内積には別の計算方法があります。
ここで、
a = <<x1, y1, z1>>、
b = <<x2, y2, z2>>
とすると、その計算方法は以下のようになります。
このことから、内積の計算ができれば 2 つのベクトルの間の角度がわからなくても cosθ の値を計算することができます。
内積は 2 つのベクトルの長さ(どちらも正の値)と cosθ の積なので、
θ が 0 度から 90 度の間では正の値、
θ が 90 度で 0、
θ が 90 度から 180 度の間では負の値になります。
このことから、内積の計算によってベクトル同士が、同じ向きを向いているかどうかを判断することができます。
角度(θ) | 内積(|a|≠1,|b|≠1) | 内積(|a|=|b|=1) | ベクトルの関係 |
---|---|---|---|
θ = 0 | |a||b| | 1 | 完全に同じ向き |
90 > θ > 0 | |a||b|cosθ > 0 | 1 > cosθ > 0 | 同じ向き |
θ = 90 | 0 | 0 | 直角 |
180 > θ > 90 | - |a||b|cosθ < 0 | 0 > cosθ > -1 | 反対向き |
θ = 180 | - |a||b| | -1 | 完全に反対向き |
Maya の MEL においては、 内積の計算は * 演算子によって行うことができます。
vector $a = <<1, 2, 3>>;
vector $b = <<4, 5, 6>>;
float $c = $a * $b;
// Result: 32 //