Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++_Vector_Elements_Point Clouds - Fatal编程技术网

C++ 聚类和调整大小

C++ 聚类和调整大小,c++,vector,elements,point-clouds,C++,Vector,Elements,Point Clouds,我有一台大型的点云矢量电脑可以使用。我需要识别集群,将它们移动到新的向量中,并调整原始向量的大小。在运行代码时,我没有得到任何输出 for(int j=0; j< pc.points.size(); j++) { int k= rand() % pc.points.size(); ref_point = pc.points[k]; for (int i = 0; i < pc.points.size(); i++)

我有一台大型的点云矢量电脑可以使用。我需要识别集群,将它们移动到新的向量中,并调整原始向量的大小。在运行代码时,我没有得到任何输出

for(int j=0; j< pc.points.size(); j++)
{
      int k= rand() % pc.points.size();

        ref_point = pc.points[k];

        for (int i = 0; i < pc.points.size(); i++)              {
            {if (pc.points[i].x - ref_point.x < 10 && pc.points[i].y - ref_point.y < 10)

               {
                    Cluster.push_back(pc.points[i]);
                    pc.points.erase(pc.points.begin() + i);
                    pc.points.shrink_to_fit();
                }

            }
                    Cluster.push_back(ref_point);
                    pc.points.erase(pc.points.begin()+k);
                    pc.points.shrink_to_fit();
}

在第五次迭代中,尝试从原始点云向量pc中删除参考点时出错。

如何定义簇?在循环中调用
shrink\u to\u fit()
效率很低。你最好以后再调用它。我正在处理的数据是,某个阈值距离内的任何点都是集群的成员。我之所以提前调用
shrink\u to\u fit()
,是因为下次循环查找新的随机点时,检查它是否是非集群的一部分,原始向量需要更新。我不知道我在这里应用的逻辑是否错误。你的意思是
ref\u point
?这并没有改变整个循环的思想,所以我不明白为什么需要在它里面调用
shrink\u to\u fit()
。请重新格式化代码,使其可读并插入整个函数好吗?我希望附加的代码能有所帮助。每次遍历一个簇,我必须围绕这些簇创建边界框,并将它们移动到边界框向量中。你能告诉我是应该创建一个外循环来实现这个目的,还是应该把它放在j循环中?
do
        {
            int rand1 = rand() % pc.points.size();

            ref_point = pc.points[rand1];

            for (int i = 0; i < pc.points.size(); i++)
            {
                if (pc.points[i].x - ref_point.x < 5.5 && pc.points[i].y - ref_point.y < 5.5)

                {
                    Cluster.push_back(pc.points[i]);
                    pc.points.erase(pc.points.begin() + i);
                    pc.points.shrink_to_fit();
                }

            }
            Cluster.push_back(ref_point);
            pc.points.erase(pc.points.begin() + rand1);
            pc.points.shrink_to_fit();
} while(true);