矩阵
[TOC]
官方文档
安装
https://gitlab.com/libeigen/eigen/-/releases
1 | # Ubuntu 系统默认版本安装 |
1 | mkdir build |
Map
Map的定义:
1 | Map< Matrix<typename Scalar, int RowsAtCompileTime, int ColsAtCompileTime> > |
在这种默认的定义中,Map只需要一个模板参数-Matrix。
为了构造Map变量,需要另两个信息:一个指针,该指针指向用于定义数组元素的内存区域;另一个是希望得到的matrix或vector的形状。
比如:定义一个float类型、动态尺寸大小的matrix:
1 | Map<MatrixXf> mf(pf,rows,columns); |
其中pf是一个float *类型的指向数组内存的指针。
定义一个固定大小的、整形的、只读vector:
1 | Map<const Vector4i> mi(pi); |
其中,pi是一个int *类型的指针。在这个例子中不需要传递尺寸大小给构造函数,因为尺寸大小已经由Matrix/Array类型确定了。
注意:Map没有默认的构造函数,你需要传递一个指针来初始化对象。
Map能够足够灵活地去容纳多种不同的数据表示,其他的两个模板参数:
1 | Map<typename MatrixType, |
MapOptions标识指针是否是对齐的(Aligned or Unaligned),默认是Unaligned。
StrideType表示内存数组的组织方式:行列的步长。
Map矩阵赋值(数组转mxtrix)
blog: Map class:连接Eigen与C++的数据
1 | //matrix_map1.cpp |
Matrix to c++数组
1 | Matrix3d eigMat; |
使用Map变量
1 | typedef Matrix<float,1,Dynamic> MatrixType; |
修改Map数组
1 | //matrix_map3.cpp |
矩阵拼接
1.cv::Mat矩阵拼接(注意在拼接方向上的维度应该相同)
1 | cv::vconcat(C, A, B); //垂直拼接 |
2.Eigen矩阵拼接(注意矩阵拼接之前必须要确定大小! 否则会报错)
1 | MatrixXd A; |
模块介绍
向量运算(.T,Sum,Trace,Inverse…)
Eigen库的矩阵(包括向量)运算时,需要声明头文件<Eigen/Core>,矩阵执行常见的运算指令:
1 | matrix_33 = Matrix3d::Random(); //生成一个3*3的随机矩阵 |
几何模块(四元数,欧拉角,旋转等)
使用Eigen库的几何模块时,需要声明头文件<Eigen/Geometry>,此模块支持进行四元数、欧拉角和旋转矩阵的运算。各种常见形式的表达方式如下所示:
1 | Eigen::Matrix3d //旋转矩阵(3*3) |
eigenGeometry Demo
- 旋转
- 四元数
1 |
|