四元数法
四元数法希腊哲学

四元数法希腊哲学1.为什么要用四元数可能四元数的由来大家都看过很多遍。
很久以前,一位老者坐在大桥边上,看着过往船只,突然灵光一闪,在桥边石碑上洋洋洒洒刻上几行大字,四元数诞生了!故事大家都爱听,那么为什么我们需要四元数?一种说法是解决向量乘法,我们知道向量之间乘法有内积和外积,但这两个运算均不完美,即不满足群的条件(当然四元数诞生的时候也还没有内积外积的说法)。
那向量之间是否存在这样一个非常完美的乘法,于是三维空间无法解决的问题就映射到四维空间。
这便是四元数诞生的契机。
那么问题又来了,既然四元数只是为了解决矩阵乘法,那为什么我们现在要用四元数进行旋转,甚至替代了欧拉角、轴角等形式?首先,四元数并不是生来为了解决三维旋转,而是它的性质非常有利于表达旋转信息(后面会详述),所以了解四元数的性质要先于了解四元数在旋转中的应用。
至于四元数替代欧拉角等形式,就需要牵扯到一些别的知识点,我先罗列一下四元数相比其他形式的优点:✧解决万向节死锁(Gimbal Lock)问题✧仅需存储4个浮点数,相比矩阵更加轻量✧四元数无论是求逆、串联等操作,相比矩阵更加高效所以综合考虑,现在主流游戏或动画引擎都会以缩放向量+旋转四元数+平移向量的形式进行存储角色的运动数据。
2.四元数是怎么想出来的平庸的教程会直接提出四元数的定义、运算规则等等,然后读者不知所云。
相反,较为系统的教程一般会从复数(Complex Number)进行引导,逐步提出四元数的定义,这样会让读者更容易理解,在脑中也更好形成画面。
那复数与四元数之间的关系、以及如何从复数这样一个概念扩展到四元数是我们需要理清的一个思路。
2.先说几个概念。
空间中的子空间:一般而言,空间(维度>2)都存在更低维的子空间,比如二维空间中一维子空间,也就是直线;三维空间中的一维子空间和二维子空间,也就是直线和面。
当超过三维的概念我们就很难去想象是什么样子,但四维空间一定会存在三维子空间或二维子空间。
四元数详解

四元数详解四元数是一种数学概念,它在多个领域都有广泛的应用。
在计算机图形学中,四元数用于表示旋转变换。
下面我将以人类的视角来介绍四元数的定义、性质和应用。
四元数是一种扩展了复数的数学结构。
它由一个实部和三个虚部组成,可以写成q = a + bi + cj + dk的形式,其中a、b、c、d分别是实数,i、j、k是虚数单位。
与复数一样,四元数也有加法和乘法运算。
我们来看四元数的定义。
四元数的实部a对应于实数部分,而虚部bi + cj + dk对应于虚数部分。
四元数的加法定义很简单,就是将实部和虚部分别相加。
而乘法则稍微复杂一些,需要使用四元数的乘法规则:i² = j² = k² = ijk = -1。
通过这个规则,我们可以计算出两个四元数的乘积。
接下来,我们来探讨一下四元数的性质。
首先,四元数的加法满足交换律和结合律。
然而,四元数的乘法不满足交换律,即ab ≠ ba。
此外,四元数的乘法满足结合律,但不满足分配律。
这些性质使得四元数的运算有一些独特的特点。
四元数在计算机图形学中有广泛的应用。
由于四元数可以用于表示旋转变换,因此在三维游戏和动画中经常被用到。
与传统的欧拉角相比,四元数具有很多优点,例如不存在万向锁问题和旋转插值更加平滑。
因此,使用四元数可以提高计算机图形学的效率和质量。
除了计算机图形学,四元数还在其他领域有着重要的应用。
例如,在航空航天领域,四元数可以用于表示飞行器的姿态和旋转控制。
在物理学中,四元数可以用于描述粒子的自旋。
此外,四元数还可以用于解决某些数学问题,例如解四次方程和计算曲线的弯曲度。
四元数是一种重要的数学概念,具有广泛的应用。
它在计算机图形学、航空航天和物理学等领域都发挥着重要作用。
通过深入理解四元数的定义、性质和应用,我们能够更好地应用它们解决实际问题,推动科学技术的发展。
四元数计算位移公式

