先来个图,任意多边形a-f
凹凸点.png
看了这个图想必已经明白了90%了吧,
我还是做一下简单介绍如何获取一个任意多变形的凹凸点集合
方法还是蛮简单的。
首先便利一下多边形各个顶点坐标,取出一个最远点,通常是上下左右四个方向,可以和坐标轴平行,方便计算。图上为e点,然后取比e点还下边的一个y只备用。
然后依次遍历多边形坐标,取间隔点的连线中心点坐标如图上ac和bd的中心点,然后做一条平行x轴的射线向下到之前的y直距离,如图A、B射线,然后计算A、B和多边形各个边的交点个数,其中交点数为偶数的表示间隔中心点在多边形外,即间隔点为凹点,反之为凸点。
凡事总有特殊情况的分,这里也不例外,特殊情况就是这个射线A、B和多边形的边重合或者过多边形端点时候需要对交点数量的统计进行处理,就当思考题了。
这样就能计算出任意多边形的凹点集合和凸点集合了。
ps:对于凹边形转凸变形可在这个基础上多次对凹点进行移除。
网友评论