四元数与旋转

二元数

表达

\[\begin{align*} z&=x+iy=(x,y)\\ &=r(\cos\theta+i\sin\theta)\\ &=re^{i\theta} \end{align*}\\ 其中r=\sqrt{x^2+y^2}\;,\theta=\arccos(\frac{x}{r}) \]

二元数即普通的复数
对于\(e^{i\theta}=\cos\theta+i\sin\theta\)的来源,可用泰勒展开(在复数上的推广)

\[\begin{align*} 由\;\;e^x&=\sum\limits_{k=0}^\infty \frac{x^k}{k!}\;\;得\;\;e^{i\theta}=\sum\limits_{k=0}^\infty \frac{(i\theta)^k}{k!}\\ 而\;\;\cos\theta&=\sum\limits_{k=0}^\infty\frac{i^{2k}\theta^{2k}}{(2k)!},\;\;\sin\theta=\sum\limits_{k=0}^\infty\frac{i^{2k}\theta^{2k+1}}{(2k+1)!}\\ 所以\;\;e^{i\theta}&=\cos\theta+i\sin\theta \end{align*}\\ \]

四元数

表达

\[\begin{align*} q&=s+xi+yj+zk=(s,x,y,z)\\ &=s+v\hat{q}=[s,v]\;\;---(二元形式)\\ &=r(\cos\theta+\frac{v\hat{q}}{|v|}\sin\theta)\\ &=re^{\frac{v\hat{q}}{|v|}\theta}\;\;---(指数形式)\\ 其中r&=\sqrt{s^2+|v|^2}\;,\theta=\arccos(\frac{x}{r})\\ v&=(x,y,z)\;\;\hat{q}=(i,j,k) \end{align*} \]

以下涉及四元数的计算,可以看懂后面的内容再回来
对于\(e^{\hat{q}v}=\cos |v|+\frac{\hat{q}v}{|v|}\sin|v|\)来源,同样可用泰勒展开(在复数上的推广)

\[\begin{align*} e^{\hat{q}v}&=\sum\limits_{k=0}^\infty \frac{(\hat{q}v)^k}{k!}\\ 而\;\;\cos |v|&=\sum\limits_{k=0}^\infty\frac{(\hat{q}v)^{2k}}{(2k)!},\;\;\sin |v|=\sum\limits_{k=0}^\infty\frac{|v|(\hat{q}v)^{2k}}{(2k+1)!}\\ 所以\;\;e^{\hat{q}v}&=\cos |v|+\frac{\hat{q}v}{|v|}\sin|v| \end{align*}\\ \]

矩阵形式表示虚部:

\[\begin{align*} q&=s+xi+yj+zk\\ &=s\begin{bmatrix}1&0\\0&1\\\end{bmatrix}+x\begin{bmatrix}0&-1\\1&0\\\end{bmatrix}+y\begin{bmatrix}0&-i\\-i&0\\\end{bmatrix}+z\begin{bmatrix}i&0\\0&-i\\\end{bmatrix}\\ &=\begin{bmatrix}s+zi&-x-yi\\x-yi&s-zi\\\end{bmatrix} \end{align*} \]

其它相关的四元数概念:

  • 实四元数:\(q=[s,0]\)
  • 纯四元数:\(q=[0,v]\)
  • 共轭四元数:\(q*=[s,-v]\)
  • 单位四元数:\(|q|=\sqrt{qq*}=\sqrt{s^2+|v|^2}=1\)
    单位四元数的乘法满足群,证明过程可用四元数的二元形式乘法
  • 四元数规范化:\(\frac{q}{|q|}\)
  • 四元数求逆:\(q^{-1}=\frac{q*}{|q|^2}\)
  • 四元数的对数:\(log(q)=log(re^{\frac{v\hat{q}}{|v|}\theta})=log(r)+\frac{v\hat{q}}{|v|}\theta\)
  • 四元数的幂次:\(q^t=(re^{\frac{v\hat{q}}{|v|}\theta})^t=r^te^{\frac{v\hat{q}}{|v|}\theta t}\)

简化表示:
也有直接用\(\hat{v}\)代表\(v\hat{q}\)的,此时\(\hat{v}\)\(\hat{q}\)不同,不是基的意思,可以看作是纯四元数
但是\(\hat{v_1}\times\hat{v_2}\)时应该看作\(v_1\times v_2\)
即涉及到点乘和叉乘时都要把纯四元数当做向量

运算

基的运算

基础运算:\(i^2=j^2=z^2=ijk=-1\)
可以推导出的运算(记忆方式联想叉乘,这些运算用矩阵形式同样也适用):
\(ij=-ji=k\)
\(ik=-ki=-j\)
\(jk=-kj=i\)

向量与基的元素乘:

\[v=(x,y,z),\;\hat{q}=(i,j,k)\\ v\hat{q}=xi+yj+zk \]

两个基相乘:

\[令v=(1,1,1),\;\;则\\ \hat{q}*\hat{q}=(v\hat{q})*(v\hat{q})=-|v|^2=-3\\ 即四元数虚部的乘法,具体计算见后面 \]

向量的运算

从线性代数角度,对于\(n\)维列向量\(a,b\),有

  • 内积:\(a^Tb\)
  • 叉积:\(a\times b\)
  • 外积:\(ab^T\)

对于内积:满足交换律和分配律,不满足结合律

  • 交换律:\(a\cdot b=b\cdot a\)
  • 分配律:\(a\cdot (b+c)=a\cdot b+a\cdot c\)

对于叉积:满足反交换律和分配律,不满足结合律

  • 反交换律:\(a\times b=-b\times a\)
  • 分配律:\(a\times (b+c)=a\times b+a\times c\)
  • 三重矢积公式:
    \((a\times b)\times c=a\cdot c\cdot b-b\cdot c\cdot a\)
    \(a\times (b\times c)=a\cdot c\cdot b-a\cdot b\cdot c\)

对于混合积运算:

  • 标量三重积:\((a\times b)\cdot c=a\cdot (b\times c)\)
    特别有:\(a\cdot (a\times c)=0\)

四元数加法、乘法与点积

加法: 把两个四元数的实部和虚部对应相加
\(\begin{aligned}q_1+q_2=(s_1+ix_1+jy_1+kx_1)+(s_2+ix_2+jy_2+kz_2)\\=(s_1+s_2)+i(x_1+x_2)+j(y_1+y_2)+k(z_1+z_2)\end{aligned}\)

乘法:

  • 四元数普通形式乘法运算:

\[\begin{aligned} q_1q_2& =(s_1+ix_1+jy_1+kz_1)*(s_2+ix_2+jy_2+kz_2) \\ &=(s_1s_2-x_1x_2-y_1y_2-z_1z_2) \\ &+i(s_1x_2+s_2x_1+y_1z_2-y_2z_1) \\ &+j(s_1y_2+s_2y_1+x_2z_1-x_1z_2) \\ &+k(s_1z_2+s_2z_1+x_1y_2-x_2y_1) \end{aligned} \]

  • 四元数二元形式乘法运算:

\[\begin{aligned} q_1q_2&=[s_1,v_1][s_2,v_2]=(s_1+v_1\hat{q})*(s_2+v_2\hat{q})\\ &=s_1s_2-v_1\cdot v_2+(s_1v_2+s_2v_1+v_1\times v_2)\hat{q}\\ &=[s_1s_2-v_1\cdot v_2,\;s_1v_2+s_2v_1+v_1\times v_2] \end{aligned} \]

  • 四元数虚部的乘法:\((v_1\hat{q})*(v_2\hat{q})=[-v_1\cdot v_2,\;v_1\times v_2]\)
    \(v_1\)\(v_2\)平行,则结果的虚部为0
    \(v_1\)\(v_2\)垂直,则结果的实部为0,将满足虚部运算的封闭性
  • 四元数与三维向量相乘:实际上就是把三维向量转化纯为四元数再相乘

\[\begin{aligned} 令q=&[s,v],p为三维向量,则\\ qp&=[s,v]p=[s,v][0,p]\\ pq&=p[s,v]=[0,p][s,v] \end{aligned} \]

  • 模乘性质:\(|q_1q_2|=|q_1||q_2|\)

\[\begin{aligned} 令q_1&=[s_1,v_1],\;q_2=[s_2,\;v_2],\;\theta 为v_1和v_2的夹角,\;则有\\ |q_1q_2|^2&=(s_1s_2-v_1v_2)^2+(s_1v_2+s_2v_1+v_1\times v_2)^2\\ &=(s_1^2s_2^2-2s_1s_2v_1v_2+v_1v_2v_1v_2)+(s_1^2v_2^2+2s_1s_2v_1v_2+s_2^2v_1^2+(v_1\times v_2)^2)\\ &=s_1^2(s_2^2+v_2^2)+s_2^2v_1^2+(|v_1||v_2|\cos\theta)^2+(|v_1||v_2|\sin\theta)^2\\ &=s_1^2(s_2^2+v_2^2)+v_1^2(s_2^2+v_2^2)+\\ &=(s_1^2+v_1^2)(s_2^2+v_2^2)\\ &=(|q_1||q_2|)^2\\ \end{aligned} \]

