use*_*412 2 algorithm geometry graph computational-geometry planar-graph
从一组不重叠(但接触)的多边形计算对偶图。
多边形A、B和C,它们部分共享的坐标 1-22(黄色)和对偶图(蓝色)。
我有一组S多边形。每个多边形P i都表示为坐标的有序列表。多边形P i的边a — b表示为P i,(a,b)
多边形代表对偶图的面和节点。为了识别多边形P i的相邻面,只需将P i的每条边与每个其他多边形P j的每条边进行比较。如果边由另一个多边形共享,则P i和P j相邻。
这将创建大量的多条边,稍后可以将其删除。
该算法效率不高,因为它的运行时间复杂度为O(E 2 ),其中E表示多边形集合S的边数。
第一步创建边缘索引。这会将运行时间减少到O(2×E) = O(E)
删除度数为 2 的每个节点。(我认为这不会影响对偶图?)
您可以在O(n)时间内创建从边(作为键)到多边形的映射。迭代所有多边形的所有边(顺序并不重要)并将值插入到地图中。当插入新值时,如果键已经存在,则您已经找到了一个相邻的多边形 - 将此多边形对放入一个集合中。完成后,该集合将保存所有相邻的多边形对。