钾肥喵的窝

我在 CODING 部署的 Hexo 博客

0%

四元数系列——1.四元数的定义和运算

本系列参考自 Quaternions for Computer Graphics视觉SLAM十四讲(第二版)

小历史

复数是否存在三维等价物? 这个问题吸引力很多数学家来研究.

我们知道, 二维复数可以用 \(a+bi\) 表示, 于是 Hamilton 猜想三维复数可以用 \(a+bi+cj\) 的形式表示, 但无法解决三维复数乘法的封闭性. 十多年后, 他在散步时找到了解决方案: 三维不行就用四维.

四元数的定义

四元数相当于加强版的复数, 它有一个 实部 和三个 虚部. 下式中的 \(\mathrm{i,j,k}\) 是四元数 \(\boldsymbol{q}\) 的三个虚部.

\[ \boldsymbol{q}=q_{0}+q_{1}\mathrm{i}+q_{2}\mathrm{j}+q_{3}\mathrm{k} \]

四元数的三个虚部满足如下关系:

\[ \begin{cases} \mathrm{i}^{2}=\mathrm{j}^{2}=\mathrm{k}^{2}=-1 \\ \mathrm{ij}=\mathrm{k}, \quad \mathrm{ji}=-\mathrm{k} \\ \mathrm{jk}=\mathrm{i}, \quad \mathrm{kj}=-\mathrm{i} \\ \mathrm{ki}=\mathrm{j}, \quad \mathrm{ik}=-\mathrm{j} \end{cases} \]

参考复平面, 把 \(\mathrm{i,j,k}\) 看作坐标轴, 可以用标量和向量表示四元数:

\[ \boldsymbol{q}=\begin{bmatrix}s, \boldsymbol{v}\end{bmatrix}^{T}, \qquad s=q_{0}\in\mathbb{R}, \qquad \boldsymbol{v}=\begin{bmatrix}q_{1}, q_{2}, q_{3}\end{bmatrix}^{T}\in\mathbb{R}^{3} \]

四元数的运算

定义两个四元数:

\[ \begin{cases} \boldsymbol{q_{a}} =\begin{bmatrix}s_{a}, &\boldsymbol{a}\end{bmatrix}^{T} =s_{a}+x_{a}\mathrm{i}+y_{a}\mathrm{j}+z_{a}\mathrm{k} \qquad s_{a},x_{a},y_{a},z_{a} \in \mathbb{R}\\ \boldsymbol{q_{b}} =\begin{bmatrix}s_{b}, &\boldsymbol{b}\end{bmatrix}^{T} =s_{b}+x_{b}\mathrm{i}+y_{b}\mathrm{j}+z_{b}\mathrm{k} \qquad s_{b},x_{b},y_{b},z_{b} \in \mathbb{R} \end{cases} \]

加减

\[ \boldsymbol{q_{a}} \pm \boldsymbol{q_{b}} = \begin{bmatrix}s_{a} \pm s_{b}, &\boldsymbol{a} \pm \boldsymbol{b}\end{bmatrix}^{T} \]

乘积

\[ \begin{align*} \boldsymbol{q_{a}}\boldsymbol{q_{b}} &=\begin{bmatrix}s_{a}, &\boldsymbol{a}\end{bmatrix}^{T}\begin{bmatrix}s_{b}, &\boldsymbol{b}\end{bmatrix}^{T} \\ &=\begin{bmatrix}s_{a}s_{b}-\boldsymbol{a^{T}}\cdot\boldsymbol{b}, &s_{a}\boldsymbol{b}+s_{b}\boldsymbol{a}+\boldsymbol{a}\times\boldsymbol{b}\end{bmatrix}^{T} \end{align*} \]

乘法还可以以矩阵形式表示:

\[ \begin{align*} \boldsymbol{q_{a}}\boldsymbol{q_{b}} &=\begin{bmatrix} s_{a} &-x_{a} &-y_{a} &-z_{a} \\ x_{a} & s_{a} &-z_{a} &y_{a} \\ y_{a} &z_{a} &s_{a} &-x_{a} \\ z_{a} &-y_{a} &x_{a} &s_{a} \end{bmatrix} \begin{bmatrix}s_{b}\\ x_{b}\\ y_{b}\\ z_{b}\end{bmatrix} \end{align*} \]

由此可以导出平方的公式:

\[ \begin{align*} \boldsymbol{q}^{2} &=\begin{bmatrix}s, &\boldsymbol{v}\end{bmatrix}^{T}\begin{bmatrix}s, &\boldsymbol{v}\end{bmatrix}^{T} \\ &=\begin{bmatrix}s^{2}-\boldsymbol{v^{T}}\cdot\boldsymbol{v}, &2s\boldsymbol{v}\end{bmatrix}^{T} \end{align*} \]

模长

\[ |\boldsymbol{q}| = \sqrt{s^{2}+\boldsymbol{v^{T}}\cdot\boldsymbol{v}} \]

由此还能引出单位模长四元数的概念, 即模长为1的四元数:

\[ \boldsymbol{q'} = \frac{\boldsymbol{q}}{|\boldsymbol{q}|^{2}} \]

注意与单位四元数区分, 单位四元数是由一个零标量和一个单位向量组成的:

\[ \boldsymbol{q}=\begin{bmatrix}0, &\boldsymbol{\hat{v}}\end{bmatrix}^{T}, \qquad |\boldsymbol{\hat{v}}|=1 \]

我们还可以用角度和单位四元数来描述一个单位模长四元数(因为\(\cos{\theta}^{2}+\sin{\theta}^{2}=1\)):

\[ \boldsymbol{q}=\begin{bmatrix}\cos{\frac{\theta}{2}}, &\sin{\frac{\theta}{2}}\boldsymbol{\hat{v}}\end{bmatrix}^{T} \]

共轭

\[ \begin{align*} \boldsymbol{q^{*}} &=\begin{bmatrix}s, &\boldsymbol{-v}\end{bmatrix}^{T} \\ \boldsymbol{q}\boldsymbol{q^{*}} &= \begin{bmatrix} s^{2}+\boldsymbol{v^{T}}\cdot\boldsymbol{v}, &0 \end{bmatrix}^{T}\\ \left(\boldsymbol{q_{a}}\boldsymbol{q_{b}}\right)^{*} &= \boldsymbol{q_{b}^{*}}\boldsymbol{q_{a}^{*}} \end{align*} \]

\[ \begin{align*} \boldsymbol{q}^{-1} &=\frac{\boldsymbol{q^{*}}}{|\boldsymbol{q}|^{2}} \\ \left(\boldsymbol{q_{a}}\boldsymbol{q_{b}}\right)^{-1} &= \boldsymbol{q_{b}^{-1}}\boldsymbol{q_{a}^{-1}} \end{align*} \]

数乘

\[ k\boldsymbol{q}=\begin{bmatrix}ks, &k\boldsymbol{v}\end{bmatrix}^{T} \]