从一组非重叠(但触摸)的多边形计算双重图形。
多边形 A , B 和 C ,它们的部分共享坐标1-22(黄色)和双图(蓝色)。< / p>
我有一组 S 的多边形。每个多边形 P i 表示为有序的坐标列表。多边形 P i 的边 a - b 由 p <子> I,(A,b)子> 的
多边形表示面,因此表示双图的节点。要识别多边形的相邻面 P i ,只需将 P i 的每个边缘与其他每个边缘进行比较polygon P j 。如果边缘由另一个多边形共享,则 P i 和 P j 相邻。
这将创建大量多个边缘,可以在以后删除。
算法效率不高,因为它在 O(E 2 )中运行,其中 E 表示集合的边数< em> S 多边形。
在第一步中创建边缘索引。这会将运行时间减少到 O(2×E) = O(E)
删除度数为2的每个节点。(我认为这不会影响双图?)
答案 0 :(得分:2)
您可以在 O(n)时间内创建从边(作为关键点)到多边形的地图。迭代所有多边形的所有边(顺序并不重要)并将值插入到地图中。插入新值时,如果该键已存在,则找到一个相邻的多边形 - 将此多边形对放在一个集合中。完成后,该集将保留所有相邻的多边形对。