1 旋转的四种表示方法
- 旋转向量(也叫轴角)
- 旋转矩阵
- 欧拉角
- 四元数
这四种都可以相互转化,使用Eigen库常用转化总结如下
(0)构造旋转向量
Eigen::AngleAxisd rotation_vector ( M_PI / 4, Eigen::Vector3d ( 0, 0, 1 ) );
(1)旋转向量(也叫轴角) - - - - > 四元数
Eigen::Quaterniond q = Eigen::Quaterniond ( rotation_vector );
cout << "quaternion = \n" << q.coeffs() << endl; // 注意coeffs的顺序是(x,y,z,w),w为实部,前三者为虚部
(2)旋转向量(也叫轴角) - - - - > 旋转矩阵
Eigen::Matrix3d rotation_matrix = rotation_vector.toRotationMatrix();
// 或者
Eigen::Matrix3d rotation_matrix = rotation_vector.matrix()
(3) 旋转矩阵- - - - > 欧拉角
Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles ( 2, 1, 0 );// ZYX顺序,即roll pitch yaw顺序
2 四种变换
- 欧式变换
同一向量在各个坐标系下长度夹角都一样。6个自由度
// 欧氏变换矩阵使用 Eigen::Isometry
Eigen::Isometry3d T = Eigen::Isometry3d::Identity(); // 虽然称为3d,实质上是4*4的矩阵
T.rotate ( rotation_vector ); // 按照rotation_vector进行旋转
T.pretranslate ( Eigen::Vector3d ( 1, 3, 4 ) ); // 把平移向量设成(1,3,4)
- 相似变换
允许物体均匀缩放,7个自由度,体积比 - 仿射变换(正交投影)
变换之后立方体不再是方的了,但是各个面仍是平行四边形 - 射影变换
3D有15个自由度,真实世界到相机照片看作射影变换