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