ベクトル:内積と外積の活用
課題
「内積」と「外積」の意味を理解したい。
解決策
このレシピでは、ベクトルの「内積」と「外積」の概念を紹介し、それらがどのように活用できるかを説明します。
内積
内積は二つのベクトルに対して行われる演算で、スカラー値を返します。これは通常、ベクトルAがベクトルBに投影される様子として視覚化されます。
以下が内積を計算するための公式です。
ここでθは2つのベクトル間の角度、||A||はAの大きさを表します。
これは両方のベクトルが正規化されている場合(つまり、その大きさがすべて1である場合)に特に有用です。その場合、公式は以下のように簡略化されます。
この結果から、内積が二つのベクトル間の角度と直接関係していることがわかります。cos(0) == 1 かつ cos(180) == -1 であることから、内積の値は二つのベクトルがどれだけ平行しているかを示します。
以下に、この事実を実際の事例でどのように活用できるかご説明します。
外積
二つのベクトルの外積は、それらに垂直な第三のベクトルであり、その大きさは各ベクトルの大きさとそれらの間の角度によって決まります。
もう一度確認しますが、正規化ベクトルを使用している場合、結果は以下のように簡略化されます。これは角度と完全に関連しており、その値は-1から1の範囲で変化します。
クロス積は両方のベクトルに垂直な値となるため、この計算するには3D空間で作業している必要があります。Godotを含むほとんどの2Dフレームワークでは、Vector2.cross() メソッドは結果の大きさを表すスカラー値を返します。
実用的な応用例
以下のアニメーションをご覧ください。これは Vector2.dot() と Vector2.cross() の結果が、角度の変化に伴ってどのように変わるかを視覚的に示しています。
この例は、これらの手法の2つのよくある応用事例を示しています。赤色ベクトルが対象物の前方方向を表し、緑色ベクトルが他の物体に向かう方向を示す場合。
- 内積:結果から、対象物体が前方(
>0)にあるか後方(<0)にあるかを判断できます。 - 外積:結果から、対象物体が左側(
>0)にあるか右側(<0)にあるかを判定できます。