文章版權由做者李曉暉和博客園共有,若轉載請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/算法
任意多邊形內部必定有一個最大圓,可是若是咱們將條件設定爲「任意多邊形」、「最大圓」,該算法將十分複雜。好比獲取多邊形內任意點進行膨脹、經過碰撞檢測來進行斷定,算法複雜且效率低下。微信
回到實際項目自己,需求爲判斷點是否落在規劃的電子圍欄內。觀察電子圍欄,多數是凸多邊形。而咱們之因此要求內部圓,是由於單純經過外包矩形能夠過濾掉的點十分有限,而且即便點落在外包矩形內後,依然不能確定點是否落在多邊形內,仍是要作一次點和多邊形關係的判斷。考慮到實際狀況中點落在多邊形內是大機率事件,這將致使點面關係的判斷十分頻繁。而若是咱們內部構造出一個圓,這個圓足夠大,則能夠先進行點是否在圓內的簡單判斷。若是這個圓能夠佔多邊形50%的空間,則能夠避免百分之五十的點和多邊形的判斷。那麼這個圓須要是最大麼,考慮到算法代價,似最大便足夠。spa
總結這個需求,我將其簡化爲,求凸多邊形內部的似最大圓。設計
求出多邊形的重心爲圓心,獲取重心到各邊垂直距離中的最短距離爲半徑。3d
重心的獲取有兩個方法:blog
a.各頂點的平均值。事件
b.考慮面積加權,將多邊形切分爲各三角形,經過平面薄板重心公式把積分變成累加和:get
以重心爲原點,與各個邊相連,將多邊形劃分爲多個三角形,求出該頂點到三角形對邊的垂直距離。博客
a.利用海倫公式算出三角形的面積。效率
b.利用三角形面積和邊的長度,算出原點到對邊的垂直距離。
c.遍歷此運算,得出「高」中的最短高(距離)。
因爲該算法主要針對凸多邊形,因此須要對多邊形進行凹凸判斷。判斷思路爲角度合算法。
-----歡迎轉載,但保留版權,請於明顯處標明出處:http://www.cnblogs.com/naaoveGIS/
若是您以爲本文確實幫助了您,能夠微信掃一掃,進行小額的打賞和鼓勵,謝謝 ^_^