• <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>

            天行健 君子當自強而不息

            3D數學 ---- 矩陣的更多知識(4)

             

            4D向量和4x4矩陣不過是對3D運算的一種方便的記憶而已。

             

            4D齊次空間

            4D向量有4個分量,前3個是標準的x,y和z分量,第4個是w,有時稱作齊次坐標。

            為了理解標準3D坐標是怎樣擴展到4D坐標的,讓我們先看一下2D中的齊次坐標,它的形式為(x, y, w)。想象在3D中w=1處的標準2D平面,實際的2D點(x, y)用齊次坐標表示為(x, y, 1),對于那些不在w=1平面上的點,則將它們投影到w=1平面上。所以齊次坐標(x, y, w) 映射的實際2D點為(x/w, y/w)。如圖9.2所示:

            因此,給定一個2D點(x, y),齊次空間中有無數多個點與之對應。所有點的形式都為(kx, ky, k),k≠0。這些點構成一條穿過齊次原點的直線。

            當w=0時,除法未定義,因此不存在實際的2D點。然而,可以將2D齊次點(x, y, 0)解釋為"位于無窮遠的點",它描述了一個方向而不是一個位置。

            4D坐標的基本思想相同,實際的3D點被認為是在4D中w=1"平面"上。4D點的形式為(x, y, z, w),將4D點投影到這個"平面"上得到相應的實際3D點(x/w, y/w, z/w)。w=0時4D點表示"無限遠點",它描述了一個方向而不是一個位置。

             

            4 X 4 平移矩陣

            3x3變換矩陣表示的是線性變換,不包括平移。因為矩陣乘法的性質,零向量總是變換成零向量。因此,任何能用矩陣乘法表達的變換都不包含平移。這很不幸,因為矩陣乘法和它的逆是一種非常方便的工具,不僅可以用來將復雜的變換組合成簡單的單一變換,還可以操縱嵌入式坐標系間的關系。如果能找到一種方法將3x3變換矩陣進行擴展,使它能處理平移,這將是一件多么美妙的事情啊。4x4矩陣恰好提供了一種數學上的"技巧"使我們能夠做到這一點。

            暫時假設w總是等于1。那么,標準3D向量[x, y, z]對應的4D向量為[x, y, z, 1]。任意3x3變換矩陣在4D中表示為:

            任意一個形如[x, y, z, 1]的向量乘以上面形式的矩陣,其結果和標準的3x3情況相同,只是結果是用w=1的4D向量表示的:

            現在,到了最有趣的部分。在4D中,仍然可以用矩陣乘法來表達平移,如公式9.10所示,而在3D中是不可能的:

            記住,即使是在4D中,矩陣乘法仍然是線性變換。矩陣乘法不能表達4D中的"平移",4D零向量也將總是被變換成零向量。這個技巧之所以能在3D中平移點是因為我們實際上是在切變4D空間。與實際3D空間相對應的4D中的"平面"并沒有穿過4D中的原點。因此,我們能通過切變4D空間來實現3D中的平移。

            設想沒有平移的變換后接一個有平移的變換會發生什么情況呢?設R為旋轉矩陣(實際上,R還能包含其他的3D線性變換,但現在假設R只包含旋轉),T為形如公式9.10的變換矩陣:

            將向量v先旋轉再平移,新的向量v'計算如下:

            v' = vRT

            注意,變換的順序是非常重要的。因為我們使用的是行向量,變換的順序必須和矩陣乘法的順序相吻合(從左到右),先旋轉后平移。

            和3x3矩陣一樣,能將兩個矩陣連接成單個矩陣,記作矩陣M,如下:

            = RT

            v' = vRT = v(RT) = vM

            觀察M的內容:

            注意到,M的上邊3x3部分是旋轉部分,最下一行是平移部分。最右一列為[0, 0, 0, 1]T。逆向利用這些信息,能將任意4x4矩陣分解為線性變換部分和平移部分。將平移向量[△x, △y, △z]記作t,則M可簡寫為:

            接下來看w=0所表示的 "無窮遠點"。它乘以一個由"標準"3x3變換矩陣擴展成的4x4矩陣(不包含平移),得到:

            換句話說,當一個形如[x, y, z, 0]的無窮遠點乘以一個包含旋轉、縮放等的變換矩陣,將會發生預期的變換。結果仍是一個無窮遠點,形式為[x, y, z, 0]。

            一個無窮遠點經過包含平移的變換可得到:

            注意到結果是一樣的(和沒有平移的情況相比)。換句話說,4D向量中的w分量能夠"開關"  4x4 矩陣的平移部分。這個現象是非常有用的,因為有些向量代表“位置”,應當平移,而有些向量代表“方向”,如表面的法向量,不應該平移。從幾何意義上說,能將第一類數據當作"點",第二類數據當作"向量".

            使用4x4矩陣的一個原因是4x4變換矩陣能包含平移。當我們僅為這個目的使用4x4矩陣時,矩陣的最后一列總是[0, 0, 0, 1]T。既然是這樣,為什么不去掉最后一列而改用4x3矩陣呢?根據線性代數法則,由于多種原因,4x3矩陣不符合我們的需求,如下:

            (1)不能用一個4x3矩陣乘以另一個4x3矩陣。

            (2)4x3矩陣沒有逆矩陣,因為它不是一個方陣。

            (3)一個4D向量乘以4x3矩陣時,結果是一個3D向量。

            為了嚴格遵守線性代數法則,我們加上了第4列。當然在代碼中,可以不受代數法則的約束。
             


            posted on 2008-01-16 16:42 lovedday 閱讀(1703) 評論(0)  編輯 收藏 引用

            公告

            導航

            統計

            常用鏈接

            隨筆分類(178)

            3D游戲編程相關鏈接

            搜索

            最新評論

            久久久久99精品成人片牛牛影视 | 国产亚洲色婷婷久久99精品| 狠狠色狠狠色综合久久| 亚洲午夜久久久久久久久电影网| 久久无码人妻一区二区三区| 青青草国产精品久久久久| 亚洲成av人片不卡无码久久| 欧美丰满熟妇BBB久久久| 国产精品99久久久久久猫咪| 国产精品伦理久久久久久| 欧美亚洲国产精品久久久久| 2021少妇久久久久久久久久| 青春久久| 999久久久免费国产精品播放| 久久精品日日躁夜夜躁欧美| 久久久91人妻无码精品蜜桃HD| 久久人人爽人人爽人人片AV高清 | 国产精品美女久久久免费| 久久久久久久久66精品片| 伊人久久综合热线大杳蕉下载| 中文字幕日本人妻久久久免费| 久久国产精品一区| 久久精品国产一区| 久久国产热精品波多野结衣AV| 亚洲另类欧美综合久久图片区| 91久久精品电影| 久久精品国产91久久麻豆自制| 亚洲AV无码久久精品成人| 综合久久给合久久狠狠狠97色| 久久久久亚洲爆乳少妇无| 久久免费精品视频| 久久免费视频观看| 久久青草国产精品一区| 99国产精品久久久久久久成人热| 亚洲精品美女久久777777| 久久只有这里有精品4| 国内精品久久久久影院老司 | 久久国产亚洲精品无码| 中文字幕热久久久久久久| 伊人久久大香线蕉av一区| 狠狠色婷婷久久一区二区|