一种求凸多边形内部似最大圆的算法

文章版权由做者李晓晖和博客园共有,若转载请于明显处标明出处: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/

                                                                            若是您以为本文确实帮助了您,能够微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                         

相关文章
相关标签/搜索