[英]How to compute triple product in 2D
我正在關注這篇關於如何為碰撞檢測編寫 GJK 算法的文章,但我不是在 3D 中進行,而是在 2D 中進行。
然而,在某一時刻,有一段代碼:
bool Line(
Simplex& points,
vector3& direction)
{
vector3 a = points[0];
vector3 b = points[1];
vector3 ab = b - a;
vector3 ao = - a;
if (SameDirection(ab, ao)) {
direction = ab.cross(ao).cross(ab);
}
else {
points = { a };
direction = ao;
}
return false;
}
如您所見,他鏈接了兩個交叉產品以找到下一個方向,但我怎么能在 2D 中做到這一點?
這是一張使這些向量更清晰的圖片:
3D 中的向量叉三乘積是
p = a ×( b × c )
可以使用以下矩陣/向量積計算完全展開
|px| | -ay*by-az*bz ay*bx az*bx | | cx |
|py| = | ax*by -ax*bx-az*bz az*by | | cy |
|pz| | ax*bx ay*bz -ax*bx-ay*by | | cz |
以上有多個 2D 投影,這取決於向量a 、 b或c中的一個或兩個是否不在平面(z 分量非零)。
在您的情況下,所有三個向量都在平面內( az=0
, bz=0
和cz=0
),這會產生以下結果
|px| | -ay*by ay*bx 0 | | cx | | ay*(bx*cy-by*cx) |
|py| = | ax*by -ax*bx 0 | | cy | = | ax*(by*cx-bx*cy) |
| 0| | 0 0 -ax*bx-ay*by | | 0 | | 0 |
所以你有它。 上面的右邊是二維中a ×( b × c ) 的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.