役に立ちましたか?

解決

Impllementation 1は、入力ベクトルの通常の3Dクロス積から生じるベクトルの大きさを返し、それらのZ値を暗黙的に0とします(つまり、2D空間を3D空間の平面として扱います)。 3Dの外積はその平面に垂直になるため、0 X& Yコンポーネント(返されるスカラーは3D外積ベクトルのZ値です)。

3Dクロス積から生じるベクトルの大きさは、2つのベクトル間の平行四辺形の面積にも等しいことに注意してください。これにより、実装1に別の目的が与えられます。さらに、この領域は署名されており、V1からV2への回転が反時計回りまたは時計回りのどちらの方向に移動するかを判断するために使用できます。実装1は、これら2つのベクトルから構築された2x2行列の決定要因であることにも注意してください。

Implementation 2は、同じ2D平面にある入力ベクトルに垂直なベクトルを返します。古典的な意味での外積ではなく、「垂直ベクトルを与えてください」で一貫しています。センス。

3Dユークリッド空間は外積演算の下で閉じられていることに注意してください。つまり、2つの3Dベクトルの外積は別の3Dベクトルを返します。上記の2D実装はどちらも何らかの形で矛盾しています。

これが役立つことを願っています...

他のヒント

要するに:これは数学的なハックの略記法です。

詳細な説明:

2D空間のベクトルとの外積はできません。操作はそこで定義されていません。

ただし、2次元ベクトルがz座標をゼロに設定して3次元に拡張されると仮定して、2つのベクトルの外積を評価することは興味深い場合があります。これは、xy平面で3Dベクトルを操作するのと同じです。

ベクトルをそのように拡張し、そのような拡張ベクトルペアの外積を計算すると、zコンポーネントのみに意味のある値があることに気付くでしょう:xとyは常にゼロになります。

これが、結果のzコンポーネントがしばしばスカラーとして単に返される理由です。このスカラーは、たとえば、2D空間で3つのポイントのワインディングを見つけるために使用できます。

純粋な数学的な観点からは、2D空間の外積は存在しません。スカラーバージョンはハックであり、2Dベクトルを返す2D外積はまったく意味がありません。

外積のもう1つの有用な特性は、その大きさが2つのベクトル間の角度のサインに関連することです:

  

| a x b | = | a | 。 | b | 。 sine(theta)

または

  

sine(theta)= | a x b | /(| a |。| b |)

したがって、上記の実装1では、 a b が事前に単位ベクトルであることがわかっている場合、その関数の結果はそのsine()値になります。

実装1は、2つのベクトルの perpドット積です。 2Dグラフィックスに関する私が知っている最良のリファレンスは、優れたグラフィックスジェムシリーズです。スクラッチ2D作業をしている場合、これらの本を持っていることは本当に重要です。 Volume IVには、「The Pleasures of Perp Dot Products」という記事があります。それはそれの多くの用途を超えています。

perp dot product の主な用途の1つは、 dot product と同様に、2つのベクトル間の角度のスケーリングされた sin を取得することです角度のスケーリングされた cos を返します。もちろん、ドット積 perpドット積を一緒に使用して、2つのベクトル間の角度を決定できます。

こちらはその投稿であり、< a href = "http://mathworld.wolfram.com/PerpDotProduct.html" rel = "nofollow">こちらはWolfram Math Worldの記事です。

私は、計算で2dの外積を使用して、重心に対して任意の点で力ベクトルが作用しているオブジェクトの新しい正しい回転を見つけています。 (スカラーZのもの。)

有用な2Dベクトル演算は、スカラーを返す外積です。ポリゴンの2つの連続したエッジが左右に曲がっているかどうかを確認するために使用します。

Chipmunk2D ソースから:

/// 2D vector cross product analog.
/// The cross product of 2D vectors results in a 3D vector with only a z component.
/// This function returns the magnitude of the z value.
static inline cpFloat cpvcross(const cpVect v1, const cpVect v2)
{
        return v1.x*v2.y - v1.y*v2.x;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top