Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在结构中搜索具有相似属性的数据_C++_Search_Loops_Struct - Fatal编程技术网

C++ 在结构中搜索具有相似属性的数据

C++ 在结构中搜索具有相似属性的数据,c++,search,loops,struct,C++,Search,Loops,Struct,我已经创建了一个结构,并用变量填充了一个数组,这些变量可以被认为是x-y-z平面上的坐标,或者是从一个点到另一个点的三维距离 for (a=1; a<=lst; a++) { for (b=1; b<=hst; b++) { for (c=1; c<=wst; c++) { point[d].x=a*k+px; point[d].y=b*k+py; point[d].z=c*k+pz; d++; } }

我已经创建了一个结构,并用变量填充了一个数组,这些变量可以被认为是x-y-z平面上的坐标,或者是从一个点到另一个点的三维距离

for (a=1; a<=lst; a++) {
for (b=1; b<=hst; b++) {    
        for (c=1; c<=wst; c++) {

    point[d].x=a*k+px;
    point[d].y=b*k+py;
    point[d].z=c*k+pz;
    d++;

    }
    }
}

对于(a=1;a我可以看到两种很好的方法

  • 如果要查找的点位于某个有序的轴向对齐栅格中,则可以立即访问某个半径内的点。方法是获取x、y、z点,并将其与半径一起转换为栅格位置,以定义x、y和z的最小和最大栅格位置。然后可以访问这些变量B马上就来

  • 如果点的形状不是轴向对齐的,并且没有排列成网格,那么你需要把它放在一个可以快速搜索的形状上。我建议使用kd树。它需要一个从
    O(n)
    O(log(n)的搜索操作
    。方法是沿平均值将点集一分为二,然后重复,直到有一个快速搜索树:

  • PCL(点云库)也将为您的用户提供此功能

    以下是一个链接:

    以及关于使用pcl的kd树的教程:

    事实上,它甚至向您显示了从输入的点到kd树存储的点云的半径搜索代码


    祝你好运!

    如果你的观点是[]是的,缩小搜索范围正是我所需要的。无论我如何根据点的位置避免使用数字逻辑,我都会研究它coordinates@Adam那么我下面的答案是完美的。PCL会的为你做一个kd树,并为你做搜索。或者你可以自己写一个,这不是很难。只需搜索kd树。