Eigen::Matrix的6个模板参数含义

最近看程序的时候发现有时候声明matrix的时候带了6个参数,写法如下:

 Eigen::Matrix<double, 12, 10, 0, 12, 10> matrix;

前三个参数定义很明确,分别是元素的类型,矩阵的行数,矩阵的列数。

而后面三个参数就有点不明所以了。查了一下,分别是

Options_:矩阵的存储方式是按行还是按列,以及是否进行自动调整(向量化需要用到)

MaxRows_:最大行数

MaxCols_:最大列数

所以完整的Eigen::Matrix的6个模板参数的定义如下:

class Eigen::Matrix<Scalar_, Rows_, Cols_, Options_, MaxRows_, MaxCols_>

当然一般后三个参数都有默认值,一般不需要我们显式的定义。

#ifndef DEQINGPROJECT_SRC_MAP_INTEGRATION_INCLUDE_TOOLS_TYPES_H_ #define DEQINGPROJECT_SRC_MAP_INTEGRATION_INCLUDE_TOOLS_TYPES_H_ #pragma once #include <Eigen/Core> #include <Eigen/Dense> #include <Eigen/Geometry> #include <pcl/point_cloud.h> #include <pcl/point_types.h> #include <pcl/impl/pcl_base.hpp> using Vec2i = Eigen::Vector2i; using Vec3i = Eigen::Vector3i; using Vec3b = Eigen::Matrix<char, 3, 1>; using Vec2d = Eigen::Vector2d; using Vec2f = Eigen::Vector2f; using Vec3d = Eigen::Vector3d; using Vec3f = Eigen::Vector3f; using Vec4d = Eigen::Vector4d; using Vec4f = Eigen::Vector4f; using Vec5d = Eigen::Matrix<double, 5, 1>; using Vec5f = Eigen::Matrix<float, 5, 1>; using Vec6d = Eigen::Matrix<double, 6, 1>; using Vec6f = Eigen::Matrix<float, 6, 1>; using Vec9d = Eigen::Matrix<double, 9, 1>; using Vec15d = Eigen::Matrix<double, 15, 15>; using Vec18d = Eigen::Matrix<double, 18, 1>; using Mat1d = Eigen::Matrix<double, 1, 1>; using Mat2d = Eigen::Matrix<double, 2, 2>; using Mat23d = Eigen::Matrix<double, 2, 3>; using Mat32d = Eigen::Matrix<double, 3, 2>; using Mat3d = Eigen::Matrix3d; using Mat3f = Eigen::Matrix3f; using Mat4d = Eigen::Matrix4d; using Mat4f = Eigen::Matrix4f; using Mat5d = Eigen::Matrix<double, 5, 5>; using Mat5f = Eigen::Matrix<float, 5, 5>; using Mat6d = Eigen::Matrix<double, 6, 6>; using Mat6f = Eigen::Matrix<float, 6, 6>; using Mat9d = Eigen::Matrix<double, 9, 9>; using Mat96d = Eigen::Matrix<double, 9, 6>; using Mat15d = Eigen::Matrix<double, 15, 15>; using Mat18d = Eigen::Matrix<double, 18, 18>; using VecXd = Eigen::Matrix<double, -1, 1>; using MatXd = Eigen::Matrix<double, -1, -1>; using MatX18d = Eigen::Matrix<double, -1, 18>; using Quatd = Eigen::Quaterniond; using Quatf = Eigen::Quaternionf; const Mat3d Eye3d = Mat3d::Identity(); const Mat3f Eye3f = Mat3f::Identity(); const Vec3d Zero3d(0, 0, 0); const Vec3f Zero3f(0, 0, 0); using PointType = pcl::PointXYZI; using PointCloudType = pcl::PointCloud<PointType>; using CloudPtr = PointCloudType::Ptr; using PointVec = std::vector<PointType, Eigen::aligned_allocator<PointType>>; using IndexVec = std::vector<int>; inline Vec3f ToVec3f(const PointType& pt) { return pt.getVector3fMap(); } inline Vec3d ToVec3d(const PointType& pt) { return pt.getVector3fMap().cast<double>(); } template <typename T, int dim> inline Eigen::Matrix<T, dim, 1> ToEigen(const PointType& pt); template <> inline Eigen::Matrix<float, 2, 1> ToEigen<float, 2>(const PointType& pt) { return Vec2f(pt.x, pt.y); } template <> inline Eigen::Matrix<float, 3, 1> ToEigen<float, 3>(const PointType& pt) { return Vec3f(pt.x, pt.y, pt.z); } template <typename S> inline PointType ToPointType(const Eigen::Matrix<S, 3, 1>& pt) { PointType p; p.x = pt.x(); p.y = pt.y(); p.z = pt.z(); return p; } #endif // DEQINGPROJECT_SRC_MAP_INTEGRATION_INCLUDE_TOOLS_TYPES_H_ 详细注释上述代码
最新发布
09-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值