青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天行健 君子當自強而不息

3D中的方位和角位移(7)

新建網頁 1

 

從四元數轉換到矩陣

為了將角位移從四元數轉換到矩陣形式,可以利用旋轉矩陣,它能計算繞任意軸的旋轉:

這個矩陣是用n和θ表示的,但四元數的分量是:

w = cos(θ/2)

x = nx sin(θ/2)

y = ny sin(θ/2)

z = nz sin(θ/2)

讓我們看看能否將矩陣變形以代入wxyz,矩陣的9個元素都必須這樣做。幸運的是,這個矩陣的結構非常好,一旦解出對角線上的一個元素,其他元素就能用同樣的方法求出。同樣,非對角線元素之間也是彼此類似的。

考慮矩陣對角線上的元素,我們將完整地解出m11m22m33解法與之類似:

m11 = nx2(1 - cosθ) + cosθ

我們將從上式的變形開始,變形方法看起來像是在繞圈子,但你馬上就能理解這樣做的目的:

現在需要消去cosθ項,而代之以包含cosθ/2sinθ/2的項,因為四元數的元素都是用它們表示的,像以前那樣,設α=θ/2,先用α寫出cos的倍角公式,再代入θ:

上式是正確的,但它和其他的標準形式不同,即:

m11 = 1 - 2y2 - 2z2

實際上,還有其他的形式存在。最著名的一個形式是m11 = w2 + x2 - y2- z2因為w2 + x2 + y2 + z2 = 1,所以這三種形式是等價的。現在回過頭來看看能不能直接導出其他標準形式,第一步,n是單位向量,nx2+ny2 + nz2 = 1,則1 - nx2 = ny2 + nz2

m11 = 1 - (1 - nx2)(2sin2(θ/2))

       = 1 - (ny2 +nz2)(2sin2(θ/2))

       = 1 - 2ny2sin2(θ/2) - 2nz2sin2(θ/2)

       = 1 - 2y2 - 2z2

元素m22m33可以用同樣的方法求得。

讓我們來看看非對角線元素,它們比對角線元素簡單一些,以m12為例子:

m12 = nxny(1 - cosθ) + nzsinθ

其他非對角線元素可用同樣的方法導出。

最后,給出從四元素構造的完整旋轉矩陣,如公式10.23所示:

 

從矩陣轉換到四元數

為了從旋轉矩陣中抽出相應的四元數,可以直接利用公式 10.23,檢查對角線元素的和(也稱作矩陣的軌跡)得到:

通過使軌跡中三個元素中的兩個為負,可以用類似的方法求得其他三個元素:

不幸的是,這種方法并不總是能正確工作,因為平方根的結果總是正值。(更加準確地說,沒有選擇正根還是負根的依據。)但是,q-q代表相同的方位,我們能任意選擇用非負根作為4個分量中的一個并仍能得到正確的四元數,只是不能對四元數的所有4個數都用這種方法。

另一個技巧是檢查相對于對角線的對稱位置上元素的和與差:

那么應選用四種方法中的哪個呢?似乎最簡單的策略是總是先計算同一個分量,如w,然后再計算xyz。這伴隨著問題,如果w=0,除法就沒有定義;如果w非常小,將會出現數值不穩定。Shoemake建議先判斷wxyz中哪個最大(不用做平方根運算),根據上面的表,用矩陣對角線計算該元素,再用它計算其他三個。

下面的代碼用一種非常直接的方式實現了這個方法。

            Listing 10.4: Converting a rotation matrix to a quaternion
   
   
// Input matrix:
   
float m11,m12,m13;
   
float m21,m22,m23;
   
float m31,m32,m33;
   
   
// Output quaternion
   
float w,x,y,z;
   
   
    // Determine which of w, x, y, or z has the largest absolute value
   
float fourWSquaredMinus1 = m11 + m22 + m33;
   
float fourXSquaredMinus1 = m11 – m22 – m33;
   
float fourYSquaredMinus1 = m22 – m11 – m33;
   
float fourZSquaredMinus1 = m33 – m11 – m22;
   
   
int biggestIndex = 0;
   
   
float fourBiggestSquaredMinus1 = fourWSquaredMinus1;
   
   
if (fourXSquaredMinus1 > fourBiggestSquaredMinus1) {
      fourBiggestSquaredMinus1 = fourXSquaredMinus1;
      biggestIndex = 1;
    }
   
   
if (fourYSquaredMinus1 > fourBiggestSquaredMinus1) {
      fourBiggestSquaredMinus1 = fourYSquaredMinus1;
      biggestIndex = 2;
    }
   
   
if (fourZSquaredMinus1 > fourBiggestSquaredMinus1) {
      fourBiggestSquaredMinus1 = fourZSquaredMinus1;
      biggestIndex = 3;
    }
   
   
    // Perform square root and division
   
float biggestVal = sqrt(fourBiggestSquaredMinus1 + 1.0f) * 0.5f;
   
float mult = 0.25f / biggestVal;
   
   
    // Apply table to compute quaternion values
   
switch (biggestIndex) {
   
case 0:
      w = biggestVal;
      x = (m23 – m32) * mult;
      y = (m31 – m13) * mult;
      z = (m12 – m21) * mult;
      
break;
   
   
case 1:
      x = biggestVal;
      w = (m23 – m32) * mult;
      y = (m12 + m21) * mult;
      z = (m31 + m13) * mult;
      
break;
   
   
case 2:
      y = biggestVal;
      w = (m31 – m13) * mult;
      x = (m12 + m21) * mult;
      z = (m23 + m32) * mult;
      
break;
   
   
case 3:
      z = biggestVal;
      w = (m12 – m21) * mult;
      x = (m31 + m13) * mult;
      y = (m23 + m32) * mult;
      
break;
    }

posted on 2008-02-16 11:23 lovedday 閱讀(742) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


公告

導航

統計

常用鏈接

隨筆分類(178)