点积: \(q_1\cdot q_2=s_1s_2+v_1v_2\)

欧拉角旋转

欧拉角与内旋外旋

欧拉角有多种定义方式,其关键在于:旋转轴顺序、旋转角度、内旋和外旋的选择

  • 旋转轴顺序: 三次连续旋转一共有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(\alpha)=\begin{bmatrix}\cos\alpha&\sin\alpha&0\\-\sin\alpha&\cos\alpha&0\\0&0&1\end{bmatrix},Y(\beta)=\begin{bmatrix}\cos\beta&0&-\sin\beta\\0&1&0\\\sin\beta&0&\cos\beta\end{bmatrix},X(\gamma)=\begin{bmatrix}1&0&0\\0&\cos\gamma&\sin\gamma\\0&-\sin\gamma&\cos\gamma\end{bmatrix} \]

假设自身坐标系和全局坐标系在初始时重合,自身坐标系经过Z-Y-X外旋后任取一点,它在最终自身坐标系内的坐标为\(P_1\),在全局坐标系内的坐标为\(p_1\),则有

\[\begin{aligned} P_1&=Rp_1\\ 或\;p_1&=R^{-1}P_1\\ 其中\;R&=X(\gamma)Y(\beta)Z(\alpha) \end{aligned} \]

其中逆矩阵其实就是反方向旋转,又因为\(Z,Y,X\)均为单位正交阵,所以它们的逆矩阵为它们的转置矩阵
\(P_1=Rp_1\)是从全局坐标转为自身坐标,可以看成外旋Z-Y-X的结果,也可以看成是内旋X-Y-Z的结果
\(p_1=R^{-1}P_1\)则是从自身坐标转为全局坐标,与全局坐标转为自身坐标互逆

注意:
这里旋转矩阵\(R\)有两种解释,即外旋Z-Y-X的结果或内旋X-Y-Z的结果
对于外旋,\(R\)是左乘形成的,即依次左乘\(Z(\alpha),Y(\beta),X(\gamma)\)得到的\(R=X(\gamma)Y(\beta)Z(\alpha)\),矩阵左乘可以看做是坐标在变换(线性代数的向量空间章节中的过渡矩阵内容)
对于内旋,\(R\)是右乘形成的,即依次右乘\(X(\gamma),Y(\beta),Z(\alpha)\)得到的\(R=X(\gamma)Y(\beta)Z(\alpha)\),矩阵右乘可以看做是基底在变换
所以这里的左乘和右乘,都是指\(R\)的形成过程,而不是对坐标去左乘或右乘(毕竟坐标都是列向量了),而无论是左乘还是右乘,它们的结果即\(R\),都是一样的
此外,旋转矩阵与坐标相乘本质上是外旋操作,比如\(X(\gamma)Y(\beta)Z(\alpha)p_1\)可以依次分解成三个外旋操作,即先绕\(Z\)轴内旋\(\alpha\)度,再按\(Y\)轴内旋\(\beta\)度,最后按\(X\)轴内旋\(\gamma\)度,而对于内旋来说却做不到这样的按结合律的分解

四元数旋转

绕轴旋转的正向和反向按右手定则来,默认旋转的度数是指正向旋转,坐标采用列向量形式

共轭变换

\[p'=qpq^*=qpq^{-1}\\ 其中p是初始的三维向量\\ q是单位四元数\\ p'是旋转后的三维向量 \]

若要让向量\(p\)绕轴向量\(v\)正向旋转\(\theta\)度,则\(q=\cos\frac{\theta}{2}+\sin\frac{\theta}{2}v\hat{q}\),其中\(|v|=1\)

共轭变换的提出与四元数乘法性质、同构映射的思想有关[1] [2]

共轭变换的解读

抽象理解

四元数旋转实际上就是对一个三维向量进行四元数的共轭变换
左乘\(q\)是对向量\(p\)进行第一次旋转,把三维向量旋转到四维里去(本质是把三维向量放在四维空间进行旋转)
右乘\(q^{-1}\)是对向量\(p\)进行第二次旋转,把四维的向量再次旋转到三维里去(本质是把两次旋转后的向量映射回三维)

推导分析

