本文最后更新于 2025年1月31日 晚上
【数学】四元数
https://github.com/Krasjet/quaternion
定义
四元数本质是一种具有三个虚数的高阶复数,四元数集英文表示为 H,对于任意四元数 q∈H,可表示为如下形式:
q=a+bi+cj+dk
其中 a,b,c,d∈R 且 i2=j2=k2=ijk=−1。
此外四元数还有几种特别的表示形式,这些主要是用于从不同的角度解释四元数,并因此简化四元数的运算。
向量形式
将四元数的实部和虚部分开表示,虚部用向量表示:
a+bi+cj+dk=[s,v]⋅
- s:实部标量,等于 a。
- v:虚部向量,三个分量分别表示 b、c、d。
特别的当 a=0 时,这种形式的四元数(即[0,v])被称为纯四元数。
该形式主要是为了简化表示和计算的过程,本质上与其相关的运算推论都是可以从一般形式的四元数运算中推出来。
矩阵形式
四元数也可以像复数一样,用四元数乘法推导出矩阵形式,不过由于四元数乘法不满足交换律,故左乘 q 和右乘 q 的矩阵是不一样的:
左乘等价矩阵
a+bi+cj+dk=abcd−bad−c−c−dab−dc−ba
右乘等价矩阵
a+bi+cj+dk=abcd−ba−dc−cda−b−d−cba
几何意义
(以下论点可从后续的表示旋转章节中得到解释)
四元数本质是向量旋转公式,即代表一种变换,使一个向量绕 u 轴旋转 θ 度。从该意义可以将四元数看成如下组成:
[cos(θ/2),sin(θ/2)∗u]⋅
运算
一般情况下等价于对应的复数运算,但要注意的是四元数的乘法不具备交换律。
为什么四元数不具备乘法交换律?
- 利用 ijk 等式推导可以发现交换虚数顺序后,值不同。
- 复数的几何意义是旋转,但复数是二维旋转,旋转方向始终一致,因此角度可以累加,但四元数的旋转方向可以不同,顺序不同后即使累计角度一致,最终的旋转结果还是不同的。
与向量运算
将向量转换为纯四元数和再运算即可。(若后续出现为未在头部添加箭头的向量,则表示是该向量对应的四元数)
Graßmann 积
四元数乘法结果的向量表示形式(写成一般式太长了,于是将一般式中的很多多项式用诸如向量点乘叉乘的运算代替表示后就可以得到如下公式):
[a,v]∗[e,u]=[ae−v⋅u,au+ev+v×u]
共轭
将四元数虚数部分符号全部取反,即:
[s,v]∗=[s,−v]
乘以共轭
qq∗=[s2+v∗v,0]=∣q∣2
共轭运算满足交换律,即 q∗q=qq∗。
逆
q−1=∣q∣2q∗
特别的,当 ∣q∣=1 时(用四元数表示的旋转变换,其逆变换求解竟如此简单):
q−1=q∗
推导过程如下:
qq−1q∗qq−1∣q∣2q−1q−1=1(逆运算的定义)=q∗=q∗=∣q∣2q∗
乘法特例
一些关于四元数乘法的特殊性质,这可用于推导四元数表示旋转公式。
平方与旋转的关系
若 p=[cos(θ),sin(θ)u],其中 u 为单位向量,则:
pp=[cos(2θ),sin(2θ)u]
证明过程:
pp=[cos2(θ)−sin(θ)u⋅sin(θ)u,2cos(θ)sin(θ)u+sin(θ)u×sin(θ)u]=[cos2(θ)−sin2(θ)u⋅u,2cos(θ)sin(θ)u](向量平行,叉乘为0)=[cos2(θ)−sin2(θ),2cos(θ)sin(θ)u](自点乘等于模的平方,单位向量模为1)=[cos(2θ),sin(2θ)u](两角和差公式)
平行四元数的乘法交换律
若 q=[a,bu],且有 v∥ 平行于 u,则:
qv∥=v∥q
证明过程:
qu∗∥[a,bu][0,v∥][−b(u⋅v∥),av∥+b(u×v∥)][−b(u⋅v∥),av∥][−b(u⋅v∥),av∥]=u∗∥q=[0,v_∥][a,bu]=[−b(v∥⋅u),av∥+b(v∥×u)]=[−b(v∥⋅u),av∥](平行的向量叉乘为0)=[−b(u⋅v∥),av∥](点乘满足交换律)
正交四元数的乘法等价变换
若 q=[a,bu],且有 v⊥ 正交于 u,则:
qv⊥=v⊥q∗
证明过程:
qv∗⊥[a,bu][0,v⊥][−b(u⋅v⊥),av⊥+b(u×v⊥)][0,av⊥+b(u×v⊥)][0,av⊥+b(u×v⊥)]=v∗⊥q∗=[0,v_⊥][a,−bu]=[b(u⋅v⊥),av⊥−b(v⊥×u)]=[0,av⊥−b(v⊥×u)](正交的向量点乘为0)=[0,av⊥+b(u×v⊥)](叉乘满足反交换律)
表示旋转
根据四元数的集合意义,四元数可以看成一种旋转变换,就类似于矩阵一样,其推理过程如下:
表示正交向量旋转变换
-
表示:q=[cos(θ),sin(θ)n]
- θ:旋转角度
- n:旋转轴
-
运用:v⊥′=qv⊥
推导过程:
由向量章节的旋转公式可知,旋转与法线正交的向量的公式如下:
v⊥′=cos(θ)v⊥+sin(θ)(n×v⊥)
利用纯四元数,可以很轻松的将上述向量替换成四元数表示:
- v⊥=[0,v⊥]⋅
- n=[0,n]⋅
且因为 v⊥ 和 n 向量正交且都是纯四元数,故:
v⊥n=[0,n×v⊥]
于是旋转正交向量的公式可以完美用四元数实现:
v⊥′v⊥′v⊥′=cos(θ)v⊥+sin(θ)nv⊥=(cos(θ)+sin(θ)n)v⊥=qv⊥
其中 q=cos(θ)+sin(θ)n,该四元数表示的便是旋转变换。
表示任意向量旋转变换
-
表示:p=[cos(2θ),sin(2θ)n]
- θ:旋转角度
- n:旋转轴
-
运用:v′=pvp∗
推导过程:
由“向量章节的旋转公式”和“四元数的正交向量旋转”可知,旋转任意向量的公式如下:
v′=v∥+qv⊥=pp−1v∥+ppv⊥(设 pp=q)=pp∗v∥+pv⊥p∗(单位四元数的逆与共轭相等,正交四元数的等价变换)=p(v∥p∗+v⊥p∗)(平行四元数乘法满足交换律)=p(v∥+v⊥)p∗=pvp∗
由于 q=[cos(θ),sin(θ)n],pp=q,故 p=[cos(θ/2),sin(θ/2)n]
转换为旋转矩阵
有了对任意向量旋转的四元数表示后,通过将四元数替换为矩阵(注意左乘右乘的区别),再将矩阵相乘化简,就可以得到四元数旋转的矩阵形式:
若有四元数旋转变换 q=a+bi+cj+dk,则该旋转变换的矩阵形式如下:
v′=1−2c2−2d22bc+2ad2bd−2ac2bc−2ad1−2b2−2d22ab+2cd2ac+2bd2cd−2ad1−2b2−2c2v