1. 程式人生 > >判斷點是否在一個任意多邊形內幾種方法

判斷點是否在一個任意多邊形內幾種方法

1.多邊形面積演算法(非凹多邊形,凹多邊形需要切割為凸多邊形):

     設要檢測的點為P點。用P點連線多邊形各頂點,假如P點在多邊形以內,則頂點與P組成的三角形正好填充此多邊形。反之,則不能。此時使用多邊形面積計算公式,使P點作為參考點(a,b,c,.......,n為多邊形定點)則有:

   S = 0.5 * ( (a.x-p.x)*(a.y-p.y)-(b.x-p.x)*(b.y-p.y) +(b.x-p.x)*(b.y-p.y)-(c.x-p.x)*(c.y-p.y) +......... + (n.x-p.x)*(n.y-p.y)-(a.x-p.x)*(a.y-p.y) )

   如果P點不在多邊形以內,則每個三角形的相對面積符號不會一致。由於0.5並不會影響我們的運算結果   所以只需要取每個三角形面積的符號(a.x-p.x)*(a.y-p.y)-(b.x-p.x)

*(b.y-p.y)  如果一致則在多邊形以內,反之則不在多邊形以內。

2.水平/垂直交叉點數

    如下左圖,適用於所有多邊形,增加一個通過測量點的橫線(或任意直線),此直線與多邊形邊緣的交點,當測量點左右的交點都為奇數時,點在多邊形以內。反之則不在。

但是如果測量點處於多邊形邊緣或頂點或下右3圖的情況下時,結果將不準確,不過我們可以根據不同的情況作特殊處理來保證結果的正確性。

   

3.角度計算方式(非凹多邊形,凹多邊形需要切割為凸多邊形)

    設測量點為P,對於凸多邊形,P到連續兩點形成的夾角的角度和正好是360度(如下圖),則可以得出結論,當角度和為360度的時候,點在多邊形以內。


附 :  凹多邊形判別

     在幾何學中,對凸邊形的定義是對於任意一邊,不在這個邊上的頂點都在邊的一側。


附 :  凹多邊形分割為多個凸多邊形