簡體   English   中英

如何在 2D 中計算三重乘積

[英]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 中做到這一點?

這是一張使這些向量更清晰的圖片:

AB 和 AO 向量的圖形

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 投影,這取決於向量abc中的一個或兩個是否不在平面(z 分量非零)。

在您的情況下,所有三個向量都在平面內( az=0bz=0cz=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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM