用于存储3d点的高效数据结构

时间:2016-03-05 20:25:36

标签: c++ data-structures 3d binary-search-tree cgal

我正在寻找用于存储3d点(x,y,z)的高效数据结构。存储在数据结构中的点处的效果应该生成更高内存效率的结构并且更快地搜索特定的坐标集。 3d点正在映射到特定ID,因此它应该能够跟踪我寻找任何可用实现的每组坐标。

x,y,z 给出每个节点的笛卡尔坐标。

id x y z

1 14.566132 34.873772 7.857000

2 16.022520 33.760513 7.047000

3 17.542000 32.604973 6.885001

4 19.163984 32.022469 5.913000

5 20.448090 30.822802 4.860000

6 21.897903 28.881084 3.402000

7 18.461960 30.289471 8.586000

8 19.420759 28.730757 9.558000

坐标数量可能很大,约为1 000 000。

提前致谢!

3 个答案:

答案 0 :(得分:2)

  

更节省内存的结构

比内存更有效率?一个列表?你需要压缩。

  

更快地搜索特定的坐标集

如果你想从一组坐标中找到k个最近的点,ball tree是个不错的选择。

如果要搜索卷,四叉树(或octree)可以更好地工作。

答案 1 :(得分:2)

我听说你正在查找的坐标将与结构中的坐标完全匹配。根据您的空间分布,您可以创建一个哈希函数,它接受coord并尝试生成相当独特的东西,然后只使用标准哈希映射。大多数现代语言提供某种哈希映射实现,因此您需要做的就是为您的协调提供适当的哈希值。

如果你需要在测试坐标附近查找坐标,然后是一个空心树或八叉树或其他东西,但它听起来并不像你需要的那样。

答案 2 :(得分:0)

您可以使用struct

struct coordinate
{
   double x;
   double y;
   double z;
} points[1000000];