一、轴角转换成旋转矩阵
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;
}
结果: