【发布时间】:2018-10-21 02:40:39
【问题描述】:
是否有适用于(3D)球体表面的空间查找网格或分箱系统?我有这样的要求
分箱必须是统一的(因此,如果存在一个点
r距球体上的任何点的距离,给定常数r,则您可以在常数时间内查找。)†支持>bin 的数量最多必须与球体的表面积成线性关系。 (或者,增加网格的表面分辨率不应使其增长速度超过其映射的区域。)
我已经考虑过了
球坐标:不好,因为创建的单元非常不均匀,因此无法用于邻近测试。
Cube meshes:比球坐标的失真更小,但仍然很难确定要搜索给定查询的单元格。
3D 体素分箱:用永远不会使用的空箱(以及边界立方体的 6 个角处的空箱)浪费球体的整个内部体积。随着球体表面积的增加,空间需求随着
O(n sqrt(n))的增加而增加。kd-Trees:在 3D 中表现不佳,并且在技术上具有对数复杂性,而不是每次查询都保持不变。
我最好的解决方案是使用 3D 体素分箱方法,但以某种方式排除了球体永远不会相交的体素。但是,我不知道如何确定要排除哪些体素,也不知道如何在给定球体上的查询位置的情况下计算这种结构的索引。
† 值得的是,点有一个最小间距,所以一个好的网格确实可以保证持续查找。
【问题讨论】:
-
也许hexagonal spherical grid 会有所帮助,尽管我不确定如何在三角形子网格中执行子线性查询。
-
@meowgoesthedog 六边形网格是不均匀的,并且有许多与球形立方体网格相同的问题。 (是的,我知道球体表面上可能存在 no 均匀网格,但我不在乎网格是否严格限制在表面,即包围的立方体体素表面很好。点存储为 3D 点,限制为
x^2 + y^2 + z^2 == 1) -
六边形网格,或者它们的双重网格,即三角形测地线网格,听起来像是总体上最好的解决方案,即使单元格并不完全一致。我发现stackoverflow.com/a/3033370/1468366 在查看不同的细分如何相互关联时特别有用。
-
@MvG 如果要查找
r与查询之间的距离,如何确定要搜索的网格单元格? -
@taylorswift:不知道,像广度优先搜索比 r 更近的邻居可能是最简单的。我想你可以想出更多奇特的东西,但是对于常量 r,即使大多数愚蠢的算法也是 O(1)。如果这还不够,您需要一种更好的方式来表达您在性能/简单性方面的需求。但事实上我没有优雅的查找例程,这就是为什么这是评论而不是答案。
标签: geometry computational-geometry spatial nearest-neighbor