Eigen相关(MatrixBase, Assert, ALIGNED. quaternion, normalize()和normalized)
MatrixBase
This class is the base that is inherited by all matrix, vector, and related expression types. Most of the Eigen API is contained in this class, and its base classes. Other important classes for the Eigen API are Matrix, and VectorwiseOp.
该类在Eigen中是一个基类,使用模板不指定变量的具体类型的时侯可以使用该类
如:
//打印输入Eigen中定义的矩阵、向量等类型的x的第一行
template<typename Derived>
void printFirstRow(const Eigen::MatrixBase<Derived>& x)
{cout << x.row(0) << endl;
}
可以使用模板找到行数,列数,定义新的类型
template<class H_type>
void dosomething(Eigen::MatrixBase<H_type>){H_type S;Eigen::Matrix<double,R_type::RowsAtCompileTime,R_type::ColsAtCompileTime> K;enum {rows = Eigen::MatrixBase < H_type > ::RowsAtCompileTime,cols = Eigen::MatrixBase < H_type > ::ColsAtCompileTime};Eigen::Matrix<double,rows,cols>T;
}
Assert
在C++中assert(x)用来调试,如果x计算值为false则中断,输出调试信息,Eigen中也有
EIGEN_STATIC_ASSERT_FIXED_SIZE(TYPE) \\ passes if TYPE is fixed size.
EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(TYPE) \\ passes if TYPE is dynamic size.
EIGEN_STATIC_ASSERT_LVALUE(Derived) \\ failes if Derived is read-only.
EIGEN_STATIC_ASSERT_ARRAYXPR(Derived) \\ passes if Derived is an array expression.
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(Derived1, Derived2) \\ failes if the two expressions are an array one and a matrix one.
EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE) \\ passes if TYPE must be a vector type.
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(TYPE, SIZE) \\ passes if TYPE must be a vector of the given size.
EIGEN_STATIC_ASSERT_MATRIX_SPECIFIC_SIZE(TYPE, ROWS, COLS) \\ passes if TYPE must be a matrix with given rows and columns.
EIGEN_STATIC_ASSERT_SAME_VECTOR_SIZE(TYPE0,TYPE1) \\ fails if the two vector expression types must have different sizes.
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(TYPE0,TYPE1) \\ fails if the two matrix expression types must have different sizes.
EIGEN_STATIC_ASSERT_SIZE_1x1(TYPE) \\ fails if TYPE cannot be an 1x1 expression.
对齐
在生成定长的Matrix或Vector对象时,需要开辟内存,调用默认构造函数,内存位数没对齐就会导致程序运行出错,对于这种情况需要自己定义new的operator,但是Eigen中定义了语句“EIGEN_MAKE_ALIGNED_OPERATOR_NEW”放入类中(结尾没有“;”)这样操作之后不用担心指针对齐问题
such as
class Foo
{...Eigen::Vector2d v;
public:EIGEN_MAKE_ALIGNED_OPERATOR_NEW...
};
...
Foo *foo = new Foo;
quaternion
Eigen::quaternion不同于其它matrix,按照类似于向量类型输出需要q.coeffs(),其包括x,y,z,w四个元素,赋值或是调用需用类似q.x()的用法
Eigen::Quaterniond q;
q.x() = 1;
q.y() = 2;
q.z() = 3;
q.w() = 4;
std::cout << q.coeffs() << std::endl;
normalize() 和 normalized()
normalize()对使用它的变量单位化,无返回
normalized() 返回使用它变量的单位化后的值,但是使用它的变量无变化
//q1(1,2,3,4), q2(3,2,1,4) cout << q2.coeffs() << endl;q2.normalize();cout << q2.coeffs() << endl;Eigen::Quaternion<double> q3;q3 = q1.normalized();cout << q1.coeffs() << endl;cout << q3.coeffs() << endl;
out:
3
2
1
4
0.547723
0.365148
0.182574
0.730297
1
2
3
4
0.182574
0.365148
0.547723
0.730297
Eigen相关(MatrixBase, Assert, ALIGNED. quaternion, normalize()和normalized)相关推荐
- boost::multiprecision模块Eigen相关的测试程序
boost::multiprecision模块Eigen相关的测试程序 实现功能 C++实现代码 实现功能 boost::multiprecision模块Eigen相关的测试程序 C++实现代码 #i ...
- Eigen 使用碎碎记_norm、normalize、normalized的区别
本文转载自Eigen中norm.normalize.normalized的区别 norm.normalize.normalized的区别 # include <eigen3/Eigen/Dens ...
- 【C++】Eigen中norm、normalize、normalized的区别
参考: https://blog.csdn.net/m0_56348460/article/details/117386857 https://blog.csdn.net/huangjunsheng1 ...
- Eigen中norm、normalize、normalized的区别
https://blog.csdn.net/m0_56348460/article/details/117386857 对于Vector,norm返回的是向量的二范数 Vector2d vec(3.0 ...
- Normalize 和 normalized
首先说明下,normalized的是vector的属性,而Normalize 是vector的方法 normalized和Normalize 都是可读的,读到的值是单位向量的值,只是nomalized ...
- OpenCV Eigen Sophus PCL G2O
外用库学习笔记 OpenCV 需知 OpenCV的结构 OpenCV modules 头文件 数据类型 示例 显示图片 视频 从摄像头中读取 读取文件并存放 读取配置文件 保存图片到文件 图像的像素 ...
- OpenCV与Eigen (C++)【学习备忘】
可点击OpenCV来自简书 /// OpenCV官网 OpenCV中的单位 棋盘格边长尺寸:mm [机器视觉] OPENCV 一.各个模块简介 二 .数据类型(点类.size类.向量类.矩形类.指针类 ...
- Eigen::Matrix
1. 矩阵的定义 #include <Eigen/Dense> // 基本函数只需要包含这个头文件 Matrix<double, 3, 3> A; // 固定了行数和列数的矩阵 ...
- Matlab移植到Eigen用到的词条
同型矩阵运算满足加法交换律.结合律:并存在单位元.逆元.和0元,为同型矩阵对加法的交换环. Eigen的简单运算参考:http://blog.163.com/jiaqiang_wang/blog/st ...
最新文章
- layer的一种用法,自己画出弹出框样式
- [原]Android打包之Gradle打包
- Kotlin协程简介(一)
- [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到?
- java如何关闭线程池_如何优雅的关闭Java线程池
- Objective-c的内存管理MRC与ARC
- 2021-2025年中国一氧化碳烟雾报警器行业市场供需与战略研究报告
- HDU 1269 迷宫城堡 (强连通分量,常规)
- 计算机五笔教案ppt,计算机基础课件五笔打字.ppt
- Matlab2018a破解出现licensing error:-8523
- 左手补贴右手社交 杀入直播红海的拼多多会有机会吗?
- 获取验证码以及验证验证码
- miui中的网页链接调用服务器,miui新增网页链接调用服务有什么用?
- 从零基础入门Linux系统
- HTPPS和HTTP的概念和区别
- fir.im Weekly - 如何打造 Github 「爆款」开源项目
- [ElementPlus] 多标签页切换
- Cocos2D-x 入门(1)
- 魔兽世界怀旧服务器无限刷怪点,魔兽世界怀旧服法师A怪升级路线地点 法师刷怪速升60全攻略...
- 用java汽车美容店管理系统_洗车店 一个较为简单的洗车店管理系统 联合开发网 - pudn.com...