在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