以下代码示例展示了如何寻找点云数据集中距离最小的点,并将该点插入到目标点云中。

double indexa = 100000000;
double indexb = 100000000;
double indexa1 = 100000000;
double indexb1 = 100000000;

for (int j = 0; j < dis_centroid_LidarToPhoto.size(); j++)
{
	for (int k = 0; k < dis_centroid_LidarToPhoto[j].size(); k++)
	{
		if (dis_centroid_LidarToPhoto[j][k] < indexa)
		{
			indexa = dis_centroid_LidarToPhoto[j][k];
			indexb = k;
		}
		/*if (angle_LidarToPhoto[j][k] < indexa1)
		{
			indexa1 = angle_LidarToPhoto[j][k];
			indexb1 = k;
		}*/
	}
	/*if (indexb == indexb1)
	{
		planes[j].insert(planes[j].end(), planes1[indexb].begin(), planes1[indexb].end());
	}*/		
	//planes[j].insert(planes[j].end(), planes1[indexb].begin(), planes1[indexb].end());
	if (angle_LidarToPhoto[j][indexb] < 3.1416 / 20 || angle_LidarToPhoto[j][indexb]>3)
	{
		planes[j].insert(planes[j].end(), planes1[indexb].begin(), planes1[indexb].end());
	}
	indexa = 100000000;
	indexb = 100000000;
	
}

代码说明:

  1. 初始化变量: indexaindexb 分别用于记录最小距离和对应索引,初始值设为一个很大的数。
  2. 双重循环: 代码使用嵌套循环遍历 dis_centroid_LidarToPhoto 数组,寻找最小距离的点。
  3. 比较距离: 循环中比较当前点与 indexa 的大小,如果当前点距离更小,则更新 indexaindexb
  4. 插入点云: 找到最小距离的点后,根据条件判断是否将该点插入到目标点云 planes 中。
  5. 重置变量: 每次循环结束后,将 indexaindexb 重置为初始值,为下一轮循环做准备。

使用 CGAL 实现点云插入:

这段代码没有涉及到 CGAL,因此无法提供使用 CGAL 的代码。如果您需要使用 CGAL 来实现点云的插入,请提供更多上下文信息和代码。

使插入的点云是红色的:

为了使插入的点云是红色的,您需要在渲染点云时设置相应的颜色属性。具体实现方式取决于您使用的点云库和渲染引擎。例如,在 PCL 库中,您可以使用 pcl::visualization::PointCloudColorHandlerCustom 类来设置点云的颜色。

C++ 代码优化:寻找最小距离点云并插入

原文地址: https://www.cveoy.top/t/topic/jXkb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录