欧几里德三维数据查询的良好数据结构?

时间:2010-08-05 21:49:50

标签: data-structures 3d

存储点云数据的好方法是什么,这对于将执行这两个查询之一的应用程序来说是最佳的?

  1. 最近(即最低欧氏距离)数据指向(x,y,z)
  2. 获取球体内的所有点,半径为R围绕点(x,y,z)
  3. 结构只会填充一次,但会多次读取。由于我可能正在处理>的数据集,因此内存占用率低会很好。 700万点,但速度应该是首要关注的问题。一个图书馆会很好,但我不介意自己实施它,如果它是在该领域有限的专业知识可行的事情。

    提前致谢!

2 个答案:

答案 0 :(得分:1)

Kd-Tree你得到O(log( n ))最近邻居,通常范围查询会很快。

那里引用了一堆库。我没有使用它们中的任何一个。

您也可以查看CGAL。我已经将CGAL用于其他事情,它速度非常快,非常全面,但文档会让你喝酒。

答案 1 :(得分:1)

数据结构决策的很大一部分将取决于数据的空间组织。例如,高度集群的数据往往在kd树中具有与均匀分布的数据不同的性能特征。

KD-Trees非常适合这两种查询。

在许多情况下,

Octree也是一个不错的选择,并且可能更容易实现。

有很多库使用各种算法来完成这项工作。搜索k-nearest neighbor searching将显示许多有用的库。例如,我过去对ANN运气很好。