algorithm - 找到射线附近所有点的最快方法是什么?

标签 algorithm computational-geometry

我有一堆 3D 点(x、y、z)和一条射线(原点、方向)。我正在寻找最快的方法来找到距射线小于一定距离的所有点。

到目前为止最好的是迭代每个点的 O(n) 算法,但我希望有更好的东西可能使用 Kd 树。尽管不确定如何使用它来查询射线附近的点而不是另一个点。

编辑:如果我将点放入八叉树中,然后仅测试光线相交的八叉树体素中的点,那么速度应该要快得多。但还有更快的方法吗?

最佳答案

首先将您的点“膨胀”为半径等于相关距离的球体。这将您的查询简化为简单的对象射线相交查询——将这些球体放入空间分割结构(八叉树、k-d 树等)中,然后简单地查询它的射线相交。射线相交的球体对应于距射线的距离小于球体半径(即给定距离)的点。

对于空间分割结构,我绝对建议考虑使用 Bounding Volume Hierarchy (BVH) 就像 AABB 树或以球体为叶子的球体树;它们比大多数固定的空间分割结构更加紧凑,并且非常容易实现。然而,任何空间分割方法都应该足够了。

关于algorithm - 找到射线附近所有点的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59168207/

相关文章:

c++ - 从挤压多边形构建多面体

Javascript 合并行与条件

algorithm - 根据年龄对人们进行优先排序

java - 用Java实现RSA算法

c++ - Boost Geometry 和精确的点类型

algorithm - 二维圆最近邻的最佳动态数据结构

java - 功率图算法

javascript - 根据用户的输入匹配用户并从中选择一个

C# : Fastest way to remove duplicates point3D linked to indices

java - 重新绘制来自用于计算三角形和外接圆的 swingworker 的小程序