学习quaternion的一点点笔记

嗯嗯,继续学习数学中。。。      

 

        3D程序中,通常用quaternion来计算3D物体的旋转角度,与Matrix相比,quaternion更加高效,占用的储存空间更小,此外也更便于插值。在数学上,quaternion表示复数w+xi+yj+zk,其中i,j,k都是虚数单位:

i*i = j*j = k*k= -1

i*j = k, j*i = -k

可以把quaternion看做一个标量和一个3D向量的组合。实部w表示标量,虚部表示向量标记为V,或三个单独的分量(x,y,z)。所以quaternion可以记为[ w, V][ w,(x,y,x]。对quaternion最大的误解在于认为w表示旋转角度,V表示旋转轴。正确的理解应该是w与旋转角度有关,v与旋转轴有关。例如,要表示以向量N为轴,轴旋α度,相对的quaternion应该是:

q = [ cos(α/ 2) , sin(α/ 2)N]

  =[ cos(α/ 2) , ( sina(α/ 2)Nx, sin(α/ 2)Ny, sin(α/ 2)Nz ) ]

为了计算方便,一般要求N为单位矢量。对quaternion来说使用四个值就能记录旋转,而不是Matrix所需的十六个值。为什么用quaternion来计算旋转很方便呢?先说过quaternion是一个复数,如果你还记得一点点复数的知识,那么应该知道复数乘法(叉乘)的几何意义实际上就是对复数进行旋转。对最简单的复数p= x + yi来说,和另一个复数q = ( conα,sinα)相乘,则表示把p沿逆时针方向旋转α:

p’ = pq

当然,x+yi的形式只能表示2D变换,对3D变换来说就需要使用 quaternion了,而且计算也要复杂一点。为了对3D空间中的一个点px,y,z)进行旋转,需要先把它转换为quaternion形式p = [0, ( x, y, z)],接下来前面讨论的内容,定义q = cos(α/ 2) , sin(α/ 2)N为旋转quaternion,这里N为单位矢量长度的旋转轴,α为旋转角度。那么旋转之后的点p’则为:

      p’ = qpq-1

 

ps:粗体字母表示矢量 

~~~~~~~~~~~~~~~~~~~~~~~呆滞的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   昨天玩了一下上古卷轴四-湮灭,不错的游戏,画面很精致,各种特效做的相当华丽,特别是里面的树木渲染是我目前看到最好的,可惜我的6600GT跑起来已经有些吃力>.<。不过最不习惯的还是游戏操作,视觉和移动旋转控制方式让我玩一小时就晕的不行,特别是骑上马之后的方向控制,只能用艰难来形容。相比之下wow的操作要舒服的多。另外还有一个比较不爽的地方,虽然游戏开始时可以精细的定制人物外形,可惜大多数游戏时间中,都只能看到人物背面。说实话,人物背影做的实在很丑,我选的女精灵,可是从后面看简直就像个驼背一样-_-b。再者技能栏用起来也极度不方便,只能使用一个按键释放魔法,在多个魔法间切换比较麻烦。毕竟是pc版本的,和ps或xbox版本相比,完全可以再改进一下控制方式。想起前几天有人在gameres论坛讨论要用两个鼠标把FPS游戏的视角和准心分开控制的想法,实际上良好的人机交互方式要比某些华而不实的功能重要的多。当然,也许有人说特殊控制方式也是一款游戏的吸引人的地方之一。但不觉得像无冬之夜那样,为玩家提供多种可选的视觉控制方式是更好的解决方案吗?so,结论是不要让设计不合理的UI毁了一个好游戏。

    

     csdn的blog似乎又出问题了,不能传图片了-_- 。

 

百度百科上

四元数

 

四元数是最简单的超复数。 复数是由实数加上元素 i 组成,其中i^2 = -1 \,。 相似地,四元数都是由实数加上三个元素 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = ijk = -1 \, 每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi + cj + dk \,。

 

 

1性质特点

四元数(Quaternions)是由威廉·卢云·哈密尔顿(William Rowan Hamilton,1805-1865)在1843年爱尔兰发现的数学概念。四元数的 乘法不符合交换律(commutative law),故
威廉·卢云·哈密顿

  威廉·卢云·哈密顿

它似乎破坏了科学知识中一个最基本的原则。
明确地说,四元数是复数的不可交换延伸。如把四元数的集合考虑成多维实数空间的话,四元数就代表着一个 四维空间,相对于复数为 二维空间
四元数是 除环(除法环)的一个例子。除了没有 乘法的交换律外, 除法环与域是相类的。特别地,乘法的结合律仍旧存在、非零元素仍有唯一的逆元素。
四元数形成一个在实数上的四维 结合代数(事实上是除法代数),并包括复数,但不与复数组成结合代数。四元数(以及实数和复数)都只是有限维的实数结合除法代数。
四元数的不可交换性往往导致一些令人意外的结果,例如四元数的 n-阶多项式能有多於 n 个不同的根。
四元数就是形如 ai+bj+ck+d 的数
a、b、c、d是实数
i^2=j^2=k^2=-1
ij=k ji=-k jk=i kj=-i ki=j ik=-j
(a^2+b^2+c^2+d^2)的平方根 称为四元数的模.

