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

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

1.    背景

         任意多邊形內部必定有一個最大圓,可是若是咱們將條件設定爲「任意多邊形」、「最大圓」,該算法將十分複雜。好比獲取多邊形內任意點進行膨脹、經過碰撞檢測來進行斷定,算法複雜且效率低下。微信

       回到實際項目自己,需求爲判斷點是否落在規劃的電子圍欄內。觀察電子圍欄,多數是凸多邊形。而咱們之因此要求內部圓,是由於單純經過外包矩形能夠過濾掉的點十分有限,而且即便點落在外包矩形內後,依然不能確定點是否落在多邊形內,仍是要作一次點和多邊形關係的判斷。考慮到實際狀況中點落在多邊形內是大機率事件,這將致使點面關係的判斷十分頻繁。而若是咱們內部構造出一個圓,這個圓足夠大,則能夠先進行點是否在圓內的簡單判斷。若是這個圓能夠佔多邊形50%的空間,則能夠避免百分之五十的點和多邊形的判斷。那麼這個圓須要是最大麼,考慮到算法代價,似最大便足夠。spa

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

2.算法設計

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

2.1獲取重心

       重心的獲取有兩個方法:blog

       a.各頂點的平均值。事件

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

      

2.2獲取半徑

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

      

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

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

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

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

       因爲該算法主要針對凸多邊形,因此須要對多邊形進行凹凸判斷。判斷思路爲角度合算法。

        

4.實現

    

 

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

                                                                            若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^

                                         

相關文章
相關標籤/搜索