我迷路了。我一直試圖在以下位置實現此代碼:http://www.blackpawn.com/texts/pointinpoly/default.html該代碼如何從兩個2D矢量的叉積中檢索2D矢量?
但是,我不知道在兩個2D矢量之間呈現的叉積也可能導致2D矢量,這怎麼可能。這對我沒有意義。這也出現在一些精美的書籍「實時碰撞檢測」中 - 在多邊形和線條相交的一些例子中 - 甚至是2D矢量之間的標量三元組出現在代碼中(例如參見第189頁)。
問題是,據我所能想到的,兩個2D矢量的僞交叉乘積只能產生一個標量(v1.x v2.y-v1.y v2.x)或者如果增加了兩個零,則至多在3D矢量中,因爲該標量表示Z維度。但是它怎麼會導致2D矢量呢?
我不是第一個問這個問題的人,恰巧,當試圖使用相同的代碼示例時:Cross product of 2 2D vectors但是,正如可以很容易地看到的那樣,答案,更新時的原始問題以及該線程中的註釋已結束如果我敢這麼說的話,那會非常糟糕。
有誰知道我該如何從兩個2D矢量的交叉乘積中獲得這些2D矢量?如果要提供代碼,我可以處理C#,JavaScript和一些C++。
編輯 - 這裏是書中一段代碼正如我上面提到:
int IntersectLineQuad(Point p, Point q, Point a, Point b, Point c, Point d, Point &r)
{
Vector pq = q - p;
Vector pa = a - p;
Vector pb = b - p;
Vector pc = c - p;
// Determine which triangle to test against by testing against diagonal first
Vector m = Cross(pc, pq);
float v = Dot(pa, m); // ScalarTriple(pq, pa, pc);
if (v >= 0.0f) {
// Test intersection against triangle abc
float u = -Dot(pb, m); // ScalarTriple(pq, pc, pb);
if (u < 0.0f) return 0;
float w = ScalarTriple(pq, pb, pa);
....
你在說「同方技術」,對吧? XY平面中的2個3d矢量的叉積是平行於Z軸的矢量。 2個2d向量的交叉點是3d交叉點的Z分量,因此這裏提到的點積可以通過簡單地乘以兩個2d交叉點的值來得到(即,點對齊與Z軸平行的3d交叉點,因此彼此)。 – dbc
感謝您的評論。所以,是的,這是我想到的技巧。你所說的是,Dot產品只是兩個2D矢量交叉乘積給出的兩個標量的乘積? 但是看看我剛剛包含在原始問題中的書中的例子。在那個例子中,我應該將整個2D向量pa乘以由pc和pq的交叉乘積產生的標量? – MAnd
@dbc請注意,在所提供的示例中,作者將2D向量pc和pq的叉積存儲在名爲「m」的向量中。如果我直接回答你的建議,並簡單地對兩個2D矢量之間的叉積進行通常的計算,則將其保存爲「m」(將其聲明爲浮點數),然後直接乘以「m」和矢量「pa」那麼「v」不能是浮點數,如示例 – MAnd