从多边形计算双图

时间:2016-10-05 20:15:03

标签: algorithm graph geometry computational-geometry planar-graph

任务

从一组非重叠(但触摸)的多边形计算双重图形。

实施例

多边形 A B C ,它们的部分共享坐标1-22(黄色)和双图(蓝色)。< / p>

Polygons and their dual graph

数据

我有一组 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的每个节点。(我认为这不会影响双图?)

问题

  • 我是在正确的轨道上吗?
  • 此任务是否有任何已批准的算法?

1 个答案:

答案 0 :(得分:2)

您可以在 O(n)时间内创建从边(作为关键点)到多边形的地图。迭代所有多边形的所有边(顺序并不重要)并将值插入到地图中。插入新值时,如果该键已存在,则找到一个相邻的多边形 - 将此多边形对放在一个集合中。完成后,该集将保留所有相邻的多边形对。