一個新座標系由舊的座標系通過旋轉歐拉角得到,一共有12種旋轉方式:
YXY, ZXZ, XYX, ZYZ, XZX, YZY,
XYZ, XZY, YXZ, YZX, ZXY, ZYX
下面利用Eigen庫實現歐拉角與旋轉矩陣的互相轉化
需要包含的頭文件如下
#include <Eigen/Core>
#include <Eigen/Dense>
#include <Eigen/Geometry>
#include <Eigen/StdVector>
1.已知歐拉角求旋轉矩陣
::Eigen::Vector3f EulerAngle;
若EulerAngle是XYZ順序,則旋轉矩陣爲
::Eigen::Matrix3d RXYZ = ::Eigen::AngleAxisd(EulerAngle[0], ::Eigen::Vector3d::UnitX())
* ::Eigen::AngleAxisd(EulerAngle[1], ::Eigen::Vector3d::UnitY())
* ::Eigen::AngleAxisd(EulerAngle[2], ::Eigen::Vector3d::UnitZ());
若EulerAngle是ZXZ順序,則旋轉矩陣爲
::Eigen::Matrix3d RZXZ = ::Eigen::AngleAxisd(EulerAngle[0], ::Eigen::Vector3d::UnitZ())
* ::Eigen::AngleAxisd(EulerAngle[1], ::Eigen::Vector3d::UnitX())
* ::Eigen::AngleAxisd(EulerAngle[2], ::Eigen::Vector3d::UnitZ());
2.已知旋轉矩陣求歐拉角
由於歐拉角有12種旋轉方式,因此一個旋轉矩陣理論上可以求出12組歐拉角
::Eigen::Matrix3d R;
求ZYX順序歐拉角
::Eigen::Vector3f EulerAngleZYX= R.eulerAngles(2, 1, 0);
求ZXZ順規歐拉角
::Eigen::Vector3f EulerAngleZYZ= R.eulerAngles(2, 1, 2);
其中eulerAngles()的三個參數表示旋轉順序。0,1,2分別代表X,Y,Z