《3D游戏与计算机图形学中的数学方法》读书笔记--四元数
定义
四元数是对复数集合的拓展,可以看做四维向量空间,其中的元素
q
q
q可表示为:
(1)
q
=
<
w
,
x
,
y
,
z
>
=
w
+
x
i
+
y
j
+
z
k
q=<w,x,y,z>=w+xi+yj+zk\tag{1}
q=<w,x,y,z>=w+xi+yj+zk(1)
通常,四元数被写作
q
=
s
+
v
⃗
q=s+\vec v
q=s+v,其中,
s
s
s表示
w
w
w标量部分,
v
⃗
\vec v
v是
q
q
q的向量部分。
运算规则
四元数乘法满足分配率,虚部
i
,
j
,
k
i,j,k
i,j,k满足以下规则:
(2)
i
2
+
j
2
+
k
2
=
−
1
i^2+j^2+k^2=-1\tag{2}
i2+j2+k2=−1(2)
(3)
i
j
=
−
j
i
=
k
ij=-ji=k\tag{3}
ij=−ji=k(3)
(4)
j
k
=
−
k
j
=
i
jk=-kj=i\tag{4}
jk=−kj=i(4)
(5)
k
i
=
−
i
k
=
j
ki=-ik=j\tag{5}
ki=−ik=j(5)
四元数乘法不满足交换律,所以乘法顺序很重要。
假设两个四元数
q
1
=
w
1
+
x
1
i
+
y
1
j
+
z
1
k
q_1=w_1+x_1i+y_1j+z_1k
q1=w1+x1i+y1j+z1k和
q
2
=
w
2
+
x
2
i
+
y
2
j
+
z
2
k
q_2=w_2+x_2i+y_2j+z_2k
q2=w2+x2i+y2j+z2k则:
(6)
q
1
q
2
=
(
w
1
w
2
−
x
1
x
2
−
y
1
y
2
−
z
1
z
2
)
+
(
w
1
x
2
+
x
1
w
2
+
y
1
z
2
−
z
1
y
2
)
i
+
(
w
1
y
2
−
x
1
z
2
+
y
1
w
2
+
z
1
x
2
)
j
+
(
w
1
z
2
+
x
1
y
2
−
y
1
x
2
+
z
1
w
2
)
k
\begin{aligned} q_1q_2=&(w_1w_2-x_1x_2-y_1y_2-z_1z_2)\\ &+(w_1x_2+x_1w_2+y_1z_2-z_1y_2)i\\ &+(w_1y_2-x_1z_2+y_1w_2+z_1x_2)j\\ &+(w_1z_2+x_1y_2-y_1x_2+z_1w_2)k \end{aligned} \tag{6}
q1q2=(w1w2−x1x2−y1y2−z1z2)+(w1x2+x1w2+y1z2−z1y2)i+(w1y2−x1z2+y1w2+z1x2)j+(w1z2+x1y2−y1x2+z1w2)k(6)
当四元数表示为标量-矢量形式的时候:
(7)
q
1
q
2
=
s
1
s
2
−
v
⃗
1
⋅
v
⃗
2
+
s
1
v
⃗
2
+
s
2
v
⃗
1
+
v
⃗
1
×
v
⃗
2
q_1q_2=s_1s_2-\vec v_1\cdot \vec v_2+s_1\vec v_2+s_2\vec v_1+\vec v_1\times \vec v_2\tag{7}
q1q2=s1s2−v1⋅v2+s1v2+s2v1+v1×v2(7)
四元数的共轭表示为
q
ˉ
\bar{q}
qˉ具有如下性质:
(8)
q
q
ˉ
=
q
ˉ
q
=
q
⋅
q
=
∣
∣
q
∣
∣
2
=
q
2
q\bar{q}=\bar{q}q=q\cdot q=||q||^2=q^2\tag{8}
qqˉ=qˉq=q⋅q=∣∣q∣∣2=q2(8)
非零四元数的倒数表示为:
q
−
1
q^{-1}
q−1,
(9)
q
−
1
=
q
ˉ
q
2
q^{-1}=\frac{\bar{q}}{q^2}\tag{9}
q−1=q2qˉ(9)
四元数旋转
对于三维空间的旋转变换
ϕ
\phi
ϕ而言,旋转前后要保证长度、角度和偏手性不变,即:
(长度不变)
∣
∣
ϕ
(
P
)
∣
∣
=
∣
∣
P
∣
∣
||\phi (P)||=||P||\tag{长度不变}
∣∣ϕ(P)∣∣=∣∣P∣∣(长度不变)
(角度不变)
ϕ
(
P
1
)
⋅
ϕ
(
P
2
)
=
P
1
⋅
P
2
\phi (P_1)\cdot \phi(P_2)=P_1\cdot P_2\tag{角度不变}
ϕ(P1)⋅ϕ(P2)=P1⋅P2(角度不变)
(偏手性不变)
ϕ
(
P
1
)
×
ϕ
(
P
2
)
=
ϕ
(
P
1
×
P
2
)
\phi(P_1)\times \phi(P_2)=\phi (P_1\times P_2)\tag{偏手性不变}
ϕ(P1)×ϕ(P2)=ϕ(P1×P2)(偏手性不变)
如果同时满足角度不变和偏手性不变,则可得到同态函数:
(10)
ϕ
(
P
1
)
ϕ
(
P
2
)
=
ϕ
(
P
1
P
2
)
\phi(P_1)\phi(P_2)=\phi(P_1P_2)\tag{10}
ϕ(P1)ϕ(P2)=ϕ(P1P2)(10)
同态函数满足以下条件:
(11)
ϕ
q
(
P
)
=
q
P
q
−
1
\phi_q(P)=qPq^{-1}\tag{11}
ϕq(P)=qPq−1(11)
那么就表示旋转变换函数的集合。
经过计算,得出绕轴
A
A
A旋转
θ
\theta
θ角对应的单位四元数
q
q
q为:
(12)
q
=
c
o
s
θ
2
+
A
s
i
n
θ
2
q=cos{\frac{\theta}{2}}+Asin\frac{\theta}{2}\tag{12}
q=cos2θ+Asin2θ(12)
为什么要使用四元数?
对于多次旋转变换而言,两个旋转矩阵相乘要计算27次乘-加运算,而对于四元数而言,只需要16次乘-加运算。