我创建没有洞的多边形联合。输入多边形没有孔,也应输出一个。我已经有了工作算法来找到两个多边形。但是如果超过两个则存在问题。因为联合不应该是不相交的多边形,当我尝试逐个计算它们的总和时我在这种情况下遇到问题:
然后,多边形1遇到多边形2,联合是不相交的(因此我的算法不计算总和)。在第二个循环ofc中它与第3和第4个多边形结合,但是输出与第2个多边形不同。 那么有人知道这种快速而准确的算法吗? 可能一个好主意是首先通过交叉点对多边形进行排序,但我不能想到任何快速算法,也不完全不确定它们应该如何排序。
答案 0 :(得分:2)
答案 1 :(得分:2)
您可以迭代地执行此操作并生成一组连接的组件(而不是始终只是一个连接的组件):
最后,组件将包含可以通过输入多边形的并集形成的所有非交叉连接组件。在您发布的示例中,它应该生成一个多边形。
这不是最有效的方法(参见Ricky Bobby发布的链接中的算法),但它具有简单的优点。如果你没有处理数百个多边形,它应该表现得很好。
P.S。正如@japreiss指出的那样,即使输入多边形都没有孔,联合也可以有孔,即使输入都是凸多边形。如果输入可以是凹的,那么即使是2个多边形的联合也可能有一个洞。你的2多边形算法是否已处理?
答案 2 :(得分:0)
我会使用扫描线算法来查找所有边缘交叉点,在交叉点处断开轮廓,然后从(比如)沿边缘的最低x坐标顶点行走开始,始终选择最外面的边缘。通过更多的工作,可以摆脱无孔条件(孔只是不同方向的轮廓)。