algorithm - 从多边形计算对偶图

标签 algorithm graph geometry computational-geometry planar-graph

任务

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

示例

多边形ABC,它们部分共享的坐标1—22(黄色)和对偶图(蓝色)。

Polygons and their dual graph

数据

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

想法

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

这将创建大量的多边,稍后可以将其删除。

问题

该算法效率不高,因为它的运行时间为 O(E2),其中 E 表示集合 < 的边数em>S 多边形。

改进思路

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

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

问题

  • 我走的路正确吗?
  • 是否有任何经批准的算法可用于此任务?

最佳答案

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

关于algorithm - 从多边形计算对偶图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39882917/

相关文章:

javascript - 在 D3 js 图上绘制额外的线性数据

c++ - 到立方体上点的距离并计算给定法线和位置的平面

C# 旋转多边形(三角形)

java - 如何在网络爬虫中获取内容

c++ - 多台机器执行失败

algorithm - Matlab图论渐近复杂度

algorithm - 使用具有 N 个顶点的多边形来估计给定形状的算法是什么?

c - 难以理解归并排序的特定 C 实现

连接点集的算法?

php - 调整图像大小并保持纵横比以适应 iPhone 的算法