文中內容來自書籍《unity shader入門精要》,作者為馮樂樂。
在三維數學中,矩陣是最為重要的數學概念之一,在整個線性代數的數學世界當中都舉足輕重的角色。
一、定義
由m * n 個數a ij 排成的m行n列的數表稱為m行n列的矩陣,簡稱m * n矩陣(matrix)。
這m * n個數稱為矩陣a的元素,簡稱為元,數a ij位於矩陣a的第i行第j列,稱為矩陣a的(i,j)元,以數a ij為(i,j)元的矩陣可記為(a ij)或(a ij)m*n , m * n矩陣a也記作 a mn 。
元素是實數的矩陣稱為實矩陣,元素是複數的矩陣稱為復矩陣。 而行數與列數都等於n的矩陣稱為n階矩陣或n方陣。
行是豎直的,從左往右排列,在同一豎行中,m值都是相同的,越靠右的行m值越大。列是橫平的,從上往下排列,在同一橫列中,n的值是相同的,越靠下的列n值越大。
二、和向量的關係
矩陣可以看作是乙個陣列,而向量也是乙個陣列,因此,我們可以用矩陣來表示向量。
向量可以看作是n * 1 的列矩陣(column matrix),或者是1 * n 的行矩陣(row matrix),其中n是向量的維度,例如乙個三維矩中的n的值就是3 。
當我們把向量當成是乙個矩陣之後,就可以把向量用來參與矩陣運算,這在空間變換中非常有用。
三、矩陣的運算
1. 矩陣的加減法
只有同型矩陣之間才可以進行加減法
2.矩陣和標量的乘法
矩陣和標量相乘就是矩陣的每個元素和該標量相乘。
矩陣和標量相乘的結果任然是乙個相同維度的矩陣。
3.矩陣和矩陣的乘法
兩個矩陣的乘法僅僅當第乙個矩陣a的列數和另乙個矩陣b的行數相等時才能定義。
乙個m * n的矩陣a和乙個 n * p 的矩陣b相乘,ab相乘的結果矩陣c將會是乙個m * p 大小的矩陣。
對於c中的乙個元素c ij 的值為:
矩陣的乘法滿足於以下運算律:
結合律:(ab)c = a(bc)
左分配律:(a + b)c = ac + bc
右分配律:c(a + b) = ca + cb
矩陣乘法不滿**換律。
四、特殊的矩陣
1. 方塊矩陣
方塊矩陣(square matrix)簡稱方陣,指的是行數和列數相等的矩陣。三維渲染中最常用的就是3 * 3 和4 * 4矩陣。
對角元素(diagonal elements)指的是行號和列號相等的元素,例如m11、m22等。如果乙個矩陣除了對角元素外所有元素都是0,那麼這個矩陣就叫做對角矩陣(diagonal matrix)。
2. 單位矩陣(identity matrix)
單位矩陣是乙個特殊的對角矩陣,這個對角矩陣的對角元素的值全都是1,這個矩陣用i n 來表示。如:
任何矩陣和單位矩陣相乘的結果都還是原來的矩陣。
3. 轉置矩陣(transposed matrix)
把矩陣a的行和列互相交換所產生的矩陣稱為a的轉置矩陣,這一過程稱為矩陣的轉置。
例如:轉置矩陣有如下性質:
(1)矩陣轉置的轉置等於原矩陣
(2)矩陣相乘的轉置,等於反向相乘各個矩陣的轉置
4. 逆矩陣(inverse matrix)
必須是乙個方陣才能進行逆矩陣操作。
給定乙個方陣m,它的逆矩陣用m-1來表示。
如果把m和m-1相乘,它們的結果是乙個單位矩陣。
如果乙個方陣有對應的逆矩陣,我們就稱這個方陣為可逆的(invertible),如果沒有的話,就是不可逆的。
逆矩陣有如下性質:
(1)逆矩陣的逆矩陣是原矩陣本身。
(m-1)-1= m
(2)單位矩陣的逆矩陣是它本身
i -1 = i
(3)轉置矩陣的逆矩陣是逆矩陣的轉置
(m t)-1= (m-1)t
(4)矩陣相乘後的逆矩陣等於反向相乘各個矩陣的逆矩陣
(a b)-1 = b-1 a-1
逆矩陣在空間變換中有非常重要的地位。乙個矩陣進行變換之後,逆矩陣允許我們還原這個變換,或者說計算這個變換的反向變換。
5. 正交矩陣(orthogonal matrix)
如果乙個方陣m和它的轉置矩陣的乘積是單位矩陣的話,我們就說這個矩陣是正交的。因此有如下公式:
mmt = mtm = i
如果乙個矩陣是正交的,那麼它的轉置矩陣和逆矩陣是一樣的。因此:
mt = m-1
在三維變換中我們經常需要使用逆矩陣來求解反向的變換,但是逆矩陣運算計算量太大,為了提高效能而不可以使用逆矩陣運算。
又因為正交矩陣的轉置矩陣和逆矩陣是一樣的,而轉置矩陣運算很快。
所以我們只要知道乙個矩陣是否為正交矩陣,就可以通過轉置運算得到它的逆矩陣。
五、在unity中,常規的做法是把向量放在矩陣的右側,即把向量轉換成列矩陣來進行運算。
參考圖書《unity shader入門精要》
Eigen學習筆記 3 矩陣和向量的運算
原文 eigen官網 matrix and vector arithmetic 本節內容主要介紹eigen中關於矩陣 向量 標量之間的數 算。eigen提供了matrix vector的運算操作,既包括過載了c 的算術運算子 也引入了一些特殊的運算比如點乘dot 叉乘cross 等。左右兩側的變數都...
opencv學習筆記 2 矩陣運算
mat類內部實現 設為a,b為mat型別,s是scalar型別,a是乙個實數。下面列出關於mat的常用運算 1.矩陣加減 a b,a b,a s,a s,s a,s a,a.2.矩陣乘以實數 a a,a a 3.逐元素乘除 a.mul b a b,a a 4.矩陣倒置 a.t 5.矩陣的逆 a.in...
MATLAB學習與使用 矩陣的運算
1.矩陣的輸入 1 當矩陣較小時,在命令視窗直接輸入矩陣a 1 2 3 4 5 6 7 8 9 或x 1,3,5,7 2,4,6,8 3,5,7,9 2 當矩陣較大時,用m檔案輸入矩陣 在命令視窗中輸入edit,新建m檔案,語法和直接輸入法一樣。然後儲存。要使用時,在當前路徑中我們可以看到這個m檔案...