点的旋转(2):四元数的推导
前言
还记得上一节中我们怎么旋转一个二维向量的吗?
我们将其放入一个复平面中,通过乘子来旋转其所在的坐标系来得到结果
是的,跟2*3的例子一样,将该系下(1+0i)的位置变换至乘子r的位置,同时为了确保不会变形,我们限定乘子的模长为1(或者叫范数?随你啦),整个旋转看起来就像在圆的边上滑动。
下面让我们来看超复数:四元数,是如何推导的
推导
超复数
通过前一节,容易理解,我们旋转一个二维向量,做的工作仅仅只是把其坐标系的x轴上的1点旋转至乘子的位置
X
∗
(
A
+
B
i
)
X*(A+Bi)
X∗(A+Bi)
如果我们扩充到三维空间呢?
不过这次旋转的对象从X变成了(X*(A+Bi)),我们记
P
=
X
∗
(
A
+
B
i
)
P = X*(A+Bi)
P=X∗(A+Bi)
在前文 2* (-3)中,我们提到X轴旋转中划过的空间即是该维度(n=1维)的复空间(n+1维),是一个平面。
跟以前一样为了表示它的旋转,乘一个乘子 (C+Dj),j 垂直于平面P,如同复数定义的那样 j^2 = -1
P
∗
(
C
+
D
j
)
P*(C+Dj)
P∗(C+Dj)
带回P
(
X
∗
(
A
+
B
i
)
)
∗
(
C
+
D
j
)
(X*(A+Bi))*(C+Dj)
(X∗(A+Bi))∗(C+Dj)
化简:
X
∗
(
A
C
+
B
C
i
+
A
D
j
+
C
D
i
j
)
X*(AC+BCi + ADj +CDij)
X∗(AC+BCi+ADj+CDij)
该式子表示单个轴——X的三维旋转
记
a
=
A
C
,
b
=
B
C
,
c
=
A
D
,
d
=
C
D
a = AC,b = BC,c = AD,d = CD
a=AC,b=BC,c=AD,d=CD
同时将 i×j 记为k
k
=
i
j
k = ij
k=ij
k为同时垂直于i,j的一个轴
i,j,k此时构成一个右手系
我们得到两次乘子变换的一般形式
(
a
+
b
i
+
c
j
+
d
k
)
.
.
.
.
①
(a+bi + cj +dk) .... ①
(a+bi+cj+dk)....①
并称其为四元数
四元数是最简单的超复数
如果交换两个乘子的顺序呢?
仅需将①i,j位置互换即可,同样我们写成一般形式
(
a
+
c
i
+
b
j
+
d
j
i
)
(a+ci + bj +dji)
(a+ci+bj+dji)
因为
j
i
=
−
i
j
=
−
k
ji = -ij = -k
ji=−ij=−k
(
a
+
c
i
+
b
j
−
d
k
)
.
.
.
.
②
(a+ci + bj -dk)....②
(a+ci+bj−dk)....②
此时②已经变成和①截然不同的怪物了,可见:旋转的顺序不同对应的结果完全不同
事实上,乘法的交换律是一种极其特殊的情况
在这里你可以停下来画一个空间坐标系,将一个点旋转两次,再将两次旋转顺序颠倒看看结果
它有什么性质?
跟复数一样
i
2
=
j
2
=
k
2
=
−
1
i^2 = j^2 = k^2 = -1
i2=j2=k2=−1
同时根据向量积
i
j
=
k
ij = k
ij=k
j
k
=
i
jk = i
jk=i
k
i
=
j
ki = j
ki=j
i
k
=
−
j
ik = -j
ik=−j
k
j
=
−
i
kj = -i
kj=−i
j
i
=
−
k
ji = -k
ji=−k
i
j
k
=
k
×
k
=
k
2
=
−
1
ijk = k×k = k^2 = -1
ijk=k×k=k2=−1
至此,四元数的代数推导完毕,在后面我们将来了解四元数如何表达三维旋转。