zoukankan      html  css  js  c++  java
  • 四元数 Quaternion

    最近在重写自己游戏引擎的场景管理模块,重温了一下有关四元数的一些知识,在此做一下简单的笔记。

    四元数可以用来准确地描述三维矢量的旋转,并且可以有效地表达多个旋转操作的叠加,因此在三维游戏引擎的场景管理模块中,四元数具有很重要的意义。

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/

     


     

    一、定义

    形如A = ai + bj + ck + d的复数称为四元数,其中ijk为虚数(称为四元数的基元),a、b、c、d为实数。

    二、常见性质

    1. i2 = j2 = k2 = -1

    2. ij = k       jk = i         ki = j

    3. ij = –ji     jk = –kj      ki = -ki

    4. ii* = 1     i* = –i       即i*与i共轭,jk同理

    5. 四元数的乘法运算满足结合律与分配律,不满足交换律

    6. 将四元数虚部看作三维矢量,则两个四元数的矢量部分乘积为αβ = -αβ +α×β,令四元数A = α + d1,B = β + d2,则

        AB = -αβ +α×β + d2α + d1β + d1d2 = (d1a2 – c1b2 + b1c2 + a1d2) i
                                                                     + (c1a2 + d1b2 – a1c2 + b1d2) j
                                                                     + (-b1a2 + a1b2 + d1c2 + c1d2) k
                                                                     – a1a2 – b1b2 – c1c2 + d1d2

    7. (AB)* = B*A*

    8. 定义四元数 A = ai + bj + ck + d 的范数为:||A|| = a2 + b2 + c2 + d,模为:|A| = sqrt(a2 + b2 + c2 + d2)

    9. 定义四元数A的逆为: A-1 = A* / ||A||

    10. A-m = (A-1)m = (Am)-1

    三、使用四元数表述矢量旋转

    假设矢量α绕转轴e = (xe,ye,ze)旋转θ角得到β,则:

    β = uαu-1

    其中:

    u = e sin(θ/2) + cos(θ/2)

    u-1 = u* = - e sin(θ/2) + cos(θ/2)

    因此,我们可以使用四元数u = (x,y,z,w)表示坐标旋转,其中:

    x = sin(θ/2) xe

    y = sin(θ/2) ye

    z = sin(θ/2) ze

    w = cos(θ/2)

    四、使用矩阵表示坐标旋转

    假设旋转轴为a = (xa,ya,za),旋转角为α,则旋转矩阵如下:

    clip_image002

    五、四元数与旋转矩阵的转化

    根据半角公式:

    sinα = 2sin(α/2)•cos(α/2)

    cosα = cos2(α/2) - sin2(α/2)

    cos2(α/2) = (1 +cosα)/2

    sin2(α/2) = (1 -cosα)/2

    四元数转化为旋转矩阵可表示如下:

    clip_image004

  • 相关阅读:
    [转]我们应该做什么样的研究
    [转]面向服务架构(SOA)和企业服务总线(ESB)
    [转]程序员应知——团队精神
    vs2010 调试快捷键
    asp.net 获取ip的6种方法
    解决了防止用户重复登陆和session超时
    IE 10 也能随网站应变,图标决定一切!
    Sony VAIO Duo 11 游戏性能测试
    翻出Windows 8 当中的游戏管理器
    Office 2013预览版已到期,需要付费才可正常使用
  • 原文地址:https://www.cnblogs.com/dbylk/p/5125882.html
Copyright © 2011-2022 走看看