geometry - 根据点云的圆将区域划分为子区域
问题描述
我有一个边长为 lx(水平)和 lz(垂直)的矩形 R,面积为 A = lx*lz。在这个矩形中,有 N 个随机分布的点。我想将 A 分成 N 个子区域,其中每个子区域是根据点云每个点周围的半径增大的圆确定的。一旦两个生长圈相交,生成的激进线应该划定两个点的子区域之间的局部边界。矩形 R 的边界应另外界定子区域。
预期结果如下图所示: 6 点示例中的预期子区域
这部 Youtube 短片艺术性地说明了大致的过程: https ://www.youtube.com/watch?v=BXNvcQTNWXM&ab_channel=stopmotionkim
为了找到子区域,我正在寻找一种近似或精确的算法,它(第一优先级)是有效的并且可以很好地与 N 扩展(优于 O[N^2],理想情况下是 O[N],尽管我怀疑这是可能)和(第二优先级),如果近似,则尽可能准确。
有谁知道如何做到这一点或暗示如何开始?非常感谢你的帮助!
解决方案
您正在寻找的是裁剪 Voronoi 图。它可以在 O(nlogn) 中计算。我建议您查看这些论文/课程,以更好地了解基础理论和计算方法:
有关 Python 实现,请参阅这篇文章
推荐阅读
- javascript - 如何在过滤器 JavaScript 中获得正确的索引
- websocket - ESP32-cam - websocket - wifimulti - 重新连接
- python - 如何修复错误 FileNotFoundError: [Errno 2] No such file or directory?
- c++ - 我们可以在 C/C++ 中遍历一个 LINKED LIST 时插入或从另一个链表中插入吗
- python - 使用发明 python 游戏的书
- reactjs - 如果状态码为 400 react js,如何在 fetch 中获取响应数据
- selenium - 是否可以一次找到 html 标签的所有父标签以进行网络抓取?
- swiftui - 自 iOS 14 起在 swiftui 中使用 navigationbaritems 时如何修复列表奇怪的填充?
- docusaurus - 使用 Docusaurus v2 创建一个新的文档页面
- python - 如何在Python中将字节转换为相同长度的字符串(每个字节1个字符)?