點在多邊形內的判斷

2022-05-07 20:45:13 字數 863 閱讀 9955

凸多邊形考慮叉積,因為在凸多邊形中,我們假設圍繞多邊形走一圈,如果點在多邊形內,那麼這個點一直在我們的同一側。按照這個性質,我們順時針或者逆時針處理多邊形上的點,叉積運算,算參考的和多邊形上連續的兩個點,如何叉積的結果符號發生變化,那麼不再多邊形內。

double det(point p1,point p2,point p0)

bool isinside(point p)

}pre=now;

}return true;

}

凹多邊形不滿足上面的性質,使用不能使用。計算機圖形學中講授過射線與多邊形的交點個數,如果為偶數,則不再多邊形內,否則在多邊形內。射線與多邊形變重合不考慮,與頂點相交特殊考慮,不考慮或者算乙個。

這裡我們作一條水平向右的射線。

首先,對於多邊形的水平邊不做考慮,其次,對於多邊形的頂點和射線相交的情況,如果該頂點是其所屬的邊上縱座標較大的頂點,則計數,否則忽略該點。最後,對於q在多邊形上的情形,直接判斷q是否屬於多邊形。

點積和叉積判斷點在直線上,運用叉積判斷點在多邊形的哪一側,這樣判斷和交點奇偶數等效,這樣寫較為減掉,寫的時候最後手動模擬一下,驗證正確性。

ll operator^(node p1, node p2) 

double det(node a, node b, node c)

bool onseg(node p, node l1, node l2)

//poly點順或者逆時針

bool pointinpolygon(node p, vectorpoly)

if (cnt != 0)return true;

return false;

}

判斷點在多邊形內演算法

點和多邊形關係的演算法實現 好了,現在我們已經了解了向量叉積的意義,以及判斷直線段是否有交點的演算法,現在回過頭看看文章開始部分的討論的問題 如何判斷乙個點是否在多邊形內部?根據射線法的描述,其核心是求解從p點發出的射線與多邊形的邊是否有交點。注意,這裡說的是射線,而我們前面討論的都是線段,好像不適...

點在多邊形內的判斷(射線法)

射線法,顧名思義,就是用射線去判斷點是否在多邊形內。射線從哪來呢?在這裡先設要判斷的點為p x,y 多邊形構成的點用乙個 v maxn x,y 陣列儲存 其中maxn是該多邊形的頂點數 射線是從p x,y 開始,水平向右 平行於 x 軸 引出,當然,這條射線只是虛擬的,想象出來就行了。射線引出來後有...

點在多邊形內外的判斷

點與多邊形的的位置關係 點在形內 點在形外 點在邊界上 判斷方法 射線法 轉角法 射線法 通常取x軸正方向為射線方向 奇數次相交,則在形內 偶數次相交,則在形外 對於凹多邊形也是可以的 射線法的特殊情況 與定點相交 與其相鄰的端點或者線段在射線的異側,則認為是相交 否則不認為相交 與邊部分重合 縮點...