(转)四元组与旋转矩阵

四元组和旋转矩阵间的转换 添加链接描述 添加链接描述 1.四元组–>旋转矩阵 2.旋转矩阵–>四元组 阅读详情
四元组与旋转矩阵
2
在3D程序中,通常用quaternion来计算3D物体的旋转角度,与Matrix相比,quaternion更加高效,占用的储存空间更小,此外也更便于插值。在数学上,quaternion表示复数w+xi+yj+zk,其中i,j,k都是虚数单位: 

 

i*i = j*j = k*k= -1

i*j = k, j*i = -k


可以把quaternion看做一个标量和一个3D向量的组合。实部w表示标量,虚部表示向量标记为V,或三个单独的分量(x,y,z)。所以quaternion可以记为[ w, V]或[ w,(x,y,x)]。对quaternion最大的误解在于认为w表示旋转角度,V表示旋转轴。正确的理解应该是w与旋转角度有关,v与旋转轴有关。例如,要表示以向量N为轴,轴旋α度,相对的quaternion应该是:



q = [ cos(α/ 2) , sin(α/ 2) N]

 =[ cos(α/ 2) , ( sina(α/ 2) Nx, sin(α/ 2)Ny, sin(α/ 2)Nz ) ]



为了计算方便,一般要求N为单位矢量。对quaternion来说使用四个值就能记录旋转,而不是Matrix所需的十六个值。为什么用quaternion来计算旋转很方便呢?先说过quaternion是一个复数,如果你还记得一点点复数的知识,那么应该知道复数乘法(叉乘)的几何意义实际上就是对复数进行旋转。对最简单的复数p= x + yi来说,和另一个复数q = ( conα,sinα)相乘,则表示把p沿逆时针方向旋转α:



p’ = pq 





当然,x+yi的形式只能表示2D变换,对3D变换来说就需要使用 quaternion了,而且计算也要复杂一点。为了对3D空间中的一个点p(x,y,z)进行旋转,需要先把它转换为quaternion形式p = [0, ( x, y, z)],接下来前面讨论的内容,定义q = cos(α/ 2) , sin(α/ 2) N为旋转quaternion,这里N为单位矢量长度的旋转轴,α为旋转角度。那么旋转之后的点p’则为:



       p’ = qpq-1
                                                    09-07-27


Re: 如何从四元组得到绕各个轴的旋转角度?       

         void QuaternionToEuler(Quaternion* q, Vector3* vOut) 
{ 
double q0 = q->w; 
double q1 = q->x; 
double q2 = q->y; 
double q3 = q->z; 

vOut->x = float(atan2( 2 * (q2*q3 + q0*q1), (q0*q0 - q1*q1 - q2*q2 + q3*q3))); 
vOut->y = float(asin( -2 * (q1*q3 - q0*q2))); 
vOut->z = float(atan2( 2 * (q1*q2 + q0*q3), (q0*q0 + q1*q1 - q2*q2 - q3*q3))); 
}
[DirectX12学习笔记] 四元组 四元组 这篇文章内容将比较偏数学,为方便快速复习,这里只列出关键的结论。 四元组简介 四元组类似于一个复数,有实部和虚部,只不过四元组的虚部是个矢量,因此总共有四维,一般来说我们把矢量放在前面,也就是说存在XMFLOAT4里面的时候,前三维是虚部,最后一维是实部。 运算的定义 乘法可以写成矩阵形式 注意因为涉及叉乘,左手系和右手系里的四元组不一样。 乘法和矩阵乘法一样,有结合律没有交换律。 ... 阅读详情

相关推荐

搞懂欧拉角、旋转矩阵、四元数

之前一直用旋转矩阵的转换,或者直接从机械臂中导出四元数,最近需要看懂一篇文章里面的推导公式,特地记录一下各个概念。 1.1 roll(横滚)、pitch(俯仰) 、 yaw(偏航) 关于右手笛卡尔坐标系的 x、y 和 z 轴的主动旋转分别叫做 roll(横滚)、pitch(俯仰) 和 yaw(偏航) 旋转。(参考) 1.2内在旋转(intrinsic rotations)和外在旋转(extrinsic rotations) 这两个概念通过下图进行说明:即内在旋转每次旋转围绕的轴是上次旋转之后坐标系的某个轴

weixin_42165913的博客 3294

四元组与旋转矩阵

来源:http://bezier.zhmy.com/archives/2009/156323.html     在3D程序中,通常用quaternion来计算3D物体的旋转角度,与Matrix相比,quaternion更加高效,占用的储存空间更小,此外也更便于插值。在数学上,quaternion表示复数w+xi+yj+zk,其中i,j,k都是虚数单位:  i*i = j*j = k*k= ...

