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

标签 c++ search loops struct

我创建了一个结构体并用变量填充了一个数组,这些变量可以被认为是 x y z 平面中的坐标,或者是 3 维空间中与一个点的距离。

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++;

    }
    }
}

变量 px ... 是作为通用 k 的一小部分随机添加的,以生成一个不太“刚性”的立方体。我想在一个循环的迭代中识别出在所选“点”的给定半径内的“点”,该循环的运行次数与点数一样多。但是,我想在不运行循环来检查 point[num] 数组中的每个点以查看它是否接近的情况下执行此操作。如果不根据 point[num] 数组中点的顺序进行检查,我可以做些什么来避免这种情况?

最佳答案

我可以看到两个很好的方法来做到这一点。

  1. 如果您要查找的点位于一些有序的轴向对齐网格中,那么您可以立即访问特定半径内的那些点。这样做的方法是获取 x、y、z 点并将其转换为其网格位置以及半径以定义 x、y 和 z 的最小和最大网格位置。然后您可以立即访问这些变量。

  2. 如果点的形式不是轴向对齐的,也不是按网格顺序排列的,那么您需要将其放在一个可以快速搜索的形式中。我建议使用 kd 树。它需要一个从 O(n)O(log(n) 的搜索操作。它的工作方式是将点集沿均值分成两半,重复直到你有一个快速可搜索的树:

enter image description here

PCL(点云库)也会为您做这件事!

这是一个链接:

http://pointclouds.org/

还有一个关于使用 pcl 的 kd 树的教程:

http://pointclouds.org/documentation/tutorials/kdtree_search.php#kdtree-search

事实上,它甚至向您展示了从输入点到 kd 树存储点云的半径搜索代码。在我提供的教程页面上查看半径搜索中的邻居

祝你好运!

关于c++ - 在结构中搜索具有相似属性的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13594285/

相关文章:

c++ - 使用 g++ 编译器的 OpenGL C++,无法在 Windows 10 上找到 GLFW(无 Visual Studio)

arrays - 二进制搜索以获取数组中的原始索引

c - 不允许用户输入重复的值

C 字符串搜索获取字符串的一部分

rest - ElasticSearch不返回所有结果

Matlab - for loop over cell array "foreach"-like 语法循环仅在第一个元素上

java - 餐厅菜单 : how to efficiently implement a nested loop to collect user input and conduct error checking

c++ - istringstream 不标记引号之间的文本

c++ - 如何在函数内部访问 Mat 类型参数的变量名

c++ - 前向声明 boost.type_erasure 引用类型