奇偶規則和非零纏繞規則

在圖形學中判斷一個點是否在多邊形內,若多邊形不是自相交的,那麼可以簡單的判斷這個點在多邊形內部還是外部;若多邊形是自相交的,那麼就需要根據非零纏繞規則和奇-偶規則判斷。

判斷多邊形是否是自相交的:多邊形在平面內除頂點外還有其他公共點

內-外測試
    不自交的多邊形:多邊形僅在頂點處連接,而在平面內沒有其他公共點,此時可以直接劃分內-外部分。
    自相交的多邊形:多邊形在平面內除頂點外還有其他公共點,此時劃分內-外部分需要採用以下的方法。

    (1)奇-偶規則(Odd-even Rule):奇數表示在多邊形內,偶數表示在多邊形外

    從任意位置p作一條射線,若與該射線相交的多邊形邊的數目爲奇數,則p是多邊形內部點,否則是外部點。

    (2)非零纏繞規則(Nonzero Winding Number Rule):若環繞數爲0表示在多邊形內,非零表示在多邊形外
    首先使多邊形的邊變爲矢量。將環繞數初始化爲零。再從任意位置p作一條射線。當從p點沿射線方向移動時,對在每個方向上穿過射線的邊計數,每當多邊形的邊從右到左穿過射線時,環繞數加1,從左到右時,環繞數減1。處理完多邊形的所有相關邊之後,若環繞數爲非零,則p爲內部點,否則,p是外部點。


參考[1]中例子如下,

判斷點p是否在多邊形內,從點p向外做一條射線(可以任意方向),多邊形的邊從左到右經過射線時環數減1,多邊形的邊從右往左經過射線時環數加1,最後環數不爲0,即表示在多邊形內部。


當然,非零纏繞規則和奇偶規則會判斷出現矛盾的情況,如下圖所示,左側表示用 奇偶規則判斷繞環數爲2 ,表示在多邊形外,所以沒有填充。右側圖用非零纏繞規則判斷出繞數爲2,非0表示在多邊形內部,所以填充。



另外一個例子,如下

參考

[1]http://www.cs.rit.edu/~icss571/filling/alt_parity.html

[2]http://cs.hust.edu.cn/webroot/courses/csgraphics/jiaocai.php?bookpage=5_c_c

[3]http://en.wikipedia.org/wiki/Nonzero-rule


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章