四元数计算位移公式四元数是一种用来表示旋转的数学工具,它可以进行旋转的合成和插值运算。
但是,四元数也可以用来表示位移,尽管它不如矢量或矩阵表示法直观。
在本文中,我们将介绍如何使用四元数进行位移计算。
首先,让我们回顾一下四元数的基本定义。
四元数可以表示为q=(w,x,y,z),其中w是实数部分,而x、y和z是虚数部分。
四元数的基本属性是它们可以进行加法和乘法运算。
在位移计算中,我们首先需要将位移向量转换为四元数形式。
假设我们有一个三维位移向量p = (px, py, pz),我们可以将其转换为四元数形式q' = (0, px, py, pz)。
注意,w部分为0,以防止位移影响旋转。
接下来,假设我们有一个代表当前旋转的四元数r = (rw, rx, ry, rz)。
我们希望将位移向量与当前旋转相结合,并计算得到一个新的位移向量p' = (px', py', pz')。
要计算p',我们需要使用四元数的乘法运算。
首先,我们需要将p'转换为四元数形式q = (0, px', py', pz')。
然后,我们可以计算p' = rq,即将当前旋转应用于位移向量。
这可以通过以下公式来实现:p' = (rw, rx, ry, rz) * (0, px, py, pz) * (rw, -rx, -ry, -rz)这个乘法过程可以通过以下公式进行展开:p' = ((rw * 0 - rx * px - ry * py - rz * pz) + (rw * px + rx * 0 + ry * pz - rz * py) + (rw * py - rx * pz + ry * 0 + rz * px) + (rw * pz + rx * py - ry * px + rz * 0)) * (rw, rx, ry, rz)根据上面的展开,我们可以计算出p'的各个分量px'、py'和pz'。
四元数

我们举个最简单的例子:把点 P(1, 0, 1)绕旋转轴 u = (0, 1, 0)旋转 90°,求旋转后的顶点坐标。首先将 P 扩充到四元数, 即 p = (P, 0)。而 q = (u*sin45°, cos45°)。求 p′=qpq−1 的值。建议大家一定要在纸上计算一边,这样才能加深印象, 连笔都懒得动的人还是不要往下看了。最后的结果 p` = ((1, 0, -1), 0),即旋转后的顶点位置是(1, 0, -1)。
在 Unity 里,tranform 组件有一个变量名为 rotation,它的类型就是四元数。很多初学者会直接取 rotation 的 x、y、 z,认为它们分别对应了 Transform 面板里 R 的各个分量。当然很快我们就会发现这是完全不对的。实际上,四元数的 x、y、z 和 R 的那三个值从直观上来讲没什么关系,当然会存在一个表达式可以转换,在后面会讲。
那么,四元数又是什么呢?简单来说,四元数本质上是一种高阶复数(听不懂了吧。。。),是一个四维空间,相对于 复数的二维空间。我们高中的时候应该都学过复数,一个复数由实部和虚部组成,即 x = a + bi,i 是虚数单位,如果你 还记得的话应该知道 i^2 = -1。而四元数其实和我们学到的这种是类似的,不同的是,它的虚部包含了三个虚数单位, i、j、k,即一个四元数可以表示为 x = a + bi + cj + dk。那么,它和旋转为什么会有关系呢?
[csharp] view plain copy print?
1.
transform.rotation = Quaternion.AngleAxis(degrees, transform.right) * transform.rotation;
四元数简介

可表示为 d + ai + bj + ck,a、b、c、d是 实数。 • 四元数的其它表示方法: 1、q=[w,v] 其中v=(x,y,z)是矢量,w是标量。 2、q=( cosθ/2 , (x ,y,z )sinθ/2) 3、q=[d,a,b,c]T
• • • • •
纠正陀螺仪积分得出的姿态。 长期融合用到的传感器是加速度计和电子罗盘 假设正确的姿态四元数为Q,那么可以利用四元数旋转将参考坐标系和 体坐标系下的向量互相转换,将Eh和Eg转换到体坐标系下 BEh=Q×Eh×Q* BEg=Q×Eg×Q * 理论上Bg=BEg,Bh=BEh 即 { Q×Eh×Q* - Bh = 0} , { Q×Eg×Q* - Bg = 0} 这两个方程成立,联立这两个方程就可以解得姿态四元数Q。但是,由 于各种误差的存在,这个方程组只能找到最优解,找最优解的问题有许 多方法可以采用,如[梯度下降][高斯牛顿]
• q1 q2=
w2 x 2 y2 z2
四元数在姿态运算上的应用
• 一个单位化的四元数可以描述一个三维旋转的过程。例如:
p0以原点为旋转中心,旋转的轴是(α, β, γ) ( α^2 + β^2 + γ^2 = 1), 转θ角的旋转,用四元数表示就是: p1= qp0q-1
四元数
齐朋冲
四元数的引入
• 复数的加、乘运算可以表示平面向量的合成、伸
缩和旋转变换,这些知识我们已经在中学课程中 学过了。 那么,很自然的问题就是,在三维,或更高维空 间中是否也有复数的类似物?其中的元素还可以 像复数域那样做加、减、乘、除运算,并满足通 常复数的那些运算律,包括加法和乘法的交换律 与结合律、乘法对加法的分配律等待?更进一步, 我们是否可以期望用这样的数来表示三维或更高 维空间中的伸缩和旋转,就像用复数表示平面向 量的伸缩旋转那样方便?
四元数小总结

四元数⼩总结四元数记法:⼀个四元数包含⼀个标量分量和⼀个3D向量分量。
记标量为w,记向量为v或分开的x,y,z。
如下:[w,v][w,(x,y,z)]四元数与复数:四元数扩展了复数系统,它使⽤三个虚部i,j,k。
它们的关系如下:i2=j2=k2=-1ij=k,ji=-kjk=i,kj=-iki=j,ik=-j⼀个四元数[w,(x,y,z)]定义了复数 w+xi+yj+zk。
四元数和轴-⾓对:四元数能被解释为⾓位移的轴-⾓对⽅式。
其公式为下:设向量n为旋转轴,θ为绕轴旋转的量。
q=[cos(θ/2) sin(θ/2)n]=[cos(θ/2) (sin(θ/2)n x sin(θ/2)n y sin(θ/2)n z)]负四元数:-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四元数共轭:q*=[w -v]=[w (-x -y -z)]四元数的逆:q-1=q*/||q||但我们只使⽤单位四元数,故q-1=q*⼏何解释:使向量v反向,则旋转⽅向也反向了。
因此q绕轴旋转θ⾓,⽽q*沿相反的⽅向旋转相同的⾓度。
四元数乘法(叉乘):[w1 v1][w2 v2]=[w1w2-v1v2 w1v2+w2v1+v2×v1]四元数叉乘满⾜结合律但不满⾜交换律:(ab)c=a(bc)ab!=ba四元数乘积的模等于模的乘积:||q1q2||=||q1|| ||q2||四元数乘积的逆等于各个四元数的逆以相反的顺序相乘:(ab)-1=b-1a-1如何⽤四元数将3D点绕轴旋转:让我们“扩展”⼀个标准3D点(x,y,z)到四元数空间,通过定义四元数p=[0, (x,y,z)]即可。
旋转矩阵和四元素法

旋转矩阵和四元素法引言:旋转矩阵和四元素法是计算机图形学中常用的两种方法,用于描述和计算三维空间中的旋转变换。
本文将详细介绍旋转矩阵和四元素法的原理、应用以及优缺点。
一、旋转矩阵的原理和应用:1. 原理:旋转矩阵是一个3x3的矩阵,用于描述三维空间中的旋转变换。
旋转矩阵的每一列代表了旋转后的坐标轴在原始坐标系中的表示。
通过将一个向量与旋转矩阵相乘,可以实现对该向量的旋转变换。
2. 应用:旋转矩阵广泛应用于计算机图形学、计算机视觉等领域。
在三维建模中,使用旋转矩阵可以实现物体的旋转、变形和姿态控制。
在游戏开发中,旋转矩阵常用于计算相机的朝向和角度变化。
此外,旋转矩阵还可以用于计算两个坐标系之间的转换。
二、四元素法的原理和应用:1. 原理:四元素法,又称为四元数法,是一种用四个实数表示旋转的方法。
四元数由实部和虚部组成,虚部是一个三维向量。
通过将旋转变换表示为一个旋转轴和旋转角度,可以通过四元数的乘法来实现旋转变换。
2. 应用:四元素法在计算机图形学中被广泛应用于旋转插值和动画的计算。
通过插值计算两个旋转变换之间的中间状态,可以实现平滑的动画过渡效果。
此外,四元素法还可以用于防止万向锁现象的发生,提高旋转变换的稳定性和精确性。
三、旋转矩阵和四元素法的优缺点比较:1. 旋转矩阵的优点:(1)计算简单直观,易于理解和实现;(2)可以直接应用于三维坐标系的变换;(3)可以通过矩阵的乘法来实现多个旋转变换的复合。
2. 旋转矩阵的缺点:(1)存在数值误差累积的问题,当进行多次旋转变换时,可能导致结果不准确;(2)矩阵的运算比较耗时,特别是在计算资源有限的设备上;3. 四元素法的优点:(1)无数值误差累积问题,旋转变换精确度高;(2)计算速度较快,适用于实时计算和动画插值;(3)可以方便地进行旋转插值和平滑动画的计算。
4. 四元素法的缺点:(1)计算过程相对复杂,需要使用四元数的乘法和插值计算;(2)不直观,难以理解和调试;(3)在某些特定情况下,可能出现奇异性和计算不稳定性。
四元数 四旋翼飞行器姿态解算

四元数四旋翼飞行器姿态解算四元数是用来描述空间旋转的数学工具,在飞行器姿态解算中具有重要的应用。
四旋翼飞行器是一种采用四个电动马达驱动的多旋翼飞行器,通过调节四个马达的转速实现飞行器的姿态控制。
在四旋翼飞行器的飞行过程中,需要实时获取飞行器的姿态信息,以便进行飞行控制。
四元数作为一种有效的姿态描述方法,被广泛应用于四旋翼飞行器的姿态解算中。
四元数是一种具有四个元素的数学结构,通常表示为q = w + xi + yj + zk,其中w、x、y、z分别表示四元数的实部和三个虚部。
四元数可以表示为一个旋转矩阵,通过四元数乘法运算可以实现空间旋转的复合。
在四旋翼飞行器的姿态解算中,通常使用四元数来描述飞行器的姿态状态。
四旋翼飞行器的姿态解算涉及到四元数的插值、积分和旋转等计算。
在飞行器的姿态控制过程中,需要将传感器获取的姿态信息进行融合处理,得到飞行器的姿态状态。
四元数插值可以实现飞行器姿态信息的平滑过渡,提高飞行的稳定性和平顺性。
四元数积分可以实现对飞行器姿态状态的更新,保持飞行器的正确姿态。
四元数旋转可以实现飞行器的姿态控制,使飞行器按照指定的姿态进行飞行。
在四旋翼飞行器的姿态解算中,需要考虑传感器误差、系统延迟和控制精度等因素。
传感器误差会影响到飞行器的姿态感知精度,需要通过滤波算法和校准方法来降低误差影响。
系统延迟会导致飞行器姿态状态的延迟更新,需要通过合理的控制策略来补偿延迟效应。
控制精度是指飞行器姿态控制的准确性,需要通过优化控制算法来提高飞行器的稳定性和精确性。
总的来说,四元数是一种有效的姿态描述方法,被广泛应用于四旋翼飞行器的姿态解算中。
通过四元数插值、积分和旋转等计算,可以实现对飞行器姿态状态的准确解算和控制。
在实际的飞行应用中,需要综合考虑传感器误差、系统延迟和控制精度等因素,全面提高飞行器的姿态解算精度和控制性能。
四旋翼飞行器的姿态解算是飞行控制领域的重要课题,将带来对未来飞行器飞行性能的提升和发展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[cos(b), sin(b)*sin(a), -sin(b)*cos(a);
sin(c)*sin(b), cos(c)*cos(a)-sin(c)*cos(b)*sin(a), cos(c)*sin(a)+sin(c)*cos(b)*cos(a);
cos(c)*sin(b), -sin(c)*cos(a)-cos(c)*cos(b)*sin(a), -sin(c)*sin(a)+cos(c)*cos(b)*cos(a)];
一阶算法:
(2-31)
二阶算法:
(2-32)
三阶算法:
(2-33)
四阶算法:
(2-34)
求解四元数微分方程除了以上的增量算法,还可以利用龙格—库塔法或阿达姆斯方法等数值积分算法求解微分方程。但迭代一定时间后,四元数会不满足 ,为了让其满足此式,必须进行归一化处理。
初始值的确定:
正负号的确定
可取
其中的 由初始的姿态矩阵求得
四元数是哈密顿于1843年建立的数学概念,但只有在近四十年中才在刚体运动学中得到实际应用。四元数是由1个实数单位1和3个虚数单位 , , 组成的包含4个实元的超复数。若将 , , 视为基矢量,则可以把四元数分为标量和矢量两部分组成。其形式为:
(2-22)
且 ,其中 为标量, 为矢量。
引入四元数后,则方向余弦矩阵可由四元数表示为
(2-23)
由(2-12),我们可得
(2-24)
利用毕卡逼近法求解可得: (2-25)
令:
(2-26)
(2-25)可简写ຫໍສະໝຸດ :(2-27)将 展开可得:
(2-28)
由于:
(2-29)
将式(2-29)代入式(2-28)整理可得:
(2-30)
在实际解算中,把 和 展为级数形式并取有限项,得四元数的各阶近似算法。