我正在努力实现一种做一件简单事情的算法:
考虑两个多边形(可以绘制任意两个多边形并为其顶点编号),它们在节点列表中的连通性是:
A = [1, 2, 3, 4, 5] B = [1, 6, 7, 8, 3, 2]
这两个多边形共享 2 个面 (1, 2) 和 (2, 3)。
我想要做的是将它们合并到联合多边形中并恢复连接:
C = [1, 6, 7, 8, 3, 4, 5]
规则是:
- 所有多边形的连接性都是逆时针排列的(所以如果 A 有面 [1, 2],B 有面 [2, 1] 等等......)
- C 中的第一个节点索引是什么并不重要,但它也必须逆时针排序。
- 多边形可以共享任意数量的面(生成的元素也可以有一个孔,但这是一种边缘情况)
我的想法是:
- 获取共享节点列表(本例中为 [1, 2, 3])
- 找到不在列表中的任何多边形中的第一个节点并标记它,
- 从该元素添加节点逆时针移动
- 找到列表中的节点后,转到另一个元素并从那里添加节点,
- 来回切换,直到再次找到第一个节点
问题:如果联合形成一个洞,它就不起作用......
我不知道是否有标准的方法来做到这一点。如果我把事情复杂化了。我想要一些反馈,以了解这是否是一种合理的方法。更一般地说,如果有的话,我在哪里可以读到它们,合并一组多边形并获得联合连通性的算法。
感谢您阅读低谷和任何提示。