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

天行健 君子當自強而不息

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 閱讀(741) 評論(0)  編輯 收藏 引用

公告

導航

統計

常用鏈接

隨筆分類(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>
            狠狠色狠狠色综合人人| 久久国产视频网| 亚洲欧美文学| 亚洲欧美综合国产精品一区| 一区二区欧美国产| 亚洲桃色在线一区| 性色av一区二区怡红| 午夜精品视频一区| 久久不射中文字幕| 欧美顶级少妇做爰| 99精品国产在热久久下载| 亚洲一区二区三区欧美| 久久国产手机看片| 老巨人导航500精品| 亚洲国产精品一区制服丝袜 | 亚洲综合视频在线| 亚洲欧美国产高清va在线播| 久久国产精品一区二区三区| 久久综合电影一区| 91久久久久| 香蕉尹人综合在线观看| 免费在线观看日韩欧美| 国产精品久久久久久五月尺| 亚洲第一在线视频| 亚洲欧美视频一区| 亚洲第一精品夜夜躁人人爽 | 国产精品私拍pans大尺度在线| 国产亚洲激情视频在线| 亚洲另类在线一区| 久久精品日韩欧美| 亚洲美女区一区| 久久久久久黄| 国产精品一卡二| 一本一本久久| 欧美.www| 欧美一区二区三区在线免费观看| 欧美大片在线观看| 国产日韩一区在线| 亚洲欧洲av一区二区| 亚洲欧洲一区二区三区| 久久久99国产精品免费| 国产精品亚洲综合一区在线观看| 亚洲美女诱惑| 免费人成精品欧美精品| 香港久久久电影| 国产精品二区在线观看| 日韩亚洲精品电影| 亚洲成人自拍视频| 久久免费99精品久久久久久| 国产一区二区精品| 欧美在线一级视频| 午夜精品久久久久久99热软件| 欧美日韩中文在线观看| 一本大道久久a久久精二百| 欧美成人在线影院| 久久久久国产精品一区二区| 国内精品久久久久影院色| 久久久久久日产精品| 香港久久久电影| 国产亚洲一本大道中文在线| 久久gogo国模啪啪人体图| 欧美一级淫片aaaaaaa视频| 国产视频在线观看一区二区三区| 欧美影院精品一区| 欧美一区二区啪啪| 激情小说亚洲一区| 欧美电影打屁股sp| 欧美激情精品久久久六区热门| 亚洲精品视频免费在线观看| 亚洲黄色成人| 国产精品s色| 久久国产精品电影| 久久中文字幕一区| 日韩视频国产视频| 一本色道久久综合亚洲精品婷婷 | 亚洲欧洲在线视频| 欧美日韩一卡二卡| 久久成人人人人精品欧| 久久久精品久久久久| 亚洲激情影视| 一区二区久久| 国产永久精品大片wwwapp| 久久综合色88| 美女诱惑黄网站一区| 一区二区三区黄色| 欧美亚洲免费电影| 亚洲精品国精品久久99热| 亚洲精品在线视频观看| 国产婷婷97碰碰久久人人蜜臀| 免费观看国产成人| 欧美日韩亚洲不卡| 久久久久久网站| 欧美精品麻豆| 久久av免费一区| 欧美国产综合| 久久精品99| 欧美理论片在线观看| 久久成人av少妇免费| 欧美激情中文不卡| 久久久久久久综合| 欧美日韩在线直播| 欧美成人午夜影院| 国产麻豆一精品一av一免费| 欧美激情一区二区久久久| 国产精品毛片va一区二区三区 | 国产精品久久久久久久9999| 久久综合九色综合欧美狠狠| 欧美视频在线一区| 欧美福利电影在线观看| 国产欧美一区二区精品性| 亚洲欧洲偷拍精品| 亚洲第一中文字幕| 欧美一区二区在线观看| 亚洲一区二区3| 欧美激情影院| 欧美二区不卡| 国产在线不卡视频| 亚洲永久视频| 亚洲深夜av| 欧美连裤袜在线视频| 欧美激情第一页xxx| 国产一区二区三区成人欧美日韩在线观看| 亚洲精品视频在线看| 最新国产成人av网站网址麻豆| 欧美一区视频| 久久精品99国产精品日本| 国产精品美女在线| 中文亚洲免费| 亚洲无亚洲人成网站77777| 欧美激情一区在线| 亚洲日本欧美天堂| 亚洲九九九在线观看| 欧美成人三级在线| 亚洲第一福利视频| 亚洲欧洲视频在线| 欧美chengren| 亚洲国产美女| 夜夜夜久久久| 欧美午夜无遮挡| 亚洲一区二区精品视频| 亚洲欧美在线网| 国产精品区一区二区三区| 亚洲一区二区三区激情| 欧美在线你懂的| 国产在线不卡精品| 久久亚洲国产精品一区二区| 欧美大色视频| 亚洲乱码一区二区| 欧美网站在线观看| 亚洲永久视频| 卡通动漫国产精品| 亚洲欧洲精品一区| 欧美日韩一卡二卡| 午夜精品视频在线观看一区二区| 久久精品国产精品亚洲精品| 精品成人在线观看| 欧美成人亚洲成人| 一本久久a久久免费精品不卡| 午夜精品在线视频| 影音欧美亚洲| 欧美日韩精品一区二区天天拍小说 | 欧美在线视频二区| 免费看的黄色欧美网站| 亚洲久久成人| 国产精品视频yy9299一区| 久久精品青青大伊人av| 亚洲国产三级在线| 午夜精品视频在线| 亚洲国产mv| 国产精品美女午夜av| 久久永久免费| 亚洲午夜未删减在线观看| 玖玖综合伊人| 亚洲影院污污.| 影音先锋久久资源网| 欧美四级在线观看| 久久日韩粉嫩一区二区三区| 在线视频日韩精品| 欧美成在线观看| 欧美一区影院| 99av国产精品欲麻豆| 国模私拍一区二区三区| 欧美日韩一区二区在线观看| 久久亚洲一区二区| 欧美一级播放| 国产精品99久久99久久久二8| 免费日韩视频| 欧美一区三区三区高中清蜜桃| 亚洲国产一区二区精品专区| 国产精品久久久久影院色老大| 蜜桃久久av| 久久久一区二区三区| 亚洲综合视频一区| 亚洲伦理精品| 亚洲国产日韩欧美在线动漫| 久久在线视频| 久久人体大胆视频| 久久九九免费视频| 久久成人免费网| 亚洲欧美中文字幕|