



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Computer Graphics: 四元數與旋轉在討論四元數之前,我們來想想對三維直角座標而言,在物體旋轉會有何影響,可以擴充三維直角座標系統的旋轉為三角度系統(Three-angle system),在Game Programming Gems中有提供這麼一段:Quaternions do not suffer from gimbal lock. With a three-angle(roll, pitch, yaw) system, there are always certain orientations in which there is no simple change to the trhee values to represent a simple local roation. You often see this rotation having pitched up 90 degree when you are trying to specify a local yaw for right.簡單的說,三角度系統無法表現任意軸的旋轉,只要一開始旋轉,物體本身即失去對任意軸的自主性。四元數(Quaternions)為數學家Hamilton於1843年所創造的,您可能學過的是複數,例如:a + b i 這樣的數,其中i * i = -1,Hamilton創造了三維的複數,其形式為 w + x i + y j + z k,其中i、j、k的關係如下:i2 = j2 = k2 = -1i * j = k = -j * ij * k = i = -k * jk * i = j = -i * k假設有兩個四元數:q1 = w1 + x1 i + y1 j + z1 kq2 = w2 + x2 i + y2 j + z2 k四元數的加法定義如下:q1 + q2 = (w1+w2) + (x1+x2) i + (y1+y2) j + (z1+z2) k四元數的乘法定義如下,利用簡單的分配律就是了:q1 * q2 =(w1*w2 - x1*x2 - y1*y2 - z1*z2) +(w1*x2 + x1*w2 + y1*z2 - z1*y2) i +(w1*y2 - x1*z2 + y1*w2 + z1*x1) j +(w1*z2 + x1*y2 - y1*x2 + z1*w2) k由於q = w + x i + y j + z k中可以分為純量w與向量x i + y j + z k,所以為了方便表示,將q表示為(S, V),其中S表示純量w,V表示向量x i + y j + z k,所以四元數乘法又可以表示為:q1 * q2 = (S1 + V1)*(S2 + V2) = S1*S2 - V1.V2 + V1XV2 + S1*V2 + S2*V1其中V1.V2表示向量內積,V1XV2表示向量外積。定義四元數q = w + x i + y j + k 的norm為:N(q) = |q| = x2 + y2 + z2 + w2滿足N(q) = 1的四元數集合,稱之為單位四元數(Unit quaternions)。定義四元數定義四元數q = w + x i + y j +k的共軛(Conjugate)為:q* = 定義四元數q = w - x i - y j - k = S - V定義四元數的倒數為:1/ q = q* / N(q)說明了一些數學,您所關心的或許是,四元數與旋轉究竟有何關係,假設有一任意旋轉軸的向量A(Xa, Ya, Za)與一旋轉角度,如下圖所示:可以將之轉換為四元數:x = s * Xay = s * Xbz = s * Xcw = cos(/2)s = sin(/2)所以使用四元數來表示的好處是:我們可以簡單的取出旋轉軸與旋轉角度。在这里,我将自己加一个上面公式的反推导,我们将根据四元数求我们用于旋转它的向量A(Xa, Ya, Za)。公式如下: =acos(w)*2s=sin(/2)Xa=x/sXb=y/sXc=c/s这个公式在编程当中也很有用,至于有什么用,偶现在还不清楚。那麼四元數如何表示三維空間的任意軸旋轉?假設有一向量P(X, Y, Z)對著一單位四元數q作旋轉,則將P視為無純量的四元數X i + Y j + Z k,則向量的旋轉經導證如下:Rot(P) = q p q*四元數具有純量與向量,為了計算方便,將之以矩陣的方式來表現四元數的乘法,假設將四元數表示如下:q = w, x, y, z = S, V兩個四元數相乘q = q * q的矩陣表示法如下所示:若令q = S, V = cos, u*sin,其中u為單位向量,而令q= S, V為一四元數,則經過導證,可以得出q * q * q(-1)會使得q繞著u軸旋轉2。由四元數的矩陣乘法與四元數的旋轉,可以導證出上面的旋轉公式可以使用以下的矩陣乘法來達成:講了這麼多,其實就是要引出上面這個矩陣乘法,也就是說如果您要讓向量(x, y, z)(w為0)對某個單位向量軸u(x, y, z)旋轉角度2,則w = cos,代入以上的矩陣乘法,即可得旋轉後的(x, y
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论