4、四元数的推导
对于轴
u
⃗
\vec{u}
u 旋转,我们从
v
⃗
\vec{v}
v 旋转到
v
′
⃗
\vec{v'}
v′,将
v
⃗
\vec{v}
v 分解为平行于旋转轴
u
\textbf{u}
u 以及正交于
u
\textbf{u}
u 的两个分量,即:
v
=
v
∣
∣
+
v
⊥
v = v_{||} + v_\perp
v=v∣∣+v⊥
旋转后的分量:
v
′
=
v
∣
∣
′
+
v
⊥
′
v' = v'_{||} + v'_\perp
v′=v∣∣′+v⊥′
如图所示,我们可以看到
v
∣
∣
′
v'_{||}
v∣∣′ 其实就是
v
⃗
\vec{v}
v 在
u
⃗
\vec{u}
u 上的正交投影(Orthogonal Projection)。我们易得:
v
∥
=
proj
u
(
v
)
=
u
⋅
v
u
⋅
u
u
=
u
⋅
v
∥
u
∥
2
u
(
∥
u
∥
2
=
u
⋅
u
)
=
(
u
⋅
v
)
u
.
(
∥
u
∥
=
1
)
\begin{array}{rlr} \mathbf{v}_{\|} & =\operatorname{proj}_{\mathbf{u}}(\mathbf{v}) & \\ & =\frac{\mathbf{u} \cdot \mathbf{v}}{\mathbf{u} \cdot \mathbf{u}} \mathbf{u} & \\ & =\frac{\mathbf{u} \cdot \mathbf{v}}{\|\mathbf{u}\|^{2}} \mathbf{u} & \left(\|\mathbf{u}\|^{2}=\mathbf{u} \cdot \mathbf{u}\right) \\ & =(\mathbf{u} \cdot \mathbf{v}) \mathbf{u} . & (\|\mathbf{u}\|=1) \end{array}
v∥=proju(v)=u⋅uu⋅vu=∥u∥2u⋅vu=(u⋅v)u.(∥u∥2=u⋅u)(∥u∥=1)
又因为
v
=
v
∣
∣
+
v
⊥
\mathbf{v}=\mathbf{v}_{||}+\mathbf{v}_{\perp}
v=v∣∣+v⊥,我们可以得到:
v
⊥
=
v
−
v
∣
∣
=
v
−
(
u
⋅
v
)
u
)
\mathbf{v}_\perp=\mathbf{v}-\mathbf{v}_{||}\\ =\mathbf{v}-(\mathbf{u} \cdot \mathbf{v})\mathbf{u})
v⊥=v−v∣∣=v−(u⋅v)u)
至此,我们知道了
v
∣
∣
\mathbf{v}_{||}
v∣∣ 和
v
⊥
\mathbf{v}_\perp
v⊥ 的表达式了。我们对此进行旋转:
v
∣
∣
\mathbf{v}_{||}
v∣∣ 不旋转,而
v
⊥
\mathbf{v}_\perp
v⊥ 我们从俯视图看,通过
u
\mathbf{u}
u 和
v
⊥
\mathbf{v}_\perp
v⊥ 能够计算得到一个辅助计算的向量
w
\mathbf{w}
w。将
v
′
⊥
\mathbf{v'}_\perp
v′⊥ 投影到
w
\mathbf{w}
w 和
v
⊥
\mathbf{v}_\perp
v⊥上,易得:
v
⊥
′
=
v
v
′
+
v
w
′
=
cos
(
θ
)
v
⊥
+
sin
(
θ
)
w
=
cos
(
θ
)
v
⊥
+
sin
(
θ
)
(
u
×
v
⊥
)
\begin{aligned} \mathbf{v}_{\perp}^{\prime} &=\mathbf{v}_{v}^{\prime}+\mathbf{v}_{w}^{\prime} \\ &=\cos (\theta) \mathbf{v}_{\perp}+\sin (\theta) \mathbf{w} \\ &=\cos (\theta) \mathbf{v}_{\perp}+\sin (\theta)\left(\mathbf{u} \times \mathbf{v}_{\perp}\right) \end{aligned}
v⊥′=vv′+vw′=cos(θ)v⊥+sin(θ)w=cos(θ)v⊥+sin(θ)(u×v⊥)
又有
将上面的两个结果组合就可以获得:
v
′
=
v
∥
′
+
v
⊥
′
=
v
∥
+
cos
(
θ
)
v
⊥
+
sin
(
θ
)
(
u
×
v
⊥
)
.
=
(
u
⋅
v
)
u
+
cos
(
θ
)
(
v
−
(
u
⋅
v
)
u
)
+
sin
(
θ
)
(
u
×
v
)
=
cos
(
θ
)
v
+
(
1
−
cos
(
θ
)
)
(
u
⋅
v
)
u
+
sin
(
θ
)
(
u
×
v
)
.
\begin{aligned} \mathbf{v}^{\prime} &=\mathbf{v}_{\|}^{\prime}+\mathbf{v}_{\perp}^{\prime} \\ &=\mathbf{v}_{\|}+\cos (\theta) \mathbf{v}_{\perp}+\sin (\theta)\left(\mathbf{u} \times \mathbf{v}_{\perp}\right) . \\ &=(\mathbf{u} \cdot \mathbf{v}) \mathbf{u}+\cos (\theta)(\mathbf{v}-(\mathbf{u} \cdot \mathbf{v}) \mathbf{u})+\sin (\theta)(\mathbf{u} \times \mathbf{v}) \\ &=\cos (\theta) \mathbf{v}+(1-\cos (\theta))(\mathbf{u} \cdot \mathbf{v}) \mathbf{u}+\sin (\theta)(\mathbf{u} \times \mathbf{v}) . \end{aligned}
v′=v∥′+v⊥′=v∥+cos(θ)v⊥+sin(θ)(u×v⊥).=(u⋅v)u+cos(θ)(v−(u⋅v)u)+sin(θ)(u×v)=cos(θ)v+(1−cos(θ))(u⋅v)u+sin(θ)(u×v).
这样,我们就得到了一般形式的旋转公式:
5、四元数
四元数:
q
=
a
+
b
i
+
c
j
+
d
k
,
(
a
,
b
,
c
,
d
∈
R
)
q=a+bi+cj+dk, (a,b,c,d\in\mathbb{R})
q=a+bi+cj+dk,(a,b,c,d∈R) ,其中
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
i^2=j^2=k^2=ijk=-1
i2=j2=k2=ijk=−1 。我们通常把四元数的 实部 和 虚部 分开,并用一个三维向量来表示虚部,记作:
q
=
[
s
,
v
]
.
(
v
=
[
x
y
z
]
,
s
,
x
,
y
,
z
∈
R
)
q=[s,\mathbf{v}]. (\mathbf{v}=\begin{bmatrix}x \\y \\z \end{bmatrix}, s,x,y,z \in \mathbb{R})
q=[s,v].(v=⎣⎡xyz⎦⎤,s,x,y,z∈R)
①模长:
∣
∣
q
∣
∣
=
a
2
+
b
2
+
c
2
+
d
2
||q||=\sqrt{a^2+b^2+c^2+d^2}
∣∣q∣∣=a2+b2+c2+d2
用标量和向量的方式表示的话,则为:
∣
∣
q
∣
∣
=
s
2
+
∣
∣
v
∣
∣
2
=
s
2
+
v
⋅
v
||q||=\sqrt{s^2+||\mathbf{v}||^2}\\ =\sqrt{s^2+v \cdot v}
∣∣q∣∣=s2+∣∣v∣∣2=s2+v⋅v
显然,四元数的模长很难用几何的方法来进行理解,因为它代表的是一个四维的长度。但是,和高维向量的模长一样,这只是类比复数模长进行衍生定义的结果,你只需要将它理解为一个定义就可以了。
②四元数基本运算
其实就和普通的向量加法、减法、标量乘法一样了,没有区别。
③BraBmann积
④共轭和逆
我们规定:
q
q
−
1
=
q
−
1
q
=
1
(
q
≠
1
)
qq^{-1}=q^{-1}q=1 (q\ne 1)
qq−1=q−1q=1(q=1),其中
q
−
1
q^{-1}
q−1 为
q
q
q 的逆。
显然,要在无数的四元数中寻找一个满足
q
q
q的逆 是非常困难的,但是实际上我们可以使用四元数共轭的一些性质来获得
q
−
1
q^{-1}
q−1。
我们定义,一个四元数
q
=
a
+
b
i
+
c
i
+
d
k
q=a+bi+ci+dk
q=a+bi+ci+dk 的共轭为
q
∗
=
a
−
b
i
−
c
j
−
d
k
q^*=a-bi-cj-dk
q∗=a−bi−cj−dk
。如果用标量向量有序对的形式来定义的话,
q
=
[
s
,
v
]
q=[s,\mathbf{v}]
q=[s,v]的共轭为
g
∗
=
[
s
,
−
v
]
g^*=[s,-\mathbf{v}]
g∗=[s,−v] 。
共轭四元数的一个非常有用的性质就是:
q
q
∗
=
[
s
,
v
]
⋅
[
s
,
−
v
]
=
[
s
2
−
v
⋅
(
−
v
)
,
s
(
−
v
)
+
s
v
+
v
×
(
−
v
)
]
=
[
s
2
+
v
⋅
v
,
0
]
(
v
平
行
于
−
v
,
所
以
v
×
(
−
v
)
=
0
)
=
s
2
+
x
2
+
y
2
+
z
2
=
∣
∣
q
∣
∣
2
qq^*=[s, \mathbf{v} ]\cdot [s, -\mathbf{v}]\\ =[s^2-\mathbf{v} \cdot (-\mathbf{v}), s(-\mathbf{v})+s\mathbf{v}+\mathbf{v} \times (-\mathbf{v})]\\ =[s^2+\mathbf{v} \cdot \mathbf{v},0]\\ (\mathbf{v}平行于-\mathbf{v},所以\mathbf{v}\times (-\mathbf{v})=0)\\ =s^2+x^2+y^2+z^2\\ =||q||^2
qq∗=[s,v]⋅[s,−v]=[s2−v⋅(−v),s(−v)+sv+v×(−v)]=[s2+v⋅v,0](v平行于−v,所以v×(−v)=0)=s2+x2+y2+z2=∣∣q∣∣2
根据四元数逆的定义,有:
q
q
−
1
=
1
q
∗
q
q
−
1
=
q
∗
(
q
∗
q
)
q
−
1
=
q
∗
∣
∣
q
∣
∣
2
⋅
q
−
1
=
q
∗
q
−
1
=
q
∗
∣
∣
q
∣
∣
2
qq^-1=1 \\ q^*qq^-1=q^* \\ \left( q^*q \right) q^-1=q^* \\ ||q||^2\cdot q^-1=q^* \\ q^-1=\frac{q^*}{||q||^2}
qq−1=1q∗qq−1=q∗(q∗q)q−1=q∗∣∣q∣∣2⋅q−1=q∗q−1=∣∣q∣∣2q∗
最终,如果,
∣
∣
q
∣
∣
=
1
||q||=1
∣∣q∣∣=1 ,那么 q 就是一个单位四元数(Unit Quaternion),那么:
q
−
1
=
q
∗
1
2
=
q
∗
q^-1=\frac{q^*}{1^2}=q^*
q−1=12q∗=q∗
⑤纯四元数
如果一个四元数能写成这样的形式: $ v= [0, \mathbf{v}]$,那么我们称之为一个纯四元数(Pure Quaternion),也就是说,它的实部为 0 。对于两个纯四元数
v
=
[
0
,
v
]
,
u
=
[
0
,
u
]
v=[0,\mathbf{v}], u=[0,\mathbf{u}]
v=[0,v],u=[0,u],则有:
v
u
=
[
0
−
v
⋅
u
,
0
+
v
×
u
]
=
[
−
v
⋅
u
,
v
×
u
]
vu=\left[ 0-\mathbf{v}\cdot \mathbf{u},0+\mathbf{v}\times \,\,\mathbf{u} \right] \\ =\left[ -\mathbf{v}\cdot \,\,\mathbf{u},\mathbf{v}\times \,\,\mathbf{u} \right]
vu=[0−v⋅u,0+v×u]=[−v⋅u,v×u]
⑥3D旋转公式(四元数型,正交情况)
我们用 向量
v
\mathbf{v}
v 沿着一个用单位向量定义的旋转轴
u
\mathbf{u}
u 旋转
θ
\theta
θ 度,成为
v
′
\mathbf{v}'
v′ ,我们依然按照平行和垂直的方向拆解这个向量。我们将这些向量定义为纯四元数:
v
=
[
0
,
v
]
v
′
=
[
0
,
v
′
]
v
⊥
=
[
0
,
v
⊥
]
v
⊥
′
=
[
0
,
v
⊥
′
]
v
∣
∣
=
[
0
,
v
∣
∣
]
v
∣
∣
′
=
[
0
,
v
∣
∣
′
]
u
=
[
0
,
u
]
v=\left[ 0,\mathbf{v} \right] \,\, v'=\left[ 0,\mathbf{v}' \right] \\ v_{\bot}=\left[ 0,\mathbf{v}_{\bot} \right] \,\, v'_{\bot}=\left[ 0,\mathbf{v}'_{\bot} \right] \\ v_{||}=\left[ 0,\mathbf{v}_{||} \right] \,\, v'_{||}=\left[ 0,\mathbf{v}'_{||} \right] \,\, \\ u=\left[ 0,\mathbf{u} \right]
v=[0,v]v′=[0,v′]v⊥=[0,v⊥]v⊥′=[0,v⊥′]v∣∣=[0,v∣∣]v∣∣′=[0,v∣∣′]u=[0,u]
能得到:
通过这两个分量,我们可以获得一般情况下
v
′
v'
v′ 的结果:
v
′
=
v
∣
∣
′
+
v
⊥
′
=
v
∣
∣
+
q
v
⊥
(
其
中
q
=
c
o
s
(
θ
,
s
i
n
(
θ
)
u
)
v'=v'_{||}+v'_\perp\\ =v_{||}+qv_\perp\\ (其中q=cos(\theta, sin(\theta)\mathbf{u})
v′=v∣∣′+v⊥′=v∣∣+qv⊥(其中q=cos(θ,sin(θ)u)
5、3D旋转的矩阵形式
在实际的应用中,我们可能会需要将旋转与平移和缩放进行复合,所以需要用到四元数的旋转的矩阵形式。比如,我们熟悉的结论:
左乘一个四元数
q
=
a
+
b
i
+
c
j
+
d
k
q =a+bi+cj+dk
q=a+bi+cj+dk 等同于下面这个矩阵:
[
a
−
b
−
c
−
d
b
a
−
d
c
c
d
a
−
b
d
−
c
b
a
]
\left[ \begin{matrix} a& -b& -c& -d\\ b& a& -d& c\\ c& d& a& -b\\ d& -c& b& a\\ \end{matrix} \right]
⎣⎢⎢⎡abcd−bad−c−c−dab−dc−ba⎦⎥⎥⎤
右乘
q
q
q ,等同于这个矩阵:
[
a
−
b
−
c
−
d
b
a
d
−
c
c
−
d
a
b
d
c
−
b
a
]
\left[ \begin{matrix} a& -b& -c& -d\\ b& a& d& -c\\ c& -d& a& b\\ d& c& -b& a\\ \end{matrix} \right]
⎣⎢⎢⎡abcd−ba−dc−cda−b−d−cba⎦⎥⎥⎤
那么我们的结论可以写成:
q
v
q
∗
=
L
(
q
)
R
(
q
−
1
)
v
=
L
(
q
)
R
(
q
∗
)
v
=
[
a
−
b
−
c
−
d
b
a
−
d
c
c
d
a
−
b
d
−
c
b
a
]
[
a
b
c
d
−
b
a
−
d
c
−
c
d
a
−
b
−
d
−
c
b
a
]
qvq^*=L(q)R(q^{-1})v \\ =L(q)R(q^*)v \\ =\left[ \begin{matrix} a& -b& -c& -d\\ b& a& -d& c\\ c& d& a& -b\\ d& -c& b& a\\ \end{matrix} \right] \left[ \begin{matrix} a& b& c& d\\ -b& a& -d& c\\ -c& d& a& -b\\ -d& -c& b& a\\ \end{matrix} \right]
qvq∗=L(q)R(q−1)v=L(q)R(q∗)v=⎣⎢⎢⎡abcd−bad−c−c−dab−dc−ba⎦⎥⎥⎤⎣⎢⎢⎡a−b−c−dbad−cc−dabdc−ba⎦⎥⎥⎤
又因为:
a
2
+
b
w
+
c
2
+
d
2
=
1
a^2+b^w+c^2+d^2=1
a2+bw+c2+d2=1,这个式子能化简为:
q
v
q
∗
=
[
1
0
0
0
0
1
−
2
c
2
−
2
d
2
2
b
s
−
2
a
d
2
a
c
+
2
b
d
0
2
b
c
−
2
a
d
1
−
2
b
2
−
2
d
2
2
c
d
−
2
a
b
0
2
b
d
−
2
a
c
2
a
b
+
2
c
d
1
−
2
b
2
−
2
c
2
]
qvq^*=\left[ \begin{matrix} 1& 0& 0& 0\\ 0& 1-2c^2-2d^2& 2bs-2ad& 2ac+2bd\\ 0& 2bc-2ad& 1-2b^2-2d^2& 2cd-2ab\\ 0& 2bd-2ac& 2ab+2cd& 1-2b^2-2c^2\\ \end{matrix} \right]
qvq∗=⎣⎢⎢⎡100001−2c2−2d22bc−2ad2bd−2ac02bs−2ad1−2b2−2d22ab+2cd02ac+2bd2cd−2ab1−2b2−2c2⎦⎥⎥⎤
所以,我们有结论:
(对于目前的状态,四元数学习到这里已经十分够用了暂时不拓展了)