windshg的专栏 365

Twin Builder CFD 示例:构建、验证和评估静态 ROM

通过我们构建、验证和评估静态 ROM 的综合指南,释放 Twin Builder CFD 的潜力。

jkh920184196的博客 1103

四元数

在讨论「四元数」之前,我们来想想对三维直角坐标而言,在物体旋转会有何影响,可以扩充三维直角坐标系统的旋转为三角度系统(Three-angle system),在Game Programming Gems中有提供这么一段: Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw)...

Jno19880的博客 552

SpringBoot+Git+Jenkins+K8s容器化部署

SpringBoot+Git+Jenkins+K8s容器一套部署流程

可乐加.糖 471

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

四元数与旋转

一.四元组基础 Q(x,y,z,w),其中x,y,z用来确定旋转轴,w为旋转的角度 Q=w+xi+yj+zk,i,j,k为三个虚轴的单位分量 I*j=k J*k=i; K*i=j; 叉乘: c=a × b= | i j k||a1 b1 c1||a2 b2 c2|=(b1c2-b2c1,c1a2-a1c2,a1b2-a2b1) c也...

weixin_30951743的博客 527

Centos7搭建OpenStack+创建iaas云主机

主要说明在控制节点和计算节点上,通过脚本的形式,安装OpenStack的iaas安装步骤和创建可运行的云主机。提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。

weixin_48218106的博客 1万+

从零开始学习Slam-旋转矩阵&旋转向量&四元组

旋转矩阵的概念,参考一个在这里 二维向量p 逆时针旋转θ的旋转矩阵为cosθsinθ​−sinθcosθ​。

qq_44691564的博客 1379

YOLO11优化:特征融合 | 金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块 | 25年7月最新成果

我们提出金字塔稀疏 Transformer(PST)——一个轻量级、即插即用的模块,通过由粗到细的 token 选择机制和共享注意力参数,在大幅降低计算量的同时保留空间细节。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1062

点云中概念:匹配、配准、融合

