【问题标题】:Compute dual graph from polygons从多边形计算对偶图
【发布时间】:2016-10-05 20:15:03
【问题描述】:

任务

从一组不重叠(但接触)的多边形计算对偶图。

示例

多边形 A、B 和 C,它们的部分共享坐标 1-22(黄色)和对偶图(蓝色)。

数据

我有一组 S 个多边形。每个多边形 Pi 都表示为坐标的有序列表。多边形Pi的边a—b用Pi,(a,b)

想法

多边形代表面,因此代表对偶图的节点。要识别多边形 Pi 的相邻面,只需将 Pi 的每条边与其他每条边进行比较多边形Pj。如果边被另一个多边形共享,则 Pi 和 Pj 是相邻的。

这将产生大量的多重边缘,这些边缘可以在以后移除。

问题

算法效率不是很高,因为它在 O(E2) 中运行,其中 E 表示集合的边数 S 个多边形。

改进思路

第一步创建一个边缘索引。这会将运行时间减少到 O(2×E) = O(E)

删除每个度数为 2 的节点。(我认为这不会影响对偶图?)

问题

  • 我走对了吗?
  • 是否有任何经过批准的算法可用于此任务?

【问题讨论】:

  • 我希望算法的目的是找到相邻的多边形(那是所需的输出)?
  • 是的,这正是我需要的。
  • 图形是平面的吗?
  • 是的,多边形不重叠,它们只是接触。因此,该图是平面的。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2015-09-06
    • 2013-11-13
    • 2013-04-19
    相关资源
    最近更新 更多