Eigen的常用矩阵类型和行列操作

Eigen矩阵可以使用成员函数col(int i);row(i);对矩阵的行列进行赋值,要注意的是左值和右值为同一个矩阵中的块时容易出现bug,尽量使用中间变量去避免这种情况,一个示例如下

#include
#include
using namespace std;
int main()
{
	Eigen::Matrix3d R;
        Eigen::Vector3d v(1,2,3);
        Eigen::AngleAxisd t_V(1, Eigen::Vector3d::UnitZ());//UnitZ()返回一个z轴上的单位向量(0,0,1)
        R=t_V.matrix();
        cout<<"R = \n"<

CMakeLists.txt的写法

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(useGeometry)
include_directories("/usr/include/eigen3")
add_executable(eigen_geometry eigen_geometry.cpp)

这个头文件中包含了eigen常用到的矩阵类型的宏定义,存在这儿以备不时之需

//
// eigen_types.h Created by gaoxiang19 on 11/3/18.
//

#ifndef MYSLAM_EIGEN_TYPES_H
#define MYSLAM_EIGEN_TYPES_H

#include 
#include 
#include 
#include 

// double matricies
typedef Eigen::Matrix MatXX;
typedef Eigen::Matrix Mat1010;
typedef Eigen::Matrix Mat1313;
typedef Eigen::Matrix Mat810;
typedef Eigen::Matrix Mat83;
typedef Eigen::Matrix Mat66;
typedef Eigen::Matrix Mat53;
typedef Eigen::Matrix Mat43;
typedef Eigen::Matrix Mat42;
typedef Eigen::Matrix Mat33;
typedef Eigen::Matrix Mat22;
typedef Eigen::Matrix Mat23;
typedef Eigen::Matrix Mat88;
typedef Eigen::Matrix Mat77;
typedef Eigen::Matrix Mat49;
typedef Eigen::Matrix Mat89;
typedef Eigen::Matrix Mat94;
typedef Eigen::Matrix Mat98;
typedef Eigen::Matrix Mat99;
typedef Eigen::Matrix Mat66;
typedef Eigen::Matrix Mat96;
typedef Eigen::Matrix Mat81;
typedef Eigen::Matrix Mat18;
typedef Eigen::Matrix Mat91;
typedef Eigen::Matrix Mat19;
typedef Eigen::Matrix Mat84;
typedef Eigen::Matrix Mat48;
typedef Eigen::Matrix Mat44;
typedef Eigen::Matrix Mat1414;
typedef Eigen::Matrix Mat1515;

// float matricies
typedef Eigen::Matrix Mat33f;
typedef Eigen::Matrix Mat103f;
typedef Eigen::Matrix Mat22f;
typedef Eigen::Matrix Vec3f;
typedef Eigen::Matrix Vec2f;
typedef Eigen::Matrix Vec6f;
typedef Eigen::Matrix Mat18f;
typedef Eigen::Matrix Mat66f;
typedef Eigen::Matrix Mat88f;
typedef Eigen::Matrix Mat84f;
typedef Eigen::Matrix Mat66f;
typedef Eigen::Matrix Mat44f;
typedef Eigen::Matrix Mat1212f;
typedef Eigen::Matrix Mat1313f;
typedef Eigen::Matrix Mat1010f;
typedef Eigen::Matrix Mat99f;
typedef Eigen::Matrix Mat42f;
typedef Eigen::Matrix Mat62f;
typedef Eigen::Matrix Mat12f;
typedef Eigen::Matrix MatXXf;
typedef Eigen::Matrix Mat1414f;

// double vectors
typedef Eigen::Matrix Vec15;
typedef Eigen::Matrix Vec14;
typedef Eigen::Matrix Vec13;
typedef Eigen::Matrix Vec10;
typedef Eigen::Matrix Vec9;
typedef Eigen::Matrix Vec8;
typedef Eigen::Matrix Vec7;
typedef Eigen::Matrix Vec6;
typedef Eigen::Matrix Vec5;
typedef Eigen::Matrix Vec4;
typedef Eigen::Matrix Vec3;
typedef Eigen::Matrix Vec2;
typedef Eigen::Matrix Vec1;
typedef Eigen::Matrix VecX;

// float vectors
typedef Eigen::Matrix Vec12f;
typedef Eigen::Matrix Vec8f;
typedef Eigen::Matrix Vec10f;
typedef Eigen::Matrix Vec4f;
typedef Eigen::Matrix Vec12f;
typedef Eigen::Matrix Vec13f;
typedef Eigen::Matrix Vec9f;
typedef Eigen::Matrix VecXf;
typedef Eigen::Matrix Vec14f;

// Quaternions
typedef Eigen::Quaterniond Qd;
typedef Eigen::Quaternionf Qf;

// Vector of Eigen vectors
typedef std::vector> VecVec2;
typedef std::vector> VecVec3;
typedef std::vector> VecVec2f;
typedef std::vector> VecVec3f;

// Map of Eigen matrix
typedef std::map, Eigen::aligned_allocator> MapMatXX;



#endif

你可能感兴趣的:(Eigen)