pcl生成一个外半径是100内半径是80的圆环内部点云为随机生成模式
以下是使用PCL库生成外半径为100,内半径为80的圆环,并添加随机点云的示例代码:
#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/passthrough.h>
#include <pcl/filters/voxel_grid.h>
#include <pcl/features/normal_3d.h>
#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/sample_consensus/method_types.h>
#include <pcl/sample_consensus/model_types.h>
#include <pcl/segmentation/sac_segmentation.h>
#include <pcl/surface/concave_hull.h>
#include <pcl/surface/mls.h>
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <ctime>
int main ()
{
srand(static_cast<unsigned int>(time(0)));
// Generate outer ring point cloud
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ring(new pcl::PointCloud<pcl::PointXYZ>);
for (float angle = 0; angle <= 360; angle += 0.1)
{
pcl::PointXYZ point;
point.x = 100*cos(angle*M_PI/180);
point.y = 100*sin(angle*M_PI/180);
point.z = 0;
cloud_ring->points.push_back(point);
}
// Generate inner ring point cloud
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_hole(new pcl::PointCloud<pcl::PointXYZ>);
for (float angle = 0; angle <= 360; angle += 0.1)
{
pcl::PointXYZ point;
point.x = 80*cos(angle*M_PI/180);
point.y = 80*sin(angle*M_PI/180);
point.z = 0;
cloud_hole->points.push_back(point);
}
// Combine point clouds
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
*cloud = *cloud_ring;
*cloud += *cloud_hole;
// Add random noise
for (int i = 0; i < cloud->size(); ++i)
{
float noise_x = static_cast<float>(rand())/RAND_MAX*10-5;
float noise_y = static_cast<float>(rand())/RAND_MAX*10-5;
float noise_z = static_cast<float>(rand())/RAND_MAX*10-5;
cloud->points[i].x += noise_x;
cloud->points[i].y += noise_y;
cloud->points[i].z += noise_z;
}
// Visualize point cloud
pcl::visualization::CloudViewer viewer("PointCloud Viewer");
viewer.showCloud(cloud);
while (!viewer.wasStopped())
{
}
return 0;
}
该代码首先生成了外半径为100,内半径为80的圆环的点云,然后生成了内部随机点云,最后将两个点云合并并可视化。可以根据需要调整噪声的程度
原文地址: https://www.cveoy.top/t/topic/cOaj 著作权归作者所有。请勿转载和采集!