一、轴角转换成旋转矩阵
C++实现
#include <iostream>
#include <Eigen/Dense>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;int main()
{double theta = M_PI/2;//90度Eigen::Vector3d xyz(1, 0, 0);//x轴Eigen::AngleAxisd rotation_vector(theta, xyz);//Eigen::Matrix3d rotation_matrix = rotation_vector.matrix();Eigen::Matrix3d rotation_matrix = rotation_vector.toRotationMatrix();cout.setf(ios_base::fixed, ios_base::floatfield); //使用定点计数法,精度指的是小数点后面的位数,而不是总位数cout.setf(ios_base::showpoint); //显示小数点后面的0 cout.precision(2); //使用定点计数法,显示小数点后面位数精度cout << rotation_matrix << endl;}
结果:
二、旋转矩阵转换成轴角
C++实现
#include <iostream>
#include <Eigen/Dense>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;int main()
{Eigen::Matrix3d rotation_matrix;rotation_matrix << 1, 0, 0, 0, 0, -1, 0, 1, 0;/*Eigen::AngleAxisd v2;v2.fromRotationMatrix(rotation_matrix);*//*Eigen::AngleAxisd v2;v2 = rotation_matrix;*/Eigen::AngleAxisd v2(rotation_matrix);cout.setf(ios_base::fixed, ios_base::floatfield); //使用定点计数法,精度指的是小数点后面的位数,而不是总位数cout.setf(ios_base::showpoint); //显示小数点后面的0 cout.precision(2); //使用定点计数法,显示小数点后面位数精度cout << "轴角的角度:" << endl << (v2.angle() * 180 / M_PI) <<"度" << endl << "轴:" << endl << v2.axis() << endl;}
结果: