language-agnostic - 計算向量乘積 2D 交叉的語言不可知

  显示原文与译文双语对照的内容
119 4

從維基百科:

叉積是對兩個向量加權的二維運算,結果是垂直於包含兩個輸入向量的平面。

假設定義只在三個( 或者七,一個和零。) 維度中定義,那麼如何計算兩個 2d 向量的交叉乘積

我已經看到兩個實現。 一個返回一個新的向量( 只接受單個矢量),另一個返回標量( 是兩個向量之間的一個計算) 。

實現 1 ( 返回一個標量):


float CrossProduct(const Vector2D & v1, const Vector2D & v2) const


{


 return (v1.X*v2.Y) - (v1.Y*v2.X);


}



實現 2 ( 返迴向量):


Vector2D CrossProduct(const Vector2D & v) const


{


 return Vector2D(v.Y, -v.X);


}



為什麼要實現不同的實現我將使用標量實現? 我將使用的向量實現是?

我之所以問是因為我自己寫了一個Vector2D類,不知道該使用哪種方法。

时间: 原作者:

57 0

實現 1返回由輸入向量的規則 3D 乘積產生的向量的大小,以它的Z 值隱式為 0 ( 例如 ) 。 將 2D 空間視為 3D 空間中的平面。 3D 交叉產品將垂直於該平面,因這裡具有 0 X &構件( 因此返回的標量是 3D 個交叉乘積向量的Z 值) 。

同時,在兩個向量之間的向量的大小也同樣等於兩個向量的二維面積,這給了實現的另一個目標。 這裡外,該區域被簽名,可以用於確定從ics轉到V2時是順時針還是順時針方向移動。 還應該注意,實現 1是由這兩個向量構建的2 x2矩陣的行列式。

實現 2返回一個垂直於相同 2D 平面的輸入向量垂直的向量。 在古典意義上不是一個交叉產品,在"給我一個垂直向量"意義上是一致的。

注意,在交叉積operation--that下,3D 個歐氏空間是閉合的,兩個 3D 矢量的交叉積返回另一個 3D 向量。 以上 2D 個實現的兩種方式都不一致,也不一樣。

希望這有幫助。

80 4

英鎊: 是一個數學黑客的shorthand 符號。

長解釋:

不能在 2D 空間中使用向量進行交叉積。 這裡操作沒有定義。

然而,通常有趣的是,假定 2D 個向量將它的z 坐標設置為0,將兩個向量的十進位積分。 這與在xy平面上使用 3D 矢量相同。

如果擴展向量,並計算這類擴展矢量對的交叉乘積,則會注意到只有z 組件有意義: x 和y 永遠為零。

這就是為什麼結果的z 分量通常只是作為標量返回的原因。 這個標量可以用來找出 2D 空間中三個點的繞組。

從純數學角度來看,2D 空間的交叉積不存在,標量版本是 hack 和 2D 叉乘積,返回 2D 矢量,根本沒有意義。

原作者:
...