四元数小总结

四元数记法:

一个四元数包含一个标量分量和一个3D向量分量。记标量为w,记向量为v或分开的x,y,z。如下:

[w,v]

[w,(x,y,z)]

四元数与复数:

四元数扩展了复数系统 ,它使用三个虚部i,j,k。它们的关系如下:

i2=j2=k2=-1

ij=k,ji=-k

jk=i,kj=-i

ki=j,ik=-j

一个四元数[w,(x,y,z)]定义了复数 w+xi+yj+zk。

四元数和轴-角对:

四元数能被解释为角位移的轴-角对方式。其公式为下:

设向量n为旋转轴,θ为绕轴旋转的量。

q=[cos(θ/2)  sin(θ/2)n]

=[cos(θ/2)  (sin(θ/2)nx  sin(θ/2)ny  sin(θ/2)nz)]

负四元数:

-q=[-w (-x -y -z)]=[-w -v]

q和-q代表的实际角位移是相同的,很奇怪吧!如果我们将θ加上360度的倍数,不会改变q代表的角位移,但它使q的四个分量变负了。因此,3D中的任意角位移都有两种不同的四元数表示方式,它们互相为负。

单位四元数:

几何上存在2个单位四元数:[1,0]和[-1,0]。它们的意义是:当旋转角为360度的整数倍时,方位并没有改变,并且旋转轴也是无关紧要的。

数学上只有一个单位四元数:[1,0]。任意四元数q乘以单位四元数[1,0]仍为q。

四元数的模:

公式如下:

||q||=||[w (x y z)]||=sqrt(w2+x2+y2+z2)

    =||[w v]||=sqrt(w2+||v||2)

几何意义:

||q||=sqrt(cos(θ/2)2+sin(θ/2)2||n||2)

若n为单位向量,则:||q||=1

时间: 2024-10-19 16:18:01

四元数小总结的相关文章

欧拉角、四元数和矩阵的对比(转)

三维空间的旋转可以用欧拉角,旋转矩阵,轴-角,四元数,双四元数来表示,本文主要总结这些表示方法的优缺点. 一.  欧拉角(Euler-Angles) 1.1    介绍 欧拉角包括3个旋转,根据这3个旋转来指定一个刚体的朝向.这3个旋转分别绕x轴,y轴和z轴,分别称为Pitch,Yaw和Roll,如下图所示.欧拉角可以表示成z-x-z,x-y-x,z-y-z等形式,旋转的顺序影响结果. Pitch Yaw Roll 图1. 欧拉角的表示 欧拉角很重要的一个优点就是直观,容易理解. 欧拉角主要有下

四元数运动学笔记(3)四元数和旋转相关的约定表述

1.四元数的约定表述1.1 四元数表述的差异1.2 Hamilton vs JPL1.2.1元素的顺序1.2.2 左手系和右手系1.2.3 旋转操作的对象1.2.4 旋转操作的方向1.3 文章采用的表述1.4扰动和时间导数1.4.1右扰动和左扰动1.4.2 Hamilton表示下的(L-G)的四元数时间导数1.4.3 其他有用的表述方式1.5 barfoot书中表述2.旋转角速率表示旋转积分2.1零阶积分2.2一阶积分2.3归一化处理 1.四元数的约定表述 1.1 四元数表述的差异 根据实部虚部

【Unity编程】四元数(Quaternion)与欧拉角

欧拉旋转.四元数.矩阵旋转之间的差异 除了欧拉旋转以外,还有两种表示旋转的方式:矩阵旋转和四元数旋转.接下来我们比较它们的优缺点. 欧拉角 优点:三个角度组成,直观,容易理解. 优点:可以进行从一个方向到另一个方向旋转大于180度的角度. 弱点:死锁问题. 前面<[Unity编程]欧拉角与万向节死锁(图文版)>已经介绍过万向节死锁问题. 四元数 内部由四个数字(在Unity中称为x,y,z和w)组成,然而这些数字不表示角度或轴,并且通常不需要直接访问它们.除非你特别有兴趣深入了解四元数学,你只

