Quaternions for Computer Graphics(计算机图形中的四元数)翻译——第五章,四元数
第五章 四元数
5.1介绍
威廉罗恩哈密尔顿先生被公认为是四元数代数的发明者,这是第一个被发现的非交换代数。可以想象他解决他一直在思考十年的一个问题的喜悦!
这项发明为操纵矢量提供了第一个数学框架,尽管这一理论将由美国理论物理学家、化学家和数学家约西亚·威拉德·吉布斯(1839 - 1903)加以完善。虽然哈密顿通过代数发明了四元数,他发现四元数很明显有几何潜力,他立即开始探索他们的矢量和旋转特性。
不认识密哈顿的法国社会改革家,和聪明的业余数学家BenjaminOlinde Rodrigues(1795–1851),已在1840年发表文章描述如何用由一个单一的第三旋转轴表示两个不同轴的连续的旋转。更重要的是,Rodrigues使用一个标量和三维轴表达了自己的解决方案,它先于汉弥尔顿的方法使用一个标量和矢量,早了三年!
5.2历史
四元数的由来,感兴趣的自己去看吧
5.3四元数的定义
让我们从两个四元数qaqb来开始吧:
qa = sa + xai + yaj +zak
qb = sb + xbi + ybj +zbk
满足以下规则
i2 = j2 = k2 = ijk = −1
ij = k, jk = i, ki = j
ji = −k, kj = −i, ik = −j.
四元数也可以被表示为有序对
qa = [sa, a]
qb = [sb, b] sa,sb∈R,a, b∈R3.
我使用了方括号作为有序对定义的一部分,圆括号经常用于在四元数一般表达式中。
四元数的乘积qa qb可以表示为:
qaqb = [sa, a][sb, b]= (sa + xai + yaj + zak)(sb+ xbi + ybj + zbk)
= (sasb − xaxb − yayb− zazb)
+ (saxb + sbxa + yazb− ybza)i
+ (sayb + sbya + zaxb− zbxa)j
+ (sazb + sbza + xayb− xbya)k.
这同时也证明四元数关于乘法是封闭的
上式中,哈密顿用虚数ijk代替笛卡尔单位矢量ijk,再把它们转化为矢量形式。这种方法有一个问题是这些矢量保留了虚根,Simon Altmann的建议是用有序对代替虚数
i = [0, i] j =[0, j] k = [0, k]
我们称它们为四元数单元
用四元数单元定义四元数比用单位笛卡尔矢量定义四元数更为精确,这说明它是以和虚数毫无关系的矢量存在的。
让我们用四元数单元和[1,0]在表示一下四元数乘法:
qaqb = [sa, a][sb, b]= (sasb − xaxb − yayb− zazb) [1,0]
+ (saxb + sbxa + yazb− ybza) [0,i]
+ (sayb + sbya + zaxb− zbxa) [0,j]
+ (sazb + sbza + xayb− xbya) [0,k]
展开后是
[sa, a][sb, b] = [sasb− xaxb − yayb − zazb,0]
+ [0, (saxb + sbxa + yazb− ybza)i]
+ [0, (sayb + sbya + zaxb− zbxa)j]
+ [0, (sazb + sbza + xayb− xbya)k]
他还揭示了一些隐藏的矢量
[sa, a][sb, b] = [sasb− xaxb − yayb − zazb,
sa(xbi +ybj +zbk)+ sb(xai +yaj +zak)
+ (yazb − ybza)i+(zaxb − zbxa)j+(xayb − xbya)k]
如果我们令
a=xai +yaj +zak
b=xbi +ybj +zbk
就会得到
[sa,a][sb, b] = [sasb − a · b,sab + sba+ a × b]
这也是四元数的乘法定义。
从现在起,我们不必担心密哈顿的规则,因为它们嵌入在上式中。此外,我们的向量和虚数没有关联了。
5.3.1四元数单元The Quaternion Units
利用前面的定义我们对四元数单元平方
i = [0, i]
i2 = [0, i][0,i]
= [i · i, i× i]
= [−1, 0]
结果是等于-1的实四元数。对[0, j] [0, k]使用相同的计算会的得到相同的性质。
现在让我们来计算ij,jk和ki
易得ij=[0, k]
jk=[0, i]
ki=[0, j]
最后计算ijk可得
ijk=[-1,0]=-1
因此有序对符号保留了哈密顿的规则。
5.3.2四元数相乘的实例
带入具体数字计算,略
5.4代数定义
四元数是有序对
q = [s, v] s∈R, v∈R3.
如果我们把矢量v展开表达,有
q = [s,xi + yj + zk] s,x,y,z∈R.
5.5四元数加减法
四元数加减法遵从以下规则
qa = [sa, a]
qb = [sb, b]
qa ± qb = [sa ± sb, a±b].
5.6实四元数
实四元数矢量部为零
q = [s, 0]
实四元数相乘为
qaqb = [sa, 0][sb,0]= [sasb,0]
可以得到另一个实四元数
5.7四元数的数乘
四元数数乘遵循以下规则
q = [s, v]
λq =λ[s, v] λ∈R
= [λs,λv].
5.8纯四元数
哈密顿把没有实部的四元数定义为纯四元数
q = xi + yj + zk
但这是错误的,因为他直接实部删去了。
正确的纯四元数定义为
q = [0, v].
而两个纯四元数的乘积为
qa = [0, a]
qb = [0, b]
qaqb = [0, a][0, b]
= [−a · b, a× b]
不再是纯四元数,实部变成了原纯四元数矢量部的点积
5.9单位四元数
对于一个矢量v可以写为
v=vv(原文中用’^’表示单位矢量,在此为了简便用下划线代替)
其中v=|v|,|v|=1
则对于纯四元数有
q = [0, v]
= [0,vv]
= v[0, v]
称[0, v]为单位四元数,记为q,则
q = vq
单位四元数的平方为
q2 = [0, v][0,v]
= [−v · v, v ×v]
= [−1, 0]
= −1
5.10四元数的加法形式
我们知道四元数是由实部和矢量部组成的,所以我们把四元数表达为
q = [s, v]= [s, 0] + [0, v]
5.11四元数的二元形式
如果把四元数的加法形式用单位四元数表示可得
q = [s, v]
= [s, 0] + [0, v]
= [s, 0] + v[0, v]
= s + vq.
5.12共轭
已知四元数为
q = [s, v]
则其共轭定义为
q*= [s, -v]
他们之间相乘为
q q* =[s,v][s,−v]
= [s2 − v · (−v),−sv + sv + v × (−v)]
= [s2 + v · v, 0]
= [s2 + v2, 0].
并且q q*=q*q ,(qaqb)∗ = qb∗qa∗.
5.13四元数的模
和复数相似,四元数q = [s, v]的模可以定义为
|q| = √(s2 + v2),其中v = |v|
5.14标准化的四元数
拥有单位模的四元数称为标准化的四元数,例如四元数q = [s, v]通过除以|q|被标准化,
q’=q/√(s2 + v2)
我们必须要区分开标准化的四元数和单位四元数的区别,单位四元数是实部为0,矢量部为单位矢量的四元数,标准化的四元数是模为1的四元数。
我们也可用以下形式表示单位模的四元数
q = [cos1/2θ, sin1/2θv]
5.15四元数相乘
上面讲过了
5.15.1纯四元数相乘
讲过了
5.15.2两个模为一的四元数相乘
有两个四元数
qa = [sa, a]
qb = [sb, b] |qa| = |qb| = 1
相乘得
[sc, c] = [sa,a][sb,b]
= [sasb − a·b,sab + sba+ a×b].
因此
sc = sasb – abcosθ
c = sabb + sbaa + ab sinθ(a×b).
矢量c的几何表示
而且两个模为一的四元数相乘得到的四元数模还是1.
5.15.3四元数的平方
四元数q = [s, v]的平方为
q2 = [s, v][s, v]
= [s2 − v · v, 2sv +v ×v]
= [s2 − v · v, 2sv]
= [s2 − x2 − y2 − z2,2s(xi + yj + zk)]
5.15.4四元数乘积的模
|qaqb|2 = |qa|2|qb|2
|qaqb| = |qa||qb|
5.16逆四元数
根据逆的定义应该满足:
qq−1 = [1, 0]= 1
两边同乘以共轭q*
易得q−1 = q∗/|q|2.
如果四元数模为一则
q−1 = q∗
四元数的逆还有如下性质
(qaqb)−1 = qb−1qa−1
qq−1 = q−1q=1
5.17矩阵
矩阵太难打了,直接看后面的公式总结吧
5.17.1正交矩阵
同上
5.18四元数代数
有序对表示四元数提供了一个简单的符号表示,并允许我们用[ 1, 0 ]表示单位实数1,和虚数i,j,k分别表示为[0,i],[ 0,j],[ 0 ,k]。四元数然后变成这些元素与相关实数的线性组合。这样的条件的元素为实数域上的代数基础。
此外,由于四元数代数支持除法,并且服从代数的正规公理,除了乘法是非交换的,所以称之为除法代数。Ferdinand Georg Frobenius1878证明了,只有三个这样除法代数存在:实数、复数和四元数。
“Cayley数”O,构成了一个实除法代数,但Cayley数是8维且没有结合律,即对于所有a,b,c ∈O a(bc)≠(ab)c
5.19总结
四元数是复数很相似,除了他有三个虚数,而不是一个。因此,它们继承了与复数相关的一些性质,如范数、共轭、单位范数和逆。它们也可以被加、减、乘、除。
5.19.1操作总结