矩阵的几何变换(Eigen/Geometry类)

【Unity技巧】四元数(Quaternion)和旋转 四元数介绍旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。那... 阅读详情
#include<iostream>
#include<cmath>
#include<eigen3/Eigen/Core>
// 几何模块
#include<eigen3/Eigen/Geometry>

using namespace std;

int main(){
	// eigen/geometry模块提供了各种旋转和平移的表示
	// 3D旋转矩阵直接使用matrix3d或matrix3f
	Eigen::Matrix3d rotation_matrix = Eigen::Matrix3d::Identity();	// 对角线为1,其余为0
	// 旋转向量使用angleaxis,它底层不直接是matrix,但运算可以当做矩阵(因为重载了运算符)
	Eigen::AngleAxisd rotation_vector(M_PI/4, Eigen::Vector3d(0, 0, 1));	// 沿Z轴旋转45度
	cout.precision(3);	// 精度输出三位
	cout<<"rotation_matrix = \n"<<rotation_vector.matrix() <<endl;	// 用matrix()转化为矩阵
	// 也可以直接赋值
	rotation_matrix = rotation_vector.toRotationMatrix();
	// 用angleaxis可以进行坐标变换
	Eigen::Vector3d v (1,0,0);
	Eigen::Vector3d v_rotated = rotation_vector * v;
	cout<<"(1,0,0) after rotation = "<<v_rotated.transpose() <<endl;
	// 或者用旋转矩阵
	v_rotated = rotation_matrix * v;
	cout<<"(1,0,0) after rotation = "<<v_rotated.transpose() <<endl;

	// 欧拉角:可以将旋转矩阵直接转换成欧拉角
	Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles(2,1,0);	// ZYX顺序,即yaw pitch roll顺序
	cout<<"yaw pitch roll = "<<euler_angles.transpose() <<endl;

	// 偶是变幻矩阵用Eigen::Isometry
	Eigen::Isometry3d T = Eigen::Isometry3d::Identity();	// 虽然称为3d,实质上是4*4矩阵
	T.rotate(rotation_vector);	// 按照rotation_vector进行旋转
	T.pretranslate(Eigen::Vector3d(1,3,4));		// 把平移向量设成(1,3,4)
	cout<<"Transform matrix = \n"<<T.matrix()<<endl;
	cout<< T(1,2) <<endl; 

	// 用变换矩阵进行坐标变换
	Eigen::Vector3d v_transformed = T*v;	// 相当于 R×v+t
	cout<<"v transformed = "<<v_transformed.transpose()<<endl;

	// 对于仿射变换,使用Eigen::Affine3d和Eigen::Projective3d即可

	// 四元数
	// 可以直接把AngleAxis赋值给四元数,反之亦然
	Eigen::Quaterniond q = Eigen::Quaterniond(rotation_vector);
	cout<<"quaternion = \n"<<q.coeffs() <<endl;	// coeffs输出的顺序是(x,y,z,w),w为实部,前三者为虚部
	// 也可以直接把旋转矩阵赋值给它
	q = Eigen::Quaterniond(rotation_matrix);
	cout<<"quaternion = \n"<<q.coeffs() <<endl;
	// 使用四元数旋转一个向量,使用重载的乘法即可
	v_rotated = q * v;	// 数学上是 qvq^{-1}
	cout<<"(1,0,0) after rotation = "<<v_rotated.transpose() <<endl;
	return 0;
}


 

Eigen/Geometry模块学习笔记 阅读详情

相关推荐

对线性代数库Eigen3中eulerAngles函数的理解

编写程序时有时会遇到在四元数、旋转矩阵、欧拉角之间进行转换的操作,使用eulerAngles函数从旋转矩阵中获得欧拉角,了解其使用方法才能保证转换时不出错。 头文件<Eigen/Geometry> 使用这个函数只需#include<Eigen/Geometry>即可,源代码位置为/usr/include/eigen3/Eigen/src/Geometry/EulerAngl...

qingtian11112的博客 1万+

SLAM十四讲之第三讲:三维空间刚体运动

`error: ‘Isometry3d’ was not declared in this scope` 刚体运动学、绕动轴、定轴旋转、eigen库解析、Pangolin环境搭建、第三讲课后习题、旋转矩阵、四元数、欧拉角、角轴的转换、代码

qq_49561752的博客 830

Eigen学习

