ZigZagK的博客
四元数简单介绍
2024年3月30日 16:27
图形学
查看标签

从三维旋转的角度简单介绍一下四元数。

定义

$\hat{q}=xi+yj+zk+w=\hat{q}_v+q_w=(\hat{q}_v,q_w)$ 。$q_w$ 为实部,$\hat{q}_v$ 为虚部。$i,j,k$ 为虚数单位。

其中:$i^2=j^2=k^2=-1,\begin{cases}i=j\times k=-k\times j\\j=k\times i=-i\times k\\k=i\times j=-j\times i\end{cases}$ ,不满足交换律

三维空间的点表示为 $\hat{P}=\hat{P}_v+0$ 。

计算

  1. 乘法:根据定义可得 $\hat{q}\hat{r}=(\hat{q}_v\times\hat{r}_v+q_w\hat{r}_v+r_w\hat{q}_v,q_wr_w-\hat{q}_v\cdot\hat{r}_v)$ ,其中 $\times$ 为叉乘,$\cdot$ 为点乘,不满足交换律
  2. 共轭:$\hat{q}^*=(-\hat{q}_v,q_w)$ 。
  3. 模:定义为和共轭的乘积开根,$n(\hat{q})=\Vert\hat{q}\Vert=\sqrt{\hat{q}\hat{q}^*}=\sqrt{x^2+y^2+z^2+w^2}$ 。
  4. 逆:由 $\hat{q}\hat{q}^*=n(\hat{q})^2$ 得到 $\hat{q}{\hat{q}^*\over n(\hat{q})^2}=1$ ,因此 $\hat{q}^{-1}={1\over n(\hat{q})^2}\hat{q}^*$ 。

性质:

  1. 四元数满足线性,结合律。
  2. $(\hat{q}\hat{r})^*=\hat{r}^*\hat{q}^*$(由 $\vec{a}\times\vec{b}=-\vec{b}\times\vec{a}$ 易证)
  3. $n(\hat{q})=n(\hat{q}^*),n(\hat{q}\hat{r})=n(\hat{q})n(\hat{r})$

    证:$n(\hat{q}\hat{r})=\sqrt{\hat{q}\hat{r}(\hat{q}\hat{r})^*}=\sqrt{\hat{q}(\hat{r}\hat{r}^*)\hat{q}^*}=\sqrt{\hat{r}\hat{r}^*}\sqrt{\hat{q}\hat{q}^*}=n(\hat{q})n(\hat{r})$

单位四元数

若三维向量 $\Vert\hat{u}_q\Vert=1$ ,则 $\hat{q}=\sin\varphi\hat{u}_q+\cos\varphi$ 为单位四元数,$n(\hat{q})=1$ 。

性质:

  1. $\hat{q}^{-1}={1\over 1}\hat{q}^*=\hat{q}^*$
  2. 由欧拉公式以及 $\hat{u}_q\hat{u}_q=-\hat{u}_q\cdot\hat{u}_q=-1$ 也是虚数单位,得 $\hat{q}=e^{\hat{u}_q\varphi}$

    因此 $\hat{q}^t=e^{\hat{u}_q\varphi t}$ ,从 $\varphi\to\varphi t$ ,且显然 $\hat{q}^t$ 也是单位四元数

用四元数表示三维旋转

传统三维旋转

$\vec{v}$ 绕着单位向量 $\vec{u}$ 逆时针旋转 $\theta$ 时。关于 $\vec{u}$ 平行部分 $\vec{v}_{\parallel}$ 不受影响,垂直部分 $\vec{v}_{\perp}$ 绕 $\vec{u}$ 旋转。

考虑用两个垂直向量来表示这个旋转,其中一个是 $\vec{v}_{\perp}$ ,另一个是 $\vec{u}\times\vec{v}_{\perp}$ ,则旋转可以写成:

$$ \vec{v}_{\perp}'=\vec{v}_{\perp}\cos\theta+(\vec{u}\times\vec{v}_{\perp})\sin\theta\\ \vec{v}'=\vec{v}_{\perp}'+\vec{v}_{\parallel}=[\vec{v}_{\perp}\cos\theta+(\vec{u}\times\vec{v}_{\perp})\sin\theta]+\vec{v}_{\parallel} $$

用四元数表示

令 $\hat{V}=\hat{v}$ ,$\hat{U}=\hat{u}$ ,$\hat{q}=\sin\theta\hat{u}+\cos\theta$ ,$\hat{p}=\sqrt{\hat{q}}=\sin{\theta\over 2}\hat{u}+\cos{\theta\over 2}$(单位四元数性质2)。

$$ \begin{aligned} \hat{V}'=\hat{V}_{\perp}'+\hat{V}_{\parallel}&=[\hat{V}_{\perp}\cos\theta+(\hat{u}\times\hat{v}_{\perp})\sin\theta]+\hat{V}_{\parallel}\\ &=[\hat{V}_{\perp}\cos\theta+(\hat{u}\times\hat{v}_{\perp}+0\hat{u}+0\hat{v}_{\perp}+0-\hat{u}\cdot\hat{v}_{\perp})\sin\theta]+\hat{V}_{\parallel}\\ &=[\hat{V}_{\perp}\cos\theta+(\hat{U}\hat{V}_{\perp})\sin\theta]+\hat{V}_{\parallel}\\ &=(\sin\theta\hat{U}+\cos\theta)\hat{V}_{\perp}+\hat{V}_{\parallel}\\ &=\hat{q}\hat{V}_{\perp}+\hat{V}_{\parallel} \end{aligned} $$

定理1:若 $\hat{V}=\hat{v}+0,\hat{q}=a\hat{u}+b$ ,且 $\hat{v}\parallel\hat{u}$ ,则 $\hat{q}\hat{V}=\hat{V}\hat{q}$ 。(平行叉乘为 $0$ 易证)

定理2:若 $\hat{V}=\hat{v}+0,\hat{q}=a\hat{u}+b$ ,且 $\hat{v}\perp\hat{u}$ ,则 $\hat{q}\hat{V}=\hat{V}\hat{q}^*$ 。(垂直点乘为 $0$ ,叉乘用共轭凑个负号)

经过巧妙(凑)的式子转化:

$$ \begin{aligned} \hat{V}'&=\hat{q}\hat{V}_{\perp}+\hat{V}_{\parallel}=1\hat{V}_{\parallel}+\hat{p}\hat{p}\hat{V}_{\perp}=\hat{p}\hat{p}^{-1}\hat{V}_{\parallel}+\hat{p}\hat{p}\hat{V}_{\perp}=\hat{p}\hat{p}^{*}\hat{V}_{\parallel}+\hat{p}\hat{p}\hat{V}_{\perp}\\ &=\hat{p}\hat{V}_{\parallel}\hat{p}^*+\hat{p}\hat{V}_{\perp}\hat{p}^*=\hat{p}(\hat{V}_{\parallel}+\hat{V}_{\perp})\hat{p}^*=\hat{p}\hat{V}\hat{p}^*=\hat{p}\hat{V}\hat{p}^{-1} \end{aligned} $$

令 $\phi_p(\hat{V})=\hat{p}\hat{V}\hat{p}^{-1}$ ,表示 $\vec{v}$ 绕着单位向量 $\vec{u}$ 轴逆时针旋转 $\theta$,其中 $\hat{p}=\sin{\theta\over 2}\hat{u}+\cos{\theta\over 2}$

其他作用

虽然用线性代数就可以直接写出三维旋转,但是四元数可以方便的表示旋转插值。

版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!