【matlab点云数据处理】平面点/点云旋转至平行于xoy平面

最近,遇到一个需要将平面上的三维点云进行旋转,使之与xoy平面平行。

  • 平面上的点分布如下图所示。

在这里插入图片描述

经过详细摸索,步骤如下:

  1. 求取该平面的法向量n1(可通过PCA方法进行求解,不在这进行赘述)。
  2. 表达出目标平行面的法向量,比如我想要与xoy平面平行,则我在这一步骤求得的法向量n2=(0,0,1)。
  3. 求得旋转轴,即求解垂直于原平面法向量n1与目标平面法向量n2的向量(本步骤通过叉乘方法求得)。
  4. 求解n1与**n2*之间的夹角φ。
  5. 根据旋转轴和夹角φ求解旋转矩阵R(本步骤通过罗德里格斯方法进行求解)
  6. 对点云中点坐标左乘旋转矩阵R,即可得到旋转后的点云。
  • 平面上的点旋转后分布如下图所示。
    在这里插入图片描述
    n0=[0,0,1];    %xoy平面法向量
    rotation_axis= cross(normal_pnts',n0);  %求旋转角
    theta = acos((n0*normal_pnts) / ( norm(n0)*norm(normal_pnts') ));  %求夹角
    Rv = rotation_axis / norm(rotation_axis) * theta;
    Rotation_matrix = rodrigues(Rv);     %基于罗德里格斯求解旋转矩阵
    proj_pnts_1=Rotation_matrix * proj_pnts;  %每个点左乘旋转矩阵得到旋转后的平面点

部分代码块见上述代码,我把罗德里格斯方法的子函数放到下载专栏,有需要的自取。

  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alert_feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值