首页 > 编程知识 正文

利用平面向量基本定理求参数

时间:2023-05-03 10:31:22 阅读:272748 作者:2254

参考:

通常我们需要估计平面的方向,这就需要用到法线了,法线就是指垂直平面的线。

PCL中有自动求出法线的方法,我们来看一看,

首先假设我们有一个平面的点云cloud_xyz

要求出法线首先我们先定义一个法线估计的对象ne

pcl::NormalEstimation<:pointxyz pcl::normal> ne;

然后把要求的平面点云传给他

ne.setInputCloud (cloud_xyz);

这个方法求出cloud_xyz上每个点的法线方向,他是根据每个点附近的点云组成的平面求出的,所以我们需要设置一个半径,用来估计附近多大的范围取点来算平面,

ne.setRadiusSearch (0.05);

最后定义一个normal的对象来接受计算出来的法线

pcl::PointCloud<:normal>::Ptr cloud_normals (new pcl::PointCloud<:normal>);

计算并把结果保存在cloud_normals里

ne.compute (*cloud_normals);

这时算出来的法线就在这个对象里了,他里面的元素是和点云一一对应的,我们要访问每个点的法线方向,可以这样

for(int ix=0;ixpoints.size();ix++)

{

if(isnan(cloud_normals->points[ix].normal_x)||

isnan(cloud_normals->points[ix].normal_y)||

isnan(cloud_normals->points[ix].normal_z))

{

continue;

}

}

这里的isnan是判断法线是否为nan,因为如果一个点周围找不到足够的点计算平面,则法线中会赋值为nan,如果需要直接当作数字来用的同学们一定要注意这一点,使用我这种方法来判断。normal_x就是法线的x方向了,y z同理。然后PCL算出的法线是不知道正方向的,所以这点需要人为去判断正负。最后平面的法向量是各个点法向量和的平均。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。