Ogre的四元數quaternion

來源:互聯網
上載者:User

quaternion是一個標量和一個3D向量的組合。q={ w,x,y,z},Ogre中一個預設的quaternion ={1,0,0,0} ,一般用於空間一點的旋轉,假設空間一點叫p,將要旋轉角度是α,旋轉軸是(x,y,z),那麼:

p={0,x0,y0,z0}

q= {cos(α/ 2) , sina(α/ 2) Nx, sin(α/ 2)Ny, sin(α/ 2)Nz } (N為單位向量)

 

p結果 =q*p*q-1

 

在數學上,quaternion表示複數w+xi+yj+zk,其中i,j,k都是虛數單位,而複數乘法(叉乘)的幾何意義實際上就是對複數進行旋轉。這也是OGRE為什麼要用quaternion的原因(比Matrix更快捷更節省空間的),對最簡單的二維複數p= x + yi來說,和另一個q = ( conα,sinα)相乘,則表示把p沿逆時針方向旋轉α:p’ = pq ,這是2D旋轉.

如果要表示3D旋轉,就需要3D複數了,於是就有了"四元數",q=w+ix+jy+kz (i,j,k都是虛數)

其中j,j,k關係如下:

 

 

   i2 = j2 = k2 = -1
   i * j = k = -j * i
   j * k = i = -k * j
   k * i = j = -i * 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

OGRE原始碼裡這樣定義乘法:

Quaternion Quaternion::operator* (const Quaternion& rkQ) const
    {
        // cases p*q != q*p.

        return Quaternion
        (
            w * rkQ.w - x * rkQ.x - y * rkQ.y - z * rkQ.z,
            w * rkQ.x + x * rkQ.w + y * rkQ.z - z * rkQ.y,
            w * rkQ.y + y * rkQ.w + z * rkQ.x - x * rkQ.z,
            w * rkQ.z + z * rkQ.w + x * rkQ.y - y * rkQ.x
        );
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.