Eigen学习 一些非矩阵类型,可以按照矩阵的形式运算 #include&amp;amp;amp;lt;Eigen/Core&amp;amp;amp;gt; #include&amp;amp;amp;lt;Eigen/Geometry&amp;amp;amp;gt; Eigen::Matrix3d rotation_matrix = Eigen::Matrix3d::Identity(); //定义并初始化为单位矩阵 Eigen::AngleAxisd rotation_ve

朝闻雨的博客 3774

几何变换

转载:https://blog.csdn.net/GreenHandCGL/article/details/89716239 在三维图形学中,几何变换大致分为三种,平移变换(Translation),缩放变换(Scaling),旋转变换(Rotation)。以下讨论皆针对DirectX,所以使用左手坐标系。 平移变换 将三维空间中的一个点[x, y, z, 1]移动到另外一个点[x’, y’, z’, 1],三个坐标轴的移动分量分别为dx=Tx, dy=Ty, dz=Tz, 即 x’ = x + Tx y

qq_40791099的博客 770

无人机多旋翼倾转动力测试系统-适用于(eVTOL开发、缩比模型测试、科研教育)

LY-QZ-F4多旋翼倾转动力测试系统是全球首款专为倾转四旋翼设计的多自由度动力测试平台,融合高精度传感、动态倾转模拟与智能工况分析,为下一代eVTOL技术提供全维度验证工具。采用航空级应变传感器(精度±0.1% FS),同步捕获推力、扭矩、俯仰/滚转力矩,动态误差<1%。同时测试电驱动系统(单轴最大150kW)与混合动力单元(增程式),支持高压(800V)平台。通过MET数据采集软件,控制采集一体化,定制化,实时观察上百个传感器数据,实时更改测试需求。可搭配六维姿态平台,温湿度舱、振动台等环境模拟设备。

weixin_49209795的博客 874

压电阀控制器设计-总章

本文章用于回顾记录本人制作压电阀控制器的关键技术,本人所制作压电阀控制器已经上市得到应用,特在此对一些关键技术进行回顾记录,欢迎从事压电控制及压电阀相关人员一起讨论

qq_42712859的博客 849

Eigen笔记

Eigen笔记

qq_43200940的博客 2255

高速窄脉冲峰值保持设计

一、目的 在激光探测领域,探测器发出的高速窄脉冲,单片机AD进行采样,很难捕捉到窄脉冲的幅值,即使使用高速AD进行采样,也存在一定的难度。因此,本方案设计了一种高速窄脉冲峰值保持电路,有助于单片机AD采样能很好的捕捉到脉冲幅值。 二、方案分析与比较 峰值保持器一般分为两种:电压型和跨导型。 方案一:电压型峰值保持器,由电压型运放、二极管、保持电容、缓冲器组成,优点是元件成本低,缺点是峰值保持存在过...

weixin_43184208的博客 9292

Eigen库头文件分析

Eigen库被分为一个Core模块和其他一些模块,每个模块有一些相应的头文件。 为了便于引用,Dense模块整合了一系列模块;Eigen模块整合了所有模块。一般情况下,include<Eigen/Dense> 就够了。 ...

小红鱼的博客 1864

2026华为OD面试手撕代码真题目录

一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解。不可能会再出阅读理解一样的机试题的。但是这些题目也非常注意基本功,很注意细节的处理,一般都是easy+medium题目。但是大家一定要注意,因为大部分面试官上面一开始就会让你做题,直接看你所有的做题过程(防止有人水平一般,机试就网上找的答案的蒙混过关),手撕代码题会给你后面的面试定一个基调。

MISAYAONE的博客 9万+

SAP使用XCO框架创建RAP所有对象

通过XCO框架自动生成SAP ABAP开发对象。

DeveloperMrMeng的博客 548

Eigen的使用总结2——geometry

常用: 旋转矩阵(3X3):Eigen::Matrix3d 旋转向量(3X1):Eigen::AngleAxisd 四元数(4X1):Eigen::Quaterniond 平移向量(3X1):Eigen::Vector3d 变换矩阵(4X4):Eigen::Isometry3d AngleAxis(angle, axis):绕该轴逆时针旋转angle(ra...

reason的博客 1万+

23、电器元件符号及封装大全(2025版本)

总计28类电器元件符号和封装。

XU157303764的博客 2654

深入理解slambook2中的Eigen几何变换模块

在视觉SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)系统中,几何变换是核心基础。无论是相机的位姿估计、特征点的坐标转换,还是地图点的投影计算,都离不开精确的几何变换操作。slambook2作为SLAM领域的经典教材,其第三章专门介绍了Eigen库在几何变换中的应用,为后续的SLAM算法实现奠定了坚实基础。 本文将深入解析slambook...

