1、四元数记法
一个四元数包含一个标量分量和3D向量分量,有两种记法:
[
w
,
v
]
[
w
,
(
x
,
y
,
z
)
]
[w,\textbf{v}]\\ [w,(x,y,z)]
[w,v][w,(x,y,z)]
2、复数的共轭(Conjugate)和模长(Magnitude)
我们有复数 p :
p
=
(
a
+
b
i
)
p = (a + bi)
p=(a+bi),其共轭表示为:$ p^*=(a-bi)$。这样我们就能更好的计算复数的模:
∣
∣
p
∣
∣
=
p
p
∗
∣
∣
a
+
b
i
∣
∣
=
(
a
+
b
i
)
(
a
−
b
i
)
=
a
2
+
b
2
||p||=\sqrt{pp^*}\\||a+bi||=\sqrt{(a+bi)(a-bi)}\\=\sqrt{a^2+b^2}
∣∣p∣∣=pp∗∣∣a+bi∣∣=(a+bi)(a−bi)=a2+b2
3、复数的乘法
对于两个复数:
z
1
=
a
+
b
i
z_1 = a + bi
z1=a+bi、
z
2
=
c
+
d
i
z_2 = c + di
z2=c+di相乘,我们可以使用分配律来计算它们的乘积:
z
1
Z
2
=
(
a
+
b
i
)
(
c
+
d
i
)
=
a
c
+
a
d
i
+
b
c
i
+
b
d
i
2
=
(
a
c
−
b
d
)
+
(
b
c
+
a
d
)
i
z_1Z_2=(a+bi)(c+di)\\ = ac + adi + bci + bdi^2\\ = (ac - bd) + (bc + ad)i
z1Z2=(a+bi)(c+di)=ac+adi+bci+bdi2=(ac−bd)+(bc+ad)i
观察能够轻易发现,复数相乘的结果其实也是一个矩阵与向量相乘的结果,也就是说:
z
1
z
2
=
(
a
c
−
b
d
)
+
(
b
c
+
a
d
)
i
=
[
a
−
b
b
a
]
[
c
d
]
z_1z_2= (ac - bd) + (bc + ad)i\\ =\begin{bmatrix} a & -b\\ b& a\\ \end{bmatrix} \begin{bmatrix} c \\d \end{bmatrix}
z1z2=(ac−bd)+(bc+ad)i=[ab−ba][cd]
这个式子中,右侧的
[
c
d
]
\begin{bmatrix}c \\d\end{bmatrix}
[cd]是用向量的形式来表示
z
2
z_2
z2,而左侧的
=
[
a
−
b
b
a
]
=\begin{bmatrix}a & -b\\ b& a\\ \end{bmatrix}
=[ab−ba]则是用来表示
z
1
z_1
z1 的,所以,“复数和复数的乘法”可以看作,一个复数对另一个复数所进行的拉升变换。也就是对复平面上的一个点进行旋转和缩放~
所以,复数相乘其实就是 旋转与缩放变换的复合 。对于一个复数
z
=
a
+
b
i
z=a+bi
z=a+bi,结合图像和它与 x 轴的角度
θ
\theta
θ ,我们就能转换成 缩放矩阵和旋转矩阵的形式
所以,我们说:对于任意一个复数
z
=
a
+
b
i
z=a+bi
z=a+bi ,任何一个复数
v
=
x
+
y
i
v=x+yi
v=x+yi 与它相乘,都会被逆时针旋转
θ
=
a
t
a
n
2
(
b
,
a
)
\theta=atan2(b,a)
θ=atan2(b,a)度,并缩放
∣
∣
z
∣
∣
=
a
2
+
b
2
||z||=\sqrt{a^2+b^2}
∣∣z∣∣=a2+b2 倍。我们可以构造得到一个等价的复数乘法来表示这样的矩阵变换了:
4、复数的极坐标型
根据欧拉公式(Euler’s Formula):
c
o
s
(
θ
)
+
i
s
i
n
(
θ
)
=
e
i
θ
cos(\theta)+i sin(\theta)=e^{i\theta}
cos(θ)+isin(θ)=eiθ。对于我们的复数就有:
所以,我们有:
5、三维坐标系的旋转
假设我们有一个经过原点的(如果旋转轴不经过原点我们可以先将旋转轴平移到原点,进行旋转,再平移回原处)旋转轴 u = ( x , y , z ) T \textbf{u}=(x,y,z)^T u=(x,y,z)T ,我们希望将一个向量 v v v,沿着这个旋转轴旋转 θ \theta θ 度,变换到 v ′ v' v′:
在轴角的表示方法中,一个旋转的定义需要使用到四个变量:旋转轴
u
⃗
\vec{u}
u 的 x,y,z 坐标,以及一个旋转角
θ
\theta
θ,也就是我们一共有四个自由度(Degree of Freedom)。这很明显是多于欧拉角的三个自由度的。实际上,任何三维中的旋转只需要三个自由度就可以定义了,为什么这里我们会多出一个自由度呢?
其实,在我们定义旋转轴
u
⃗
\vec{u}
u 的 x,y,z 坐标的同时,我们就定义了
u
⃗
\vec{u}
u 的模长(长度)。然而,通常情况下,如果我们说绕着一个向量
u
⃗
\vec{u}
u 旋转,我们其实指的是绕着ū所指的方向进行旋转。回忆一下向量的定义:向量是同时具有大小和方向的量,但是在这里它的大小(长度)并不重要。所以,这里实际上还是只有三个 自由度。
为了消除旋转轴ū模长这个多余的自由度,我们可以规定旋转轴 u ⃗ \vec{u} u 的模长为 ‖ u ⃗ ‖ = x 2 + y 2 + z 2 = 1 ‖ \vec{u}‖=\sqrt{x^2+y^2+z^2=1} ‖u‖=x2+y2+z2=1,也就是说u是一个单位向量。这样一来,空间中任意一个方向上的单位向量就唯一代表了这个方向。我们其实可以将模长规定为任意的常量,但是规定 ‖ u ⃗ ∣ ∣ = 1 ‖ \vec{u}||=1 ‖u∣∣=1能为我们之后的推导带来很多的便利,这也是数学和物理中对方向定义的惯例。
6、四元数和 轴—角 对
我们以 n 为旋转轴,旋转
θ
\theta
θ 度。对于四元数的计算:
q
=
[
c
o
s
(
θ
/
2
)
s
i
n
(
θ
/
2
)
n
]
=
[
c
o
s
(
θ
/
2
)
s
i
n
(
θ
/
2
)
n
x
s
i
n
(
θ
/
2
)
n
y
s
i
n
(
θ
/
2
)
n
z
]
\textbf{q}=[cos(\theta/2) sin(\theta/2)\textbf{n}]\\ =[cos(\theta/2) sin(\theta/2)\textbf{n}_x sin(\theta/2)\textbf{n}_y sin(\theta/2)\textbf{n}_z]
q=[cos(θ/2)sin(θ/2)n]=[cos(θ/2)sin(θ/2)nxsin(θ/2)nysin(θ/2)nz]