\[\begin{aligned} 令单位四元数&q=[s,v],p为三维向量,则\\ qpq^{-1}&=[s,v][0,p][s,-v]\\ &=[-vp,sp+v\times p][s,-v]\\ &=[0,2vpv+(s^2-v^2)p+2sv\times p]\\ 再令p=p_{\parallel}+&p_{\perp},其中p_{\parallel}与v平行,p_{\perp}与v垂直,则\\ qpq^{-1}&=[0,2v(p_{\parallel}+p_{\perp})v+(s^2-v^2)(p_{\parallel}+p_{\perp})+2sv\times(p_{\parallel}+p_{\perp})]\\ &=[0,2vp_{\parallel}v+(s^2-v^2)p_{\parallel}+(s^2-v^2)p_{\perp}+2sv\times p_{\perp}]\\ 由于p_{\parallel}与v平&行,所以有vp_{\parallel}v=vvp_{\parallel}=v^2p_{\parallel}\\ qpq^{-1}&=[0,2v^2p_{\parallel}+(s^2-v^2)p_{\parallel}+(s^2-v^2)p_{\perp}+2sv\times p_{\perp}]\\ &=[0,(s^2+v^2)p_{\parallel}+(s^2-v^2)p_{\perp}+2sv\times p_{\perp}]\\ &=[0,p_{\parallel}+(s^2-v^2)p_{\perp}+2sv\times p_{\perp}]\\ 由于|q|=1,&所以不妨令s=\cos\frac{\theta}{2},v=\sin\frac{\theta}{2}u,则有|u|=1,且\\ qpq^{-1}&=[0,p_{\parallel}+\cos\theta p_{\perp}+\sin\theta u\times p_{\perp}]\\ 最后令w=u&\times p_{\perp},此时三个向量u、p_{\perp}、w形成一组正交基,且\\ qpq^{-1}&=[0,p_{\parallel}+\cos\theta p_{\perp}+\sin\theta w] \end{aligned} \]

结合上式的推导进行分析可知

  • \(q\)包含了旋转轴向量\(v\)以及旋转角度\(\theta\)的信息
  • 倒数第二条式子解释了为什么\(q\)中的\(\theta\)要以\(\frac{\theta}{2}\)的形式出现
  • 最后一条式子解释了为什么共轭变换能实现绕轴旋转:
    1. 先把\(p\)分解成\(p_{\parallel}\)\(p_{\perp}\),然后在基底\(u、p_{\perp}、w\)下进行旋转,其中\(u\)是轴向量
    2. 分量\(p_{\parallel}\)正向旋转\(\theta\)度后不变:\(p_{\parallel}'=p_{\parallel}\)
    3. 分量\(p_{\perp}\)正向旋转\(\theta\)度后变为:\(p_{\perp}'=\cos\theta p_{\perp}+\sin\theta w\)
    4. 最后再把旋转后的两个分量相加,得到向量\(p\)旋转后的结果:\(p'=p_{\parallel}'+p_{\perp}'=p_{\parallel}+\cos\theta p_{\perp}+\sin\theta w\)
  • 当轴向量\(v\)与待旋转向量\(p\)平行时:有\(qp=pq\),即轴向量按轴自身旋转时保持不变
  • 当轴向量\(v\)与待旋转向量\(p\)垂直时:有\(qp=pq^{-1}\)
    \(qp=pq^{-1}=[0,sp_{\perp}+v\times p_{\perp}]=[0,\cos\frac{\theta}{2}p_{\perp}+\sin\frac{\theta}{2}u\times p_{\perp}]=[0,\cos\frac{\theta}{2}p_{\perp}+\sin\frac{\theta}{2}w]\)
    说明此时已经将向量\(p\)在三维空间上绕轴旋转了\(\theta\)度,即\(v\)\(p\)垂直时四元数乘法不会把\(p\)旋转到四维里去(本质是此时在四维空间中的旋转仍能映射到三维空间上),此时左乘即\(qp\)是绕轴正向旋转,右乘即\(pq\)是绕轴反向旋转(或左手定则的正向旋转)

四元数与旋转矩阵

\[qpq^{-1}=\begin{bmatrix}1-2y^2-2z^2&2xy-2wz&2xz+2wy\\2xy+2wz&1-2x^2-2z^2&2yz-2wx\\2xz-2wy&2yz+2wx&1-2x^2-2y^2\end{bmatrix}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


  1. https://www.zhihu.com/tardis/zm/art/78987582 ↩︎

  2. https://zhuanlan.zhihu.com/p/378125863 ↩︎

posted @ 2023-07-21 01:42  kksk43  阅读(283)  评论(0)    收藏  举报
特效
黑夜
侧边栏隐藏