匹配,是寻找与一幅图相似的图像(不对寻找到的图像做矫正)。 配准,是寻找相似图像但是变形后的图像(需要做一些旋转之类的校正变换)。 融合,是多幅图像连接成一幅大图,视频集成中用的比较多。 1)匹配: 2)配准: 比如由于固定式激光雷达受测量方式的限制和被测物体集合形状的限制,固定的话一次只能扫描被测物体有限范围的点云数据(比如一个面??),这需要在多个视角下进行多次扫描(就是将激光雷达前后左右四个面都扫一下??对的),然而每个视角下得到点云数据都具有独立的坐标系,无法直接进行拼接(拼接就是将四个面

m0_37957160的博客 1万+

Quaternion(四元数)和旋转以及Yaw, pitch, roll 的含义

原文:http://www.linuxgraphics.cn/graphics/opengl_quaternion.html Quaternion(四元数)和旋转 本文介绍了四元数以及如何在OpenGL中使用四元数表示旋转。 Quaternion 的定义 四元数一般定义如下: q=w+xi+yj+zk 其中

zhangshoucheng的专栏 1万+

Autosar CAN 网络管理标准文档

Autosar CAN 网络管理标准文档

蚂蚁小兵 925

四元数、旋转矩阵、欧拉角之间转换(2019.9.2)

原文链接:https://blog.youkuaiyun.com/yang__jing/article/details/82316093 一、旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1.1 旋转向量转旋转矩阵 Eigen::Matrix3d rotation...

AI__future的博客 470

Arduino ESP8266通过 RF433数据收发实验

Arduino ESP8266通过 RF433射频模块实现数据收发实验 写这篇文章,折腾了2天,在没有成功之前,一直在摸索和采坑当中,不要问我黑暗和黎明之间有多长。开发很多时候只问结果,不问过程的,在这里分享来之不易的结果,希望后面的人不要采坑,有成功的案例先河,后面与之相关的应用开发只需要套用模板修改即可实现。 实物搭建 RF433模块 我使用的是这个:nodemcu 本案例开发所使用到的库:RadioHead:http://www.airspayce.com/mikem/

perseverance51博客 3808

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

理解四元组 Understanding Quaternions

翻译自 https://www.3dgep.com/understanding-quaternions/ 四元组 Transformation matrices 在三维空间中,任何一个坐标系可以有一个4*4的转换矩阵表示,其中左上角3*3的矩阵表示旋转矩阵,第四列前三个表示x,y,z坐标。 类似的,任何一个变换也可以表示为这样一个变换矩阵。 复数 不做过多解释 i2=j2=k2=...

zhoujunr1的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【引用】四元组与旋转矩阵

【引用】四元组与旋转矩阵    2011-09-22 17:13:39|  分类: DirectX资料|举报|字号 订阅      下载LOFTER客户端 本文转载自ericyang1231《四元组与旋转矩阵 》 在3D程序中,通常用quaternion

linuxheik的专栏 2412

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

3D数学之四元组应用及实现

第一次接触四元组是在使用OGRE引擎的时候,那个时候非常好奇,为什么4个数字就能表示一个旋转,另外为什么要用四元组来表示旋转,用旋转矩阵不是挺好的吗?经过一段的时间的学习,算是对四元组有了基础的认识,下面跟大家一起走进神奇的四元组之旅。 四元组,英文名字,Quaternion 先说明下,为什么我们要用四元组 1.它能节省存储空间 2.它的连接(concatenation)运

十年磨一剑 7497

OSG学习 位置变换/旋转 矩阵连乘

OSG 绕坐标轴旋转正方向: 旋转平移测试: osgViewer::Viewer viewer; osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("cow.osg"); viewer.setCameraManipulator(new osgGA::OrbitManipulator); viewer.setUpView

u014361059的博客 3782

从零开始学习Slam-旋转矩阵&旋转向量&四元组(二)

本文参考:计算机视觉life 仅作笔记用 书接上回,上回不清不楚的介绍了旋转矩阵&旋转向量和四元组 现在回顾一下重点: 本着绕谁谁不变的变则 假设绕z轴旋转θ,旋转矩阵为: 再回顾一下旋转向量的表示以及这个基本记不住的罗德里格斯公式,记不住也没事: 已知旋转矩阵定义是沿着Z轴旋转45°。请按照该定义初始化旋转向量、旋转矩阵、四元数、欧拉角。请编程实现:1、以上四种表达方式的相互转换关系并输出,并参考给出的结果验证是否正确。2、假设平移向量为(1,2,3),请输出旋转矩阵和该平移矩阵构成的欧式变换矩阵,并根

qq_44691564的博客 577

旋转矩阵的四元数表达法

四元数与旋转矩阵,这种好贴子收藏还不够,得留着存档呵呵,转自柯大侠 一.四元组基础 Q(x,y,z,w),其中x,y,z用来确定旋转轴,w为旋转的角度 Q=w+xi+yj+zk,i,j,k为三个虚轴的单位分量 I*j=k J*k=i; K*i=j; 叉乘: c=a × b= | i j k| |a1 b1 c1| |a2 b2 c2| =(b1c2-b2c

liliemily的专栏 8015

欧拉角、quat四元组和旋转矩阵的关系

本文介绍了机器人领域中三种姿态表示方法及其相互转化关系。欧拉角简单直观但存在万向锁问题;四元数数值稳定无奇异性,是机器人学标准表示;旋转矩阵唯一但冗余。重点分析了三种表示间的转化方法:四元数与旋转矩阵间转换最稳定可逆,而涉及欧拉角的转换存在多解和奇异性问题。文中提供了Python代码示例,并指出四元数应作为中间表示的最佳选择。最后通过转化关系图直观展示了各表示方法间的转换可行性。

A1233242的博客 228

简洁明了的搞清楚四元数和旋转矩阵的关系及使用

文章目录1 混淆的哪里?2 两种旋转2.1 回答第一个问题2.2 回答第二个问题3 总结 1 混淆的哪里? 关于四元数和旋转矩阵,使用过程中很容易迷糊,很重要的原因是没有区分好『坐标系的旋转』和『向量的旋转』。 不想看详细的说明过程可以直接看总结部分。 2 两种旋转 下面首先来区分这两种旋转。以一个飞机为例,假设惯性系为N(XYZ)系(下图中的黑色坐标系),B系(X’Y’Z’)与飞机固连(下图...

周小逗的博客 2970

四元数和旋转矩阵

四元数和旋转矩阵 Quaternion(四元数) Quaternion 的定义 四元数一般定义如下:     q=w+xi+yj+zk 其中 w,x,y,z是实数。同时,有:     i*i=-1     j*j=-1     k*k=-1 四元数也可以表示为:     q=[w,v] 其中v=(x,y,z)是矢量,w是标量,虽然v是矢量,但不能简

1万+
上一篇: Android ListView getView疯狂调用的解决办法
下一篇: 下载android源码时出现http请求错误到解决办法
搬不搬砖
博客等级 码龄24年 36粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值