【发布时间】:2018-06-13 18:54:28
【问题描述】:
在 3D 系统中,我有一堆不同半径的球体散布在各处。
确定一个点在哪个球体内的最快方法是什么,以及它是否在多个球体内 - 也是基于球体中心的最近球体。
bruteforce 方法是简单地遍历所有球体,计算到该点的距离,检查该距离是否小于球体的半径,然后找到距离最短的球体。
但是,我有几百万个点要检查(大约有 10 万个球体),所以这会非常慢。
我的另一个想法是构建某种 BVH Acceleration 结构,并为每个单元保存最接近的球体。但是,也存在一个单元格可能被两个或多个球体重叠的情况等。因此需要考虑很多边缘情况。
毕竟,BVH 树的计算不应该比蛮力慢。
有什么想法吗?
【问题讨论】:
-
检查距离平方是否小于半径平方。不需要所有那些缓慢的平方根。
-
对空间进行分区。
-
查找“八叉树”以了解空间分区的常用方法。
标签: algorithm performance 3d octree