一个小demo的开发日记(〇)

在大概两周(三周?)前,出于某些原因(w)我做了个小demo.(虽然因为各种各样的原因导致做它的时间只有一周多了…所以它还远没有完成OTL) 在目前看来,它主要的亮点啊啥的之类的东西大概可以用下面的(g)视(i)频(f)来代表w: 大概就是一个树木生长的过程,以及一个日夜交替(晚上的星星被gif几乎快压没了). (实际上才没这么点东西!但是没做完什么的TAT) 所用工具是Unity,不过为了性能全写的是Unlit Shader(按我的理解应该是不参与Unity5.x的GI(全局光照).这个Unl

刚体在三维空间的旋转(关于旋转矩阵、DCM、旋转向量、四元数、欧拉角)

最近学习了一些关于三维空间旋转相关的知识,借此梳理一下备忘. 三维空间的旋转(3D Rotation)是一个很神奇的东东:如果对某个刚体在三维空间进行任意次的旋转,只要旋转中心保持不变,无论多少次的旋转都可以用绕三维空间中某一个轴的一次旋转来表示.表示三维空间的旋转有多种互相等价的方式,常见的有旋转矩阵.DCM.旋转向量.四元数.欧拉角等.本篇文章主要梳理一下这些表示方式及相互转换的方法. 1. 欧拉角(Euler Angle) 最直观的表示方式是绕刚体自身的X.Y.Z三个轴分别进行旋转某个角度

一个小demo的开发日记(二)

时间倒退回2016年4月10日,这个工程刚开始的时候 —— 就不说做这个的原因和为什么要做个这个了.嗯…感觉好蠢. 一上来什么都没有.我决定把注意力先放到重点 —— 场景最中间那棵树上面. 在这个时候,我手里有一份Ogre(另一个游戏引擎,开源,无GUI)上的分形树.至于分形树是个啥,就先当成一个可以画出三维的树的程序好了. 然而我觉得用Unity能让我更快的完成这个东西,毕竟时间紧迫,离deadline只剩12天了.而现在我手上什么都没有,而且对Unity一无所知,简直…太糟了w 所以第一件事

【Unity编程】Unity中关于四元数的API详解

Unity中关于四元数的API详解 Quaternion类 Quaternion(四元数)用于计算Unity旋转.它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值. Unity内部使用四元数来表示所有的旋转. Quaternion是基于复数,并不容易直观地理解. 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自"Transform"),或者用四元数来构造新的旋转(例如,在两次旋转之间平滑插入). 大

四元数--结合《real time rendering》中关于四元数部分

四元数产生于1843年,是复数的一个扩展,所以里面包含了一些复数的运算.直到1985年才在图形学中使用. 四元数的优势是,相对与矩阵和欧拉角,四元数更直观和方便.四元数还可以用作某些方向上的插值,而欧拉角可能并不能很好的完成. 四元数使用四个数字表示.通常,前三个和旋转的轴密切相关,最后一个和旋转的角度相关.以下是一些数学背景,对于后面的四元数的变化十分重要. 注意到四元数是复数的一个扩展,那么可以表示为:Û = (â, v), 其中 v 是一个实数,而 â 则是可以看成是虚部,且 â= i*q

四元数与空间旋转

WIKI:单位四元数(Unit quarternion)可以用于表示三维空间里的旋转.它与常用的另外两种表示方式(三维正交矩阵和欧拉角)是等价的,但是避免了欧拉角表示法中的万向锁问题.比起三维正交矩阵表示,四元数表示能够更方便地给出旋转的转轴与旋转角. 关于欧拉角旋转的万向节死锁问题,是旋转的时候一不小心是两个不同的轴重合了,从而导致失去了一个轴的自由度.四元数不会出现这样的问题. 不太懂还是,大致意思是一个单位四元数可以使得三维空间中的一个点实现旋转.具体公式是 其中p是三维空间的一个点转化成