多边形的交集与并集

8
我有一些已知定点的多边形,需要计算它们的并集和交集面积。最让人沮丧的是,这个功能在Mapping Toolbox中实现了,但我无法购买它。请问是否有快速算法可以计算这些面积?
感谢您的时间。

该函数为'polybool'。我可以使用'polyarea'(对我可用)来计算面积。 - Kate
我认为你不应该要求用户违反版权。已编辑。 - Dr. belisarius
1
@Kate:你的多边形保证是凸多边形吗? - Jacob
@Verde,虽然我很喜欢你的评论,但我认为你的反对是不合适的。我认为这个算法属于实现而不是MathWorks,而问题是在询问一个算法。独立重新实现是否侵犯版权或专利法,我怀疑取决于您所在的司法管辖区。 - Superbest
4个回答

3
你只需要找到交集的区域; 并集的区域可以轻松从其中获得。FEX的PolygonIntersection包可能会有所帮助。

1
你能展示一些伪代码,这样我们也可以在其他编程语言中实现它吗? - Pacerier

1
我会这样做:
  1. S成为两个多边形的顶点集合。
  2. 对于多边形1中的每条边e1
    1. 对于多边形2中的每条边e2
      1. 如果e1e2相交
        1. 将交点添加到S
  3. 删除S中在多边形1或2内部的所有顶点。

得到的顶点集合应该组成多边形的并集。

对于交集,只需在第三步中删除S中在多边形1和2之外的所有顶点。

(您可以在其他地方查找点交集和“内部多边形”检查;-)


谢谢您的答复,但我该如何找到交点?是否必须使用直线方程? - Kate
在我的回答中添加了两个链接。 - aioobe
谢谢。我懂数学,但不幸的是我不是一个很好的程序员,所以有代码在那里非常好。 - Kate
这个FEX包计算多边形之间的交点:http://www.mathworks.com/matlabcentral/fileexchange/8908-curve-intersect-2。 - Jacob

-1
我找到了我的多边形的交点,并添加了在交叉/并集任务中位于多边形内部/外部的顶点(使用“inpolygon”检查多边形1的任何顶点是否位于多边形2内部,反之亦然)。然后,所有点都被转换为以矩阵平均坐标为中心的极坐标,并按角度排序,这样它们现在形成了连续闭合的轮廓。知道这一点后,使用“polyarea”函数很容易找到交叉/并集区域的面积。

-1

这个想法是将每条交叉边分成四部分,并用它们形成一个新的多边形。当你想要联合时,取两条外边缘。如果你想要交集,就取两条内边缘。


一个好的回答会给出一个例子。 - Brad Koch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接