【问题标题】:Divide area into subareas based on circles of point cloud根据点云的圆将区域划分为子区域
【发布时间】:2021-01-21 01:52:05
【问题描述】:

我有一个边长为 lx(水平)和 lz(垂直)的矩形 R,面积为 A = lx*lz。在这个矩形中,有 N 个随机分布的点。我想将 A 分成 N 个子区域,其中每个子区域是根据点云的每个点周围的半径不断增长的圆来确定的。一旦两个生长圈相交,生成的激进线应该划定两个点的子区域之间的局部边界。矩形 R 的边框应另外划定子区域。

预期结果如下图所示: Expected sub-areas in an example with 6 points

在这部 Youtube 短片中艺术性地展示了大致的过程: https://www.youtube.com/watch?v=BXNvcQTNWXM&ab_channel=stopmotionkim

为了找到子区域,我正在寻找一种近似或精确的算法,它(第一优先级)是有效的,并且可以很好地与 N 扩展(优于 O[N^2],理想情况下是 O[N],尽管我怀疑这是可能的),并且(第二优先级),如果近似,则尽可能准确。

有没有人知道如何做到这一点或有提示如何开始?非常感谢您的帮助!

【问题讨论】:

  • 你写过代码还是在寻找理论上的答案?也许CS stack exchange 会更合适。
  • 所有圆圈会同时增长,还是延迟增长(如视频所示)?

标签: geometry computational-geometry area


【解决方案1】:

您正在寻找的是裁剪 Voronoi 图。它可以在 O(nlogn) 中计算。我建议您查看这些论文/课程,以更好地了解基础理论和计算方法:

Efficient Computation of 3D Clipped Voronoi Diagram
Computational Geometry

有关 Python 实现,请参阅this post

【讨论】:

  • 3D 图是多余的,这是一个平面问题。 (从 2D 到 3D 的转变并非易事。)
猜你喜欢
  • 2018-05-08
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2018-05-07
  • 2015-10-15
相关资源
最近更新 更多