Eigen/Geometry模块学习
Eigen的主要模块有Core,Geometry,LU,Clolesky,Householder,SVD,QR,Eigenvalues,Sparse
#include<Eigen/Dense> //包括所有非Sparse模块
#include<Eigen/Sparese> //该模块主要关于与稀疏矩阵相关的内容
#include<Eigen/Eigen> //包括Eigen库的所有模块
一些非矩阵类型,可以按照矩阵的形式运算
#include<Eigen/Core>
#include<Eigen/Geometry> //SLAM中常用的变换、缩放、平移、旋转(包括四元数、轴角等),都需要用到Geometry模块
Eigen::Matrix3d rotation_matrix = Eigen::Matrix3d::Identity();
//定义并初始化为单位矩阵
Eigen::AngleAxisd rotation_vector(M_PI/4,Eigen::Vector3d(0,0,1));
//定义并初始化轴角
rotation_matrix=rotation_vector.toRotationMatrix();
//将轴角转化为旋转矩阵
Eigen::Vector3d v(1,2,3);
Eigen::Vector3d after_rotation=rotation_vector*v;
//使用轴角进行坐标变换
Eigen::Isometry3d T=Eigen::Isometry3d::Identity();
//定义一个4*4的欧氏变换矩阵,并初始化为单位阵
T.rotate(rotation_vector);//T.ratate(rotation_matrix);
//按照rotation_vector进行旋转;按照rotation_matrix进行旋转
T.pretranslate(Eigen::Vector3d(1,2,3));
//按照向量(1,2,3)进行平移
Eigen::Vector3d after_transform=T*v;
//相当于R*v+t
//对于仿射和投影变换,使用Eigen::Affine3d,Eigen::Projective3d
Eigen::Quaterniond q(w,x,y,z);
Eigen::Quaterniond q=Eigen::Quaterniond(rotation_vector);
Eigen::Quaterniond q=Eigen::Quaterniond(rotation_matrix);
//定义并初始化四元数
q.coeffs();
//(x,y,z,w)
Eigen::Vector3d after_totation=q*v;
//按照四元数q进行旋转