我几天前发布了这个问题:How to intersect multiple polygons?。现在我按照推荐实施了扫描线算法(具体来自Martinez,Rueda和Feito)。
结果是一组不重叠的多边形。但是这些多边形可以包含彼此(孔)或触摸边界(孔或岛多边形)。
我的意思的图片:
我认为这应涵盖所有特殊情况;交叉点由扫描线算法处理。
现在我需要多边形的区域(标记为灰色)。我的第一个想法是通过多边形添加多边形并检查它们是否相互包含,并使用一些智能选择机制来仅选择所需的多边形。但是这会产生一些O(n ^ 2)算法:对于要处理的每个多边形,必须将每个边缘与已经处理的每个边缘进行比较。
不太好。你能给我一个如何计算总面积的提示吗?
答案 0 :(得分:3)
标准顶点顺序对于多边形是逆时针方向,对于孔是顺时针方向。如果使用此约定存储数据,只需使用标准polygon area calculation method计算区域。孔的区域将是负的。
如果你有其他顺序,那么你有问题。现在更好地解决它。