Quaternions for Computer Graphics(计算机图形中的四元数)翻译——第五章,四元数
发布日期:2021-06-29 01:50:44 浏览次数:2 分类:技术文章

本文共 4224 字,大约阅读时间需要 14 分钟。

电子书可以在这下载:

这个视频讲的很不错:

第五章 四元数

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操作总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载地址:https://blog.csdn.net/yukinoai/article/details/79079132 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:代数——近世代数知识点思维导图(附Visio原文件)
下一篇:Quaternions for Computer Graphics(计算机图形中的四元数)翻译——第四章,复平面

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月15日 03时48分04秒