3D變換中的四元數

2021-06-06 05:47:36 字數 1142 閱讀 1889

在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空間中的乙個點p(x,y,z)進行旋轉,需要先把它轉換為quaternion形式p = [0, ( x, y, z)],接下來前面討論的內容,定義q = cos(α/ 2) , sin(α/ 2)n為旋轉quaternion,這裡n為單位向量長度的旋轉軸,α為旋轉角度。那麼旋轉之後的點p』則為:

p』 = qpq-1

3D數學四元數

向量的叉乘 外積 叉積 a ax,ay,az b bx,by,bz a x b c aybz azby,axbz azbx,axby aybx 兩個向量叉乘的幾何意義 得到乙個新的向量,c向量,c向量同時垂直於a向量和b向量。垂直於a向量和b向量所組成的平面,我們也把c向量叫做那個平面的法向量。向量...

3D數學讀書筆記 四元數

什麼是四元數 複數是由實數加上虛數單位i 組成,當中 i 1 相似地,四元數都是由實數加上三個元素 i j k 組成,並且它們有例如以下的關係 i j k ijk 1 每乙個四元數都是 1 i j 和 k 的線性組合,即是四元數一般可表示為a bi cj dk。關於四元數的歷史 四元數是由哈密頓在1...

3D空間變換

它相當於是平移變換 t 和旋轉變換 r 的復合,等距變換前後長度,面積,線線之間的角度都不變。自由度 6 旋轉變換r自由度 3,平移變換t自由度 3 t rt0t 1 t begin r t 0 t 1 end t r0t t1 4x4矩陣 eigen isometry3d eigen isomet...