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

2021-06-27 03:08:19 字數 2590 閱讀 1346

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列。當然在**中,可以不受代數法則的約束。

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

正交矩陣的運算法則 若方陣m是正交的,則當且僅當m與它轉置矩陣mt的乘積等於單位矩陣,見公式9.8 矩陣乘以它的逆等於單位矩陣 m m 1 i 所以,如果乙個矩陣是正交的,那麼它的轉置等於它的逆 這是一條非常有用的性質,因為在實際應用中經常需要計算矩陣的逆,而3d圖形計算中正交矩陣出現又是如此頻繁。...

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

矩陣的逆 另外一種重要的矩陣運算是矩陣的求逆,這個運算只能用於方陣。運算法則 方陣m的逆,記作m 1,也是乙個矩陣。當m與m 1相乘時,結果是單位矩陣。表示為公式9.6的形式 並非所有的矩陣都有逆。乙個明顯的例子是若矩陣的某一行或列上的元素都為0,用任何矩陣乘以該矩陣,結果都是乙個零矩陣。如果乙個矩...

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

矩陣的行列式 在任意方陣中都存在乙個標量,稱作該方陣的行列式。線性運算法則 方陣m的行列式記作 m 或 detm 非方陣矩陣的行列式是未定義的。n x n階矩陣的行列式定義非常複雜,讓我們先從2 x 2,3 x 3矩陣開始。公式9.1給出了2 x 2階矩陣行列式的定義 注意,在書寫行列式時,兩邊用豎...