2例子

假设:
x = 3 + i
y = 5i + j - 2k
那么:
x + y = 3 + 6i + j - 2k
xy =( {3 + i} )( {5i + j - 2k} ) = 15i + 3j - 6k + 5i^2 + ij - 2ik
= 15i + 3j - 6k - 5 + k - 2j = - 5 + 15i + j - 5k

3群旋转

象在四元数和 空间转动条目中详细解释的那样,非零四元数的乘法群在R3的取实部为零的 拷贝上以共轭作用可以实现转动。单位四元数(绝对值为1的四元数)的共轭作用,若实部为cos(t),是一个角度为2t的转动,转轴为虚部的方向。四元数的优点是:
非奇异表达(和例如 欧拉角之类的表示相比)
矩阵更紧凑(更快速)
单位四元数的对可以表示四维空间中的一个转动。
所有单位四元数的集合组成一个三维球S3和在乘法下的一个群(一个 李群)。S3是行列式为1的实正交3×3正交矩阵的群SO(3,R)的双面覆盖,因为每两个单位四元数通过上述关系对应于一个转动。群S3和SU(2)同构,SU(2)是行列式为1的复酉2×2矩阵的群。令A为形为a + bi + cj + dk的四元数的集合,其中a,b,c和d或者都是整数或者都是分子为奇数分母为2的有理数。集合A是一个环,并且是一个格。该环中存在24个四元数,而它们是 施莱夫利符号为{3,4,3}的正二十四胞体的顶点。

4矩阵表示