3D游戲編程相關鏈接

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美一区二区三区在线视频| 亚洲黄一区二区三区| 99在线精品视频| 精品成人a区在线观看| 欧美三级免费| 欧美极品aⅴ影院| 欧美韩日精品| 欧美成人一区二区三区| 蜜臀91精品一区二区三区| 久久国产精品72免费观看| 亚洲在线一区| 在线视频亚洲| 欧美一区日韩一区| 久久香蕉国产线看观看av| 葵司免费一区二区三区四区五区| 欧美一级久久| 欧美大片专区| 欧美性做爰猛烈叫床潮| 国产精品视频区| 在线日韩视频| 一区二区三区国产精品| 性感少妇一区| 奶水喷射视频一区| 日韩视频在线观看一区二区| 一区二区三区日韩欧美精品| 在线欧美三区| 夜色激情一区二区| 亚洲一区二区精品在线观看| 久久国产精品久久久久久| 欧美电影免费| 久久成人免费| 国产精品海角社区在线观看| 伊人成综合网伊人222| 狠狠干狠狠久久| 亚洲欧美999| 91久久精品日日躁夜夜躁欧美 | 免播放器亚洲| 国产日韩欧美自拍| 久久精品日韩欧美| 久久久国产精品一区| 国产精品乱人伦一区二区| 亚洲美女精品一区| 亚洲日本中文字幕| 欧美精品久久久久久| 亚洲人成7777| 亚洲人成艺术| 国产精品久久久久一区二区| 亚洲中字黄色| 欧美一区二区三区免费视| 欧美日韩国产精品一区二区亚洲| 夜夜狂射影院欧美极品| 久久日韩粉嫩一区二区三区| 在线观看国产精品淫| 亚洲福利精品| 国产精品v亚洲精品v日韩精品 | 亚洲精品九九| 亚洲精品中文字幕女同| 国产精品国产一区二区| 亚洲伊人伊色伊影伊综合网| 亚洲欧美日本伦理| 国产最新精品精品你懂的| 免费看亚洲片| 国产精品色婷婷久久58| 美女网站久久| 欧美视频精品在线观看| 久久综合色一综合色88| 国产精品扒开腿做爽爽爽视频| 欧美在线三区| 欧美视频手机在线| 欧美福利专区| 国内精品99| 欧美日韩在线一区二区三区| 影音先锋中文字幕一区| 欧美中文在线字幕| 亚洲一区三区在线观看| 欧美国产日本在线| 欧美肥婆在线| 亚洲高清成人| 久久精品一二三区| 久久久精品欧美丰满| 国产精品免费小视频| 一区二区国产精品| 亚洲一区二三| 国产精品日韩在线| 午夜久久久久久久久久一区二区| 一区二区三区**美女毛片| 欧美高清在线一区二区| 亚洲毛片av| 亚洲免费在线观看| 亚洲第一精品久久忘忧草社区| 好吊色欧美一区二区三区视频| 午夜精品久久久久久久蜜桃app | 久久久久久久一区二区三区| 久久久久国产精品一区| 欧美大秀在线观看| 亚洲人成毛片在线播放女女| 欧美一级黄色录像| 亚洲福利在线看| 欧美中文在线观看国产| 韩国久久久久| 欧美性天天影院| 麻豆精品在线观看| 亚洲欧美成人一区二区在线电影| 欧美日韩一区二区三区四区五区| 久久成人羞羞网站| 国产精品捆绑调教| 欧美日韩久久不卡| 久久美女性网| 亚洲综合色网站| 夜夜嗨一区二区三区| 日韩视频不卡| 欧美黄色一区| 欧美11—12娇小xxxx| 久久久蜜桃精品| 久久久精彩视频| 久久一区二区精品| 久久国产精品久久精品国产| 亚洲欧美一区二区原创| 亚洲午夜未删减在线观看| 亚洲乱码国产乱码精品精可以看| 在线观看亚洲精品| 欧美一区二区日韩| 亚洲一区二区三区中文字幕在线| 亚洲欧洲精品一区二区三区| 欧美r片在线| 亚洲国产精品久久人人爱蜜臀 | 亚洲国产1区| 在线观看三级视频欧美| 亚洲国产精品va在看黑人| 一区一区视频| 99精品国产在热久久下载| 亚洲综合色视频| 久久精品一级爱片| 亚洲国产91| 欧美中文在线免费| 欧美黄色aaaa| 极品尤物久久久av免费看| 亚洲乱码国产乱码精品精天堂 | 亚洲欧美国产日韩中文字幕| 亚洲主播在线| 欧美日韩一区二区免费在线观看| 欧美午夜国产| 亚洲精品国产系列| 久久久久综合网| 亚洲色图在线视频| 欧美国产另类| 亚洲高清一二三区| 久久久久久亚洲精品中文字幕| 久久精品99久久香蕉国产色戒| 性18欧美另类| 亚洲欧美日韩国产中文在线| 国际精品欧美精品| 亚洲午夜久久久久久尤物| 欧美va亚洲va国产综合| 亚洲午夜精品久久| 欧美日韩大片| 亚洲欧美日韩国产一区| 亚洲丁香婷深爱综合| 亚洲婷婷在线| 一区二区三区色| 国产精品国产三级国产普通话三级| 一本久久a久久免费精品不卡| 免费久久99精品国产自在现线| 性做久久久久久久免费看| 国产亚洲人成网站在线观看 | 欧美成人日韩| 亚洲免费高清视频| 99日韩精品| 禁久久精品乱码| 亚洲另类春色国产| 国产女人aaa级久久久级| 久久一区二区三区四区| 巨胸喷奶水www久久久免费动漫| 亚洲电影在线免费观看| 一区二区三区波多野结衣在线观看| 国产精品国产| 欧美插天视频在线播放| 国产精品久久一区主播| 欧美福利一区| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲精品一区二区三| 亚洲电影免费在线观看| 日韩一区二区免费看| 激情综合在线| 欧美影院成人| 久久精品人人做人人综合| 欧美成人中文字幕| 老色鬼久久亚洲一区二区| 国产精品久久久久久亚洲调教| 亚洲第一网站| 原创国产精品91| 久久久精品国产免大香伊| 欧美一级理论片| 国产欧美日韩精品一区| 一二三四社区欧美黄| 99国产精品久久| 国产精品毛片在线看| 一区二区免费在线观看| 亚洲午夜精品国产| 国产精品影视天天线|