【问题标题】:Convert voronoi edges into polygons将 voronoi 边转换为多边形
【发布时间】:2021-08-19 15:46:16
【问题描述】:

目前我正在尝试让 Voronoi 多边形划分一定大小的平面(例如 1000x1000 和 500 个随机点)。

为此,我使用了 Delaunay 三角剖分 - Bowyer Watson 算法。多亏了这一点,我能够生成点并正确连接 Voronoi 图中包含的边。不幸的是,就我而言,我需要一个多边形列表(其中每个多边形都包含一个边列表)。

我试图创建一个简单的算法,该算法将一个接一个地获取边缘并寻找下一个以创建最终多边形等等 - 不幸的是没有成功。我也在考虑取三角形的顶点并创建一个圆,直到形成多边形(从现有的边缘),但我不确定这是否是一个好的解决方案?

有什么办法吗?或者我应该使用不同的算法来获取 Voronoi 多边形列表? 我在网上没有找到适合这个问题的解决方案,如果有的话,不胜感激

【问题讨论】:

  • 那么,您已经有了边(线段),您只需要将多边形导出为边路径?
  • @RBarryYoung 是的,我已经有了边列表,我需要将其转换为多边形列表
  • 我建议使用here 描述的算法构建一个双向连接边列表 (DCEL)。

标签: algorithm graph-theory voronoi


【解决方案1】:
  • 选择 E 任意边
  • 将 E 中的顶点添加到多边形
  • 选择点 P 稍微靠近 E 的一侧
  • 如果点在平面内
    • 选择选定边的一个顶点
    • 从与点 P 边上角度最小的顶点选择 E2 新边
    • 将 E2 中的第二个顶点添加到多边形
    • 重复最后两步,直到到达 E 中的其他顶点
    • 将多边形添加到解决方案中(如果尚未包含)
  • 与边缘另一侧的点重复
  • 重复直到处理完所有边缘

【讨论】:

  • 我对“从顶点到 P 选择 E2 最接近的新边”有问题,如果最近的边是“错误的”,我的意思是如果我们从点 P 有两条边,一条是正确的(导致到一个正确的多边形),另一个将我们引向错误的方向。在某些情况下,我可以遍历整个平面并创建一个巨大的多边形,甚至卡住。如何判断哪条边是正确的?
  • 如果有多条边,则选择最接近P的一条。
  • 更好的测试是 E 和 E2 之间的最小角度
  • 它可能会起作用,我会试一试并返回结果:)
猜你喜欢
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多