有两种方法能以矩阵表示四元数,并以矩阵之加法、乘法应用于四元数之加法、乘法。
第一种是以二阶复数矩阵表示。若 h = a + bi + cj + dk 则它的复数形式为:
<math>\begin a-di & -b+ci \\ b+ci & \;\; a+di \end</math>
这种表示法有如下优点:
所有复数 (c = d = 0) 就相应于一个实矩阵。
四元数的绝对值的平方就等于矩阵的行列式。
四元数的共轭值就等于矩阵的共轭转置。
对于单位四元数 (|h| = 1) 而言,这种表示方式给了四维球体和SU(2)之间的一个同型,而后者对于量子力学中的自旋的研究十分重要。(请另见 泡利矩阵
第二种则是以四阶实数矩阵表示:
<math>\begin\;\;a&-b&\;\;d&-c\\ \;\;b&\;\;a&-c&-d\\-d&\;\;c&\;\;a&-b\\ \;\;c&\;\;d&\;\;b&\;\;a\end</math>
其中四元数的共轭等于矩阵的转置。

5历史

四元数是由 哈密顿在1843年爱尔兰发现的。当时他正研究扩展复数到更高的维次(复数可视为平面上的点)。他不能做到 三维空间的例子,但四维则造出四元数。根据哈密顿记述,他于10月16日跟他的妻子在 都柏林的皇家运河(Royal Canal)上散步时突然想到 <math>i^2 = j^2 = k^2 = ijk = -1 \,</math>Image:Quaternion Plague on Broom Bridge.jpg的方程解。之后哈密顿立刻将此方程刻在附近布鲁穆桥(Brougham Bridge,现称为金雀花桥 Broom Bridge)。这条方程放弃了交换律,是当时一个极端的想法(那时还未发展出向量和矩阵)。
不只如此,哈密顿还创造了向量的内外积。他亦把四元数描绘成一个有序的四重实数:一个纯量(a)和向量(bi + cj + dk)的组合。若两个纯量部为零的四元数相乘,所得的纯量部便是原来的两个向量部的纯量积的负值,而向量部则为 向量积的值,但它们的重要性仍有待发掘。
哈密顿之后继续推广四元数,并出了几本书。最后一本《四元数的原理》(Elements of Quaternions)于他死后不久出版,长达八百多页。

6用途争辩

即使到目前为止四元数的用途仍在争辩之中。一些 哈密顿的支持者非常反对奥利夫·亥维赛的向量 代数学和 Willard Gibbs 的向量 微积分的发展,以维持四元数的超然地位。对于三维空间这可以讨论,但对于更高维四元数就失效了(但可用延伸如 八元数和柯利弗德代数学)。而事实上,在二十世纪中叶的科学和工程界中,向量几乎已完全取代四元数的位置。
詹姆斯·克拉克·麦克斯韦曾经在他的《电磁场动力理论》(A Dynamical Theory of Electromagnetic Field)直接以20条有20个变量的微分方程组来解释电力、磁力和电磁场之间的关系。某些早期的 麦克斯韦方程组使用了四元数来表述,但与后来亥维赛使用四条以向量为基础的麦克斯韦方程组表述相比较,使用四元数的表述并没有流行起来。

7运算

综述

四元数运算在电动力学与广义相对论中有广泛的应用。四元数可以用来取代 张量表示。有时候采用带有复数元素之四元数会比较容易,导得结果不为除法代数之形式。然而亦可结合共轭运算以达到相同的运算结果。
此处仅讨论具有实数元素之四元数,并将以两种形式来描述四元数。其中一种是向量与纯量的结合,另一形式两个创建量(constructor)与双向量(bivector;i、j与k)的结合。
定义两个四元数:
<math>q = a + \vec = a + bi + cj + dk</math>
<math>p = t + \vec = t + xi + yj + zk</math>
其中<math>\vec</math>;表示矢量<b,c,d>;,而<math>\vec</math>;表示矢量<x,y,z>.
加、乘和一般函数

加法p + q

跟复数、向量和矩阵一样,两个四元数之和需要将不同的元素加起来︰
<math>p + q = a + t + \vec + \vec = (a + t) + (b + x)i + (c + y)j + (d + z)k</math>
加法遵循实数和复数的所有交换律和结合律。

乘法pq

两个四元数之间的非可换乘积通常被 格拉斯曼称为积,这个积上面已经简单介绍过,它的完整型态是︰
<math>pq = at - \vec\cdot\vec + a\vec + t\vec + \vec\times\vec</math>
<math>pq = (at - bx - cy - dz) + (bt + ax + dy - cz)i + (ct + ay + bz - dx)j + (dt + za + cx - by)k \,</math>
由于四元数乘法的非可换性,pq并不等于qp。格拉斯曼积常用在描述许多其他代数函数。qp乘积的向量部分是:
<math>qp = at - \vec\cdot\vec + a\vec + t\vec - \vec\times\vec</math>

点积 p · q

点积也叫做 欧几里德内积,四元数的点积等同于一个四维向量的点积。点积的值是p中每个元素的数值与q中相应元素的数值的乘积的和。这是四元数之间的可换积,并返回一个标量。
<math>p \cdot q = at + \vec\cdot\vec = at + bx + cy + dz</math>
点积可以用格拉斯曼积的形式表示:
<math>p \cdot q = \frac{p^*q + q^*p}</math>
这个积对于从四元数分离出一个元素有用。例如,i项可以从p中这样提出来:
<math>p \cdot i = x</math>

外积Outer(p,q)

欧几里德外积并不常用; 然而因为外积和内积的格拉斯曼积形式的相似性.它们总是一同被提及:
<math>\operatorname(p,q) = \frac{p^*q - q^*p}</math>
<math>\operatorname(p,q) = a\vec - t\vec - \vec\times\vec</math>
<math>\operatorname(p,q) = (ax - tb - cz + dy)i + (ay - tc - dx + bz)j + (az - td - by + xc)k</math>

偶积

四元数偶积也不常用,但是它也会被提到,因为它和奇积的相似性。它是纯对称的积;因此,它是完全可交换的。
<math>\operatorname(p,q) = \frac{pq + qp}</math>
<math>\operatorname(p,q) = at - \vec\cdot\vec + a\vec + t\vec</math>
<math>\operatorname(p,q) = (at - bx - cy - dz) + (ax + tb)i + (ay + tc)j + (az + td)k</math>

叉积:p × q

四元数叉积也称为奇积。它和向量叉积等价,并且只返回一个向量值:
<math>p \times q = \frac{pq - qp}</math>
<math>p \times q = \vec\times\vec</math>
<math>p \times q = (cz - dy)i + (dx - bz)j + (by - xc)k</math>

转置

四元数的转置通过p−1p = 1被定义。它定义在上面的定义一节,位于属性之下(注意变量记法的差异)。其建构方式相同于复倒数(complex inverse)之构造:
<math>p^ = \frac{p^*}{p\cdot p}</math>
一个四元数的自身点积是个纯量。四元数除以一个纯量等效于乘上此纯量的倒数,而使四元数的每个元素皆除以此一除数。

不可换性

四元数的不可换性导致了 p−1q 和 qp−1的不同。这意味着除非p是一个标量,否则不能使用q/p这一符号。

标量部

四元数的标量部分可以用前面所述的点积来分离出来:
<math>1\cdot p = \frac{p + p^*} = a</math>

向量部

四元数的向量部分可以用外积提取出来,就象用点积分离标量那样:
<math>\operatorname(1,p) = \frac{p - p^*} = \vec = bi + cj + dk</math>

模:|p|

四元数的绝对值是四元数到原点的距离。
<math>|p| = \sqrt{p \cdot p} = \sqrt{p^*p} = \sqrt{a^2 + b^2 + c^2 + d^2}</math>

符号数:sgn(p)

一复数之符号数乃得出单位圆上,一个方向与原复数相同之复数。四元数的符号数亦产生单位四元数:
<math>\sgn(p) = \frac{|p|}</math>

幅角:arg(p)

幅角函数可找出一4-向量四元数偏离单位纯量(即:1)之角度。此函数输出一个纯量角度。
<math>\arg(p) = \arccos\left(\frac{\operatorname(p)}{|p|}\right)</math>

关于quatertion的介绍:

wiki上的更详细的介绍:http://en.wikipedia.org/wiki/Quaternion

 

 转载: http://blog.csdn.net/soilwork/article/details/1447346
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值