python - 创建仅限于边界框的 Voronoi 多边形图
问题描述
我想为 50 X 50 域内的一组点获取 Voronoi 多边形图。os 所有的 voronoi 脊都应该被裁剪在边界框的边缘,并且 voronoi 顶点应该位于边缘上或边界框内。然而,这是我使用 scipy.spatial.Voronoi 得到的图像
解决方案
在框边界处切断所有超出它的单元格的最简单方法是执行以下操作:
在盒子的每个边缘上反映您的原始数据集(您的“Voronoi 种子”),在这种情况下,创建 4 个新数据集,每个数据集都是您在其中一个边缘上的原始点集的镜像。
将您的原始数据集和这四个新数据集视为所有一组点,并运行您的 Voronoi 算法以使用这个新的扩大集创建 Voronoi 分区。原始集合中那些单元格将超出边界的点现在将通过它们的镜像相遇,并且它们的单元格将按照您的意愿在边界处被完全切断。
现在只需忽略步骤 1 中生成的额外点,您就可以使用原始点集对原始边界框进行 Voronoi 分区,边缘附近的单元格被框的边界整齐地切断。
反思步骤并不难;如有必要,我可以详细说明。
此方法确实将您的点数乘以 5,这显然会增加完成 Voronoi 计算的时间。根据您的点数,这可能会成为一个问题。可以通过仅反映单元格实际上超出框的那些点来加快速度;这需要更多的逻辑,但可行。
推荐阅读
- sql-server - 如何连接来自 SQL Server 中两个不同连接或实例的两个表?
- php - PHP 邮件程序在 localhost 中工作,但在服务器中显示以下错误
- amazon-web-services - 如何将 Amazon AWS 上的域重定向到外部链接
- angularjs - 每次重用具有不同模型的Angular html视图
- jquery - 滚动到顶部平滑过渡不起作用
- c# - 如果执行 Task.Run 是一种不好的做法,库如何提供异步方法?
- ssas - 基于另一个维度的 DAX 加权平均值
- bash - 防止 bash 完成打印两次回复
- firebase - 使用 FirestoreDocument
- spring-mvc - 创建自定义错误处理程序时如何将错误详细信息传递给模型?