gitblog_00159的博客 333

1、2022 应用密码学与网络安全会议亮点与关键技术解读

2022年应用密码学与网络安全会议(ACNS 2022)在意大利罗马成功举办,会议涵盖了密码学与网络安全的多个前沿领域,包括键控全同态加密、隐私保护技术、区块链、后量子密码学和多方计算等。会议共收录44篇论文,展示了众多创新的研究成果,为学术研究和实际应用提供了新的思路和方法。本次会议促进了学术界和工业界的交流与合作,推动了密码学与网络安全行业的发展。

blue的专栏 182

DeepFashion 服装识别:基于 YOLOv10 的深度学习实现与 UI 界面开发

随着深度学习的发展,目标检测算法在服装识别任务中表现出色,特别是 YOLO(You Only Look Once)系列模型。服装识别(Fashion Recognition)是计算机视觉领域的重要任务,广泛应用于。已提供,可用于服装分类、款式识别、虚拟试衣等应用。训练服装识别模型,并开发。

YOLO 803

Eigen 中的 Geometry 模块详见和应用示例

Eigen 中的 Geometry 模块模块主要面向,在 SLAM、机器人学、计算机视觉、图形学 中经常用到。

qq_36812406的博客 1141

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c++矩阵库 Eigen 使用说明

1. 简介 Eigen是一个C++线性运算的模板库:他可以用来完成矩阵,向量,数值解等相关的运算。Eigen库的使用相当方便,将压缩包中的Eigen文件夹拷贝到项目目录下,直接包含其中的头文件即可使用,省去了使用Cmake进行编译的烦恼。 Core #include <Eigen/Core> MatrixandArrayclasses, basic linear ...

giantmfc123 2142

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Eigen的学习(十)几何学应用

Geometry(几何学)主要就是指的空间变换。学习这一章,可以减少代码编写量。本小节将会介绍一些处理2D、3D旋转、投影和仿射的变换的一些内容,这些内容将会由几何模块(geometry module)提供。 一、Eigen模块介绍 Eigen的几何模块将会提供两种不同的几何变换: 抽象变换。比如旋转(以轴角或者四元数),平移,缩放。这些变换不是由matrix类来表示的,但是你愿意,你仍可以将它们与matrix类、vector类混合使用。 投影或者仿射变换则是matrix类。查看Transform类,确实

Fishfishfishfishcat 3274

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Eigen/Geometry 模块

Eigen/Geometry 模块提供了各种旋转和平移的表示 一、表示: 旋转矩阵直接使用 Matrix3d 或 Matrix3f: Eigen::Matrix3d rotationMatrix=Eigen::Matrix3d::Identity();//初始化为一个...

weixin_41735501的博客 2087

【Eigen】Chapter4 几何模块 Geometry

Eigen学习

ASUNAchan的博客 640

Eigen

【代码】Eigen。

u012732646的博客 689

Eigen C++

Eigen Cpp 介绍

lib0000的博客 1502

Eigen 中Geometry (几何模块)

该代码源于《视觉SLAM十四讲》 Eigen 中Geometry (几何模块) 主要操作有旋转向量和旋转矩阵之间的转换;欧拉角(旋转矩阵变欧拉角);欧式变换(旋转+平移);四元数 该页代码用于日后查找方便 (添加了部分笔记) #include &amp;lt;iostream&amp;gt; #include &amp;lt;cmath&amp;gt; using namespace std; #include &amp;lt...

博客 4027

深入浅出(二十)数学库 Eigen和GLM

Eigen 和 GLM 都是常用的 C++ 数学库,但它们的设计目标、性能优化方向和典型应用场景完全不同。

qq_43572400的博客 3962

Eigen学习教程(四)

Eigen学习教程四

无人驾驶好难啊啊啊的博客 2686
上一篇: eigen库的矩阵操作(Eigen/Dense类)
下一篇: 存在重复元素
rdc01234
博客等级 码龄9年 10粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值