判斷一個點是否在多邊形內部


三角形的有向面積:

我們先判斷一個點是否在一個三角形內部。一個三角形在一個座標系(譬如由A、B、C三點組成)中,我們可以通過計算它的有向面積來判斷A、B、C三點在座標系中的順逆。當然,在此之前我們必須先訂立一套計算面積的規則。比如,在笛卡爾座標系中,我們利用:
S=((A.x-B.x)*(A.y+B.y)+(B.x-C.x)*(B.y+C.y)+(C.x-A.x)*(C.y+B.y))/2     ----------------------------------   <1>
來計算三角形的有向面積。規則即是:從第一點開始,用前一點橫座標減後一點橫座標與兩座標之和的乘積求梯形面積,直到完成多邊性的封閉,得到三角形的有向面積。此時,如果求出的值是正的(S>0),則得出A->B->C爲逆時針,否則爲逆時針。

判斷點在三角形內:

假設存在一個點D,若這個點在三角形的內部,則以該點爲起點,和原多邊形的任意兩個連續的且尊照多邊形組成方向的點(如DAB、DBC、DCA)組成的三角形講都是一個方向,如DAB和DBC都是順時針方向。若這個點在三角形的外部,則會出現DAB、DBC、DCA三個三角形方向不一致的情形,即其中有一個不同於另外兩個(如一個順,兩個逆)。
通過判斷該點同三角形連續兩點組成三角形的順逆性(歸於面積的正負)來判斷點是否在三角形內。

判斷點在凸多邊形內:

實際上,對於其他的凸多邊性也可以用一樣的方法,只是這個時候判斷的三角形的數目增加了,不管怎麼樣,只要點在多邊形內部他們的順逆都是一樣的。

判斷點在凹多邊形內:

對於凹多邊形而言,情況就要相對複雜一些了。此時,判斷一個點是否在其內部的計算量會增加比較多。具體算法如下:此時三角形一個個的判斷可能會失效,我們應當兩個同時判斷。即判斷該點是否同時在多邊形的連續兩個三角形之中,相當於是求兩個三角形的交集,直到完成多邊形封閉。例如,判斷P點是否在多邊形ABCD之中,依次判斷P是否在ABC-BCD、BCD-CDA、CDA-DAB、DAB-ABC各個成對三角形中,P在ABC-BCD中表示P在ABC-BCD的交集之中。這樣就可以判斷一個點是否在一個凹多邊形內部了。
發佈了24 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章