維基百科:計算二維矢量的交叉積
叉積是在導致另一種載體,其是垂直於包含平面的三維歐幾里得空間上的兩個向量的二進制運算兩個輸入向量。
鑑於定義僅在三維(or seven, one and zero)維中定義,如何計算兩個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類,不知道使用哪種方法。
實現2是錯誤的。你需要兩個向量來構成一個交叉產品。 – bobobobo 2009-06-24 17:37:02
實現2將給定矢量_v_旋轉-90度。 'x'中的取代基-90 =xcosθ-ysinθ`和`y'=xsinθ+ycosθ`。這個實現的另一個變體是`返回Vector2D(-v.Y,v.X);`它旋轉+90度。 – legends2k 2013-02-15 08:19:24
@ legends2k:值得注意的是,實現2是[使用行列式來評估交叉產品]的擴展(https://en.wikipedia。org/wiki/Cross_product#Matrix_notation):只刪除最後一行和一列。這樣的擴展總是有`N`尺寸的`N-1`操作數。 – 2015-10-29 19:01:02