多邊形判斷點內外

2021-07-11 13:09:43 字數 1510 閱讀 6366

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

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

內-外測試

不自交的多邊形:多邊形僅在頂點處連線,而在平面內沒有其他公共點,此時可以直接劃分內-外部分。

自相交的多邊形:多邊形在平面內除頂點外還有其他公共點,此時劃分內-外部分需要採用以下的方法。

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

另外乙個例子,如下

非零環繞規則和奇-偶規則(non-zero winding number rule&&odd-even rule)在iphone中應用

1.cgcontextclip  使用非零環繞規則來判斷當前路徑和裁剪路徑的交集。

2.cgcontexteoclip 使用奇偶環繞規則來判斷當前路徑和裁剪路徑的交集。

點 多邊形內外判斷

問題情境 1.判斷點是否在人體某個部位 不規則多邊形 上 思路辨析 判斷方法有好多種,需要考慮到實用性 侷限性 和 化簡易程度。1.面積和判斷,內角和判斷 角法 等,或侷限於多邊形形狀 凹 凸 或 計算有複雜地方 弧長,角度計算 或侷限於多邊形頂點的順序問題等。2.觀察及檢驗之下,射線法 判斷奇偶 ...

演算法 點在多邊形內外判斷

射線發 射線發判斷點是否在多邊形內部 p 待判斷的點。格式 poly 多邊形定點,陣列成員格式相同 private string raycasting point p,listpoly 判斷線段兩短點是否在射線兩側 if sy py sy py tyif x px return flag in ou...

點在多邊形內外的判斷

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