【发布时间】:2014-05-13 10:19:35
【问题描述】:
我正在寻找一种算法,给定两个部分或全部重叠的矩形,找到顶点的有序列表,该列表定义了表示两个矩形之和的多边形。
更具体一点:
- 我有两个有序的点列表作为输入,代表两个矩形
- 我知道如何找到生成的多边形的顶点,该多边形由每个矩形在另一个矩形之外的顶点加上一个矩形的每个边缘与另一个矩形的每个边缘之间的交点形成
- 我目前不知道如何将如上所述获得的点排序到数组中,以便数组的元素 j 和 j+1 代表同一条边的两个顶点(这就是我的意思顶点的有序列表)。
提前感谢您的帮助
更新: 我找到了一种对顶点进行排序以获得多边形的方法,如下:
- 计算顶点质心(坐标平均值)
- 按从质心到顶点的线段与通过质心的任何参考线(例如 X 轴)之间形成的角度对顶点进行排序。
但是,尽管我始终获得一个包围两个矩形的多边形,没有孔或相交的边缘,但它并不总是我想要的多边形(有时它包括不属于输入矩形之一的额外区域)。
所以我要回到其中一个 cmets 中指出的解决方案,这里也有描述:
【问题讨论】:
-
这个类似于http://stackoverflow.com/questions/8011267/area-of-rectangle-rectangle-intersection/8011422#8011422,处理的基本一样,只是转弯规则不同。
-
是的,我没有读到那个答案,但我已经尝试过与这种方法非常相似的方法,但在极端情况下一直磕磕绊绊,特别是当矩形的某个顶点位于另一个矩形的边缘时,这两个矩形的构造方式经常发生。因此,我将方法转换为问题中概述的方法,认为它的极端情况会更少。如果这不起作用,也许我会回到第一个解决方案并尝试解决极端情况。
-
是的,极端案例增加了复杂性,这一点毫无疑问。
标签: algorithm merge geometry rectangles