1. 程式人生 > >奇偶規則和非零環繞數規則

奇偶規則和非零環繞數規則

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

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

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

    (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表示在多邊形內部,所以填充。

 

另外一個例子,如下