二元数
表达
z=x+iy=(x,y)=r(cosθ+isinθ)=reiθ其中r=√x2+y2,θ=arccos(xr)
二元数即普通的复数
对于eiθ=cosθ+isinθ的来源,可用泰勒展开(在复数上的推广)
由ex=∞∑k=0xkk!得eiθ=∞∑k=0(iθ)kk!而cosθ=∞∑k=0i2kθ2k(2k)!,sinθ=∞∑k=0i2kθ2k+1(2k+1)!所以eiθ=cosθ+isinθ
四元数
表达
q=s+xi+yj+zk=(s,x,y,z)=s+v^q=[s,v]−−−(二元形式)=r(cosθ+v^q|v|sinθ)=rev^q|v|θ−−−(指数形式)其中r=√s2+|v|2,θ=arccos(xr)v=(x,y,z)^q=(i,j,k)
以下涉及四元数的计算,可以看懂后面的内容再回来
对于e^qv=cos|v|+^qv|v|sin|v|来源,同样可用泰勒展开(在复数上的推广)
e^qv=∞∑k=0(^qv)kk!而cos|v|=∞∑k=0(^qv)2k(2k)!,sin|v|=∞∑k=0|v|(^qv)2k(2k+1)!所以e^qv=cos|v|+^qv|v|sin|v|
矩阵形式表示虚部:
q=s+xi+yj+zk=s[1001]+x[0−110]+y[0−i−i0]+z[i00−i]=[s+zi−x−yix−yis−zi]
其它相关的四元数概念:
- 实四元数:q=[s,0]
- 纯四元数:q=[0,v]
- 共轭四元数:q∗=[s,−v]
- 单位四元数:|q|=√qq∗=√s2+|v|2=1
单位四元数的乘法满足群,证明过程可用四元数的二元形式乘法
- 四元数规范化:q|q|
- 四元数求逆:q−1=q∗|q|2
- 四元数的对数:log(q)=log(rev^q|v|θ)=log(r)+v^q|v|θ
- 四元数的幂次:qt=(rev^q|v|θ)t=rtev^q|v|θt
简化表示:
也有直接用^v代表v^q的,此时^v与^q不同,不是基的意思,可以看作是纯四元数
但是^v1×^v2时应该看作v1×v2
即涉及到点乘和叉乘时都要把纯四元数当做向量
运算
基的运算
基础运算:i2=j2=z2=ijk=−1
可以推导出的运算(记忆方式联想叉乘,这些运算用矩阵形式同样也适用):
ij=−ji=k
ik=−ki=−j
jk=−kj=i
向量与基的元素乘:
v=(x,y,z),^q=(i,j,k)v^q=xi+yj+zk
两个基相乘:
令v=(1,1,1),则^q∗^q=(v^q)∗(v^q)=−|v|2=−3即四元数虚部的乘法,具体计算见后面
向量的运算
从线性代数角度,对于n维列向量a,b,有
- 内积:aTb
- 叉积:a×b
- 外积:abT
对于内积:满足交换律和分配律,不满足结合律
- 交换律:a⋅b=b⋅a
- 分配律:a⋅(b+c)=a⋅b+a⋅c
对于叉积:满足反交换律和分配律,不满足结合律
- 反交换律:a×b=−b×a
- 分配律:a×(b+c)=a×b+a×c
- 三重矢积公式:
(a×b)×c=a⋅c⋅b−b⋅c⋅a
a×(b×c)=a⋅c⋅b−a⋅b⋅c
对于混合积运算:
- 标量三重积:(a×b)⋅c=a⋅(b×c)
特别有:a⋅(a×c)=0
四元数加法、乘法与点积
加法: 把两个四元数的实部和虚部对应相加
q1+q2=(s1+ix1+jy1+kx1)+(s2+ix2+jy2+kz2)=(s1+s2)+i(x1+x2)+j(y1+y2)+k(z1+z2)
乘法:
q1q2=(s1+ix1+jy1+kz1)∗(s2+ix2+jy2+kz2)=(s1s2−x1x2−y1y2−z1z2)+i(s1x2+s2x1+y1z2−y2z1)+j(s1y2+s2y1+x2z1−x1z2)+k(s1z2+s2z1+x1y2−x2y1)
q1q2=[s1,v1][s2,v2]=(s1+v1^q)∗(s2+v2^q)=s1s2−v1⋅v2+(s1v2+s2v1+v1×v2)^q=[s1s2−v1⋅v2,s1v2+s2v1+v1×v2]
- 四元数虚部的乘法:(v1^q)∗(v2^q)=[−v1⋅v2,v1×v2]
若v1与v2平行,则结果的虚部为0
若v1与v2垂直,则结果的实部为0,将满足虚部运算的封闭性
- 四元数与三维向量相乘:实际上就是把三维向量转化纯为四元数再相乘
令q=[s,v],p为三维向量,则qp=[s,v]p=[s,v][0,p]pq=p[s,v]=[0,p][s,v]
- 模乘性质:|q1q2|=|q1||q2|
令q1=[s1,v1],q2=[s2,v2],θ为v1和v2的夹角,则有|q1q2|2=(s1s2−v1v2)2+(s1v2+s2v1+v1×v2)2=(s21s22−2s1s2v1v2+v1v2v1v2)+(s21v22+2s1s2v1v2+s22v21+(v1×v2)2)=s21(s22+v22)+s22v21+(|v1||v2|cosθ)2+(|v1||v2|sinθ)2=s21(s22+v22)+v21(s22+v22)+=(s21+v21)(s22+v22)=(|q1||q2|)2
点积: q1⋅q2=s1s2+v1v2
欧拉角旋转
欧拉角与内旋外旋
欧拉角有多种定义方式,其关键在于:旋转轴顺序、旋转角度、内旋和外旋的选择
- 旋转轴顺序: 三次连续旋转一共有12种
两条轴:Z-X-Z, X-Y-X, Y-Z-Y, Z-Y-Z, X-Z-X, Y-X-Y
三条轴:X-Y-Z, Y-Z-X, Z-X-Y, X-Z-Y, Z-Y-X, Y-X-Z
- 旋转角度: 有正负之分,正则按右手定则旋转,负则按左手定则旋转
- 内旋和外旋:
内旋:按自身坐标系(会变)的坐标轴依次旋转
外旋:按全局坐标系(不变)的坐标轴依次旋转
旋转矩阵
绕轴旋转的正向和反向按右手定则来,默认旋转的度数是指正向旋转,坐标采用列向量形式
设绕Z,Y,X轴旋转的旋转矩阵分别为Z,Y,X,则
Z(α)=⎡⎢⎣cosαsinα0−sinαcosα0001⎤⎥⎦,Y(β)=⎡⎢⎣cosβ0−sinβ010sinβ0cosβ⎤⎥⎦,X(γ)=⎡⎢⎣1000cosγsinγ0−sinγcosγ⎤⎥⎦
假设自身坐标系和全局坐标系在初始时重合,自身坐标系经过Z-Y-X外旋后任取一点,它在最终自身坐标系内的坐标为P1,在全局坐标系内的坐标为p1,则有
P1=Rp1或p1=R−1P1其中R=X(γ)Y(β)Z(α)
其中逆矩阵其实就是反方向旋转,又因为Z,Y,X均为单位正交阵,所以它们的逆矩阵为它们的转置矩阵
P1=Rp1是从全局坐标转为自身坐标,可以看成外旋Z-Y-X的结果,也可以看成是内旋X-Y-Z的结果
p1=R−1P1则是从自身坐标转为全局坐标,与全局坐标转为自身坐标互逆
注意:
这里旋转矩阵R有两种解释,即外旋Z-Y-X的结果或内旋X-Y-Z的结果
对于外旋,R是左乘形成的,即依次左乘Z(α),Y(β),X(γ)得到的R=X(γ)Y(β)Z(α),矩阵左乘可以看做是坐标在变换(线性代数的向量空间章节中的过渡矩阵内容)
对于内旋,R是右乘形成的,即依次右乘X(γ),Y(β),Z(α)得到的R=X(γ)Y(β)Z(α),矩阵右乘可以看做是基底在变换
所以这里的左乘和右乘,都是指R的形成过程,而不是对坐标去左乘或右乘(毕竟坐标都是列向量了),而无论是左乘还是右乘,它们的结果即R,都是一样的
此外,旋转矩阵与坐标相乘本质上是外旋操作,比如X(γ)Y(β)Z(α)p1可以依次分解成三个外旋操作,即先绕Z轴内旋α度,再按Y轴内旋β度,最后按X轴内旋γ度,而对于内旋来说却做不到这样的按结合律的分解
四元数旋转
绕轴旋转的正向和反向按右手定则来,默认旋转的度数是指正向旋转,坐标采用列向量形式
共轭变换
p′=qpq∗=qpq−1其中p是初始的三维向量q是单位四元数p′是旋转后的三维向量
若要让向量p绕轴向量v正向旋转θ度,则q=cosθ2+sinθ2v^q,其中|v|=1
共轭变换的提出与四元数乘法性质、同构映射的思想有关
共轭变换的解读
抽象理解
四元数旋转实际上就是对一个三维向量进行四元数的共轭变换
左乘q是对向量p进行第一次旋转,把三维向量旋转到四维里去(本质是把三维向量放在四维空间进行旋转)
右乘q−1是对向量p进行第二次旋转,把四维的向量再次旋转到三维里去(本质是把两次旋转后的向量映射回三维)
推导分析
令单位四元数q=[s,v],p为三维向量,则qpq−1=[s,v][0,p][s,−v]=[−vp,sp+v×p][s,−v]=[0,2vpv+(s2−v2)p+2sv×p]再令p=p∥+p⊥,其中p∥与v平行,p⊥与v垂直,则qpq−1=[0,2v(p∥+p⊥)v+(s2−v2)(p∥+p⊥)+2sv×(p∥+p⊥)]=[0,2vp∥v+(s2−v2)p∥+(s2−v2)p⊥+2sv×p⊥]由于p∥与v平行,所以有vp∥v=vvp∥=v2p∥qpq−1=[0,2v2p∥+(s2−v2)p∥+(s2−v2)p⊥+2sv×p⊥]=[0,(s2+v2)p∥+(s2−v2)p⊥+2sv×p⊥]=[0,p∥+(s2−v2)p⊥+2sv×p⊥]由于|q|=1,所以不妨令s=cosθ2,v=sinθ2u,则有|u|=1,且qpq−1=[0,p∥+cosθp⊥+sinθu×p⊥]最后令w=u×p⊥,此时三个向量u、p⊥、w形成一组正交基,且qpq−1=[0,p∥+cosθp⊥+sinθw]
结合上式的推导进行分析可知
- q包含了旋转轴向量v以及旋转角度θ的信息
- 倒数第二条式子解释了为什么q中的θ要以θ2的形式出现
- 最后一条式子解释了为什么共轭变换能实现绕轴旋转:
- 先把p分解成p∥和p⊥,然后在基底u、p⊥、w下进行旋转,其中u是轴向量
- 分量p∥正向旋转θ度后不变:p′∥=p∥
- 分量p⊥正向旋转θ度后变为:p′⊥=cosθp⊥+sinθw
- 最后再把旋转后的两个分量相加,得到向量p旋转后的结果:p′=p′∥+p′⊥=p∥+cosθp⊥+sinθw
- 当轴向量v与待旋转向量p平行时:有qp=pq,即轴向量按轴自身旋转时保持不变
- 当轴向量v与待旋转向量p垂直时:有qp=pq−1
qp=pq−1=[0,sp⊥+v×p⊥]=[0,cosθ2p⊥+sinθ2u×p⊥]=[0,cosθ2p⊥+sinθ2w]
说明此时已经将向量p在三维空间上绕轴旋转了θ度,即v与p垂直时四元数乘法不会把p旋转到四维里去(本质是此时在四维空间中的旋转仍能映射到三维空间上),此时左乘即qp是绕轴正向旋转,右乘即pq是绕轴反向旋转(或左手定则的正向旋转)
四元数与旋转矩阵
qpq−1=⎡⎢⎣1−2y2−2z22xy−2wz2xz+2wy2xy+2wz1−2x2−2z22yz−2wx2xz−2wy2yz+2wx1−2x2−2y2⎤⎥⎦p其中q=(w,x,y,z),|q|=1
这里的旋转矩阵与外旋Z-X-Y得到的旋转矩阵是一样的
参考链接
https://www.cnblogs.com/dechinphy/p/quaternion-calc.html
https://blog.csdn.net/xinxiangwangzhi_/article/details/124650910
https://zhuanlan.zhihu.com/p/144032401
https://blog.csdn.net/Boooooots/article/details/87995418
https://blog.csdn.net/weixin_45590473/article/details/122884112
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~