Eigen学习

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进行旋转

猜你喜欢

转载自blog.csdn.net/qq_37390296/article/details/84797448