1. 程式人生 > >一種求凸多邊形內部似最大圓的算法

一種求凸多邊形內部似最大圓的算法

-s style 算法設計 alt 單純 思路 空間 nbsp 累加

文章版權由作者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

1. 背景

任意多邊形內部一定有一個最大圓,但是如果我們將條件設定為“任意多邊形”、“最大圓”,該算法將十分復雜。比如獲取多邊形內任意點進行膨脹、通過碰撞檢測來進行判定,算法復雜且效率低下。

回到實際項目本身,需求為判斷點是否落在規劃的電子圍欄內。觀察電子圍欄,多數是凸多邊形。而我們之所以要求內部圓,是因為單純通過外包矩形可以過濾掉的點十分有限,並且即使點落在外包矩形內後,依然不能肯定點是否落在多邊形內,還是要做一次點和多邊形關系的判斷。考慮到實際情況中點落在多邊形內是大概率事件,這將導致點面關系的判斷十分頻繁。而如果我們內部構造出一個圓,這個圓足夠大,則可以先進行點是否在圓內的簡單判斷。如果這個圓可以占多邊形50%的空間,則可以避免百分之五十的點和多邊形的判斷。那麽這個圓需要是最大麽,考慮到算法代價,似最大便足夠。

總結這個需求,我將其簡化為,求凸多邊形內部的似最大圓。

2.算法設計

求出多邊形的重心為圓心,獲取重心到各邊垂直距離中的最短距離為半徑。

2.1獲取重心

重心的獲取有兩個方法:

a.各頂點的平均值。

b.考慮面積加權,將多邊形切分為各三角形,通過平面薄板重心公式把積分變成累加和:

技術分享

2.2獲取半徑

以重心為原點,與各個邊相連,將多邊形劃分為多個三角形,求出該頂點到三角形對邊的垂直距離。

技術分享

a.利用海倫公式算出三角形的面積。

b.利用三角形面積和邊的長度,算出原點到對邊的垂直距離。

c.遍歷此運算,得出“高”中的最短高(距離)。

3.補充多邊形凹凸關系判斷

由於該算法主要針對凸多邊形,所以需要對多邊形進行凹凸判斷。判斷思路為角度合算法。

技術分享

4.實現

技術分享

                         -----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/

     如果您覺得本文確實幫助了您,可以微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                   技術分享

一種求凸多邊形內部似最大圓的算法