齐次变换矩阵的旋转和平移顺序

先给出结论:齐次变换矩阵在进行坐标变换时,先进行旋转操作,再进行平移操作。

#include <eigen3/Eigen/Geometry>
#include <iostream>
int main()
{
    using Transform3d = Eigen::Transform<double, 3, Eigen::Isometry>;
    Eigen::Vector3d vec(1,1,1);
    Transform3d trans=Transform3d::Identity();
    trans.translation()=Eigen::Vector3d(1,2,3);
    Transform3d rot(Eigen::AngleAxisd(M_PI_2,Eigen::Vector3d(1,2,3)));
    Transform3d tf(rot);
    tf.translation()=Eigen::Vector3d(1,2,3);

    std::cout<<"---------------first rotate then translate-------------"<<std::endl;
    std::cout<< trans*rot*vec<<std::endl;

    std::cout<<"---------------first translate then rotate-------------"<<std::endl;
    std::cout<< rot*trans*vec<<std::endl;

    std::cout<<"---------------transform-------------"<<std::endl;
    std::cout<< tf*vec<<std::endl;
    return 0;
}

运行结果:
在这里插入图片描述
从数学计算角度解释:

t r a n s = ( 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 ) trans=\left(\begin{array}{cccc} 1 & 0 & 0 & x\\ 0 & 1 & 0 & y\\ 0 & 0 & 1 & z\\ 0 & 0 & 0 & 1 \end{array}\right) trans= 100001000010xyz1

( r 11 r 11 r 13 0 r 21 r 22 r 23 0 r 31 r 32 r 33 0 0 0 0 1 ) \left(\begin{array}{cccc} r_{11} & r_{11} & r_{13} & 0\\ r_{21} & r_{22} & r_{23} & 0\\ r_{31} & r_{32} & r_{33} & 0\\ 0 & 0 & 0 & 1 \end{array}\right) r11r21r310r11r22r320r13r23r3300001
先平移后旋转
r o t a t e ∗ t r a n s = ( r 11 r 11 r 13 r 11   x + r 11   y + r 13   z r 21 r 22 r 23 r 21   x + r 22   y + r 23   z r 31 r 32 r 33 r 31   x + r 32   y + r 33   z 0 0 0 1 ) rotate*trans=\left(\begin{array}{cccc} r_{11} & r_{11} & r_{13} & r_{11}\,x+r_{11}\,y+r_{13}\,z\\ r_{21} & r_{22} & r_{23} & r_{21}\,x+r_{22}\,y+r_{23}\,z\\ r_{31} & r_{32} & r_{33} & r_{31}\,x+r_{32}\,y+r_{33}\,z\\ 0 & 0 & 0 & 1 \end{array}\right) rotatetrans= r11r21r310r11r22r320r13r23r330r11x+r11y+r13zr21x+r22y+r23zr31x+r32y+r33z1
先旋转后平移
t r a n s ∗ r o t a t e = ( r 11 r 11 r 13 x r 21 r 22 r 23 y r 31 r 32 r 33 z 0 0 0 1 ) trans*rotate=\left(\begin{array}{cccc} r_{11} & r_{11} & r_{13} & x\\ r_{21} & r_{22} & r_{23} & y\\ r_{31} & r_{32} & r_{33} & z\\ 0 & 0 & 0 & 1 \end{array}\right) transrotate= r11r21r310r11r22r320r13r23r330xyz1

可以看出先旋转时,旋转操作并不会影响旋转前的平移坐标。

如果先平移再旋转的话,平移操作会改变旋转轴的坐标。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值