LearnGL - 學習筆記目錄
本人才疏學淺,如有什麼錯誤,望不吝指出。
上一篇:LearnGL - 06 - Matrix - 矩陣01,瞭解了矩陣就是定義一個座標空間的軸向
這一篇:這篇再講一丟丟關於矩陣的乘法內容,這些都是個人看的零散資料總結的內容。
矩陣乘法爲何有維度限制?
就是 3x3 不能和 4x1 的矩陣相乘。但是3x3 的矩陣可以和 3x1 的矩陣向量。第一次遇到這個限制的同學,在看教科書上可能只會告訴你:矩陣相乘,前者的列數量要等於後者的行數。但是爲何要有這個限制能,可能沒法弄懂,下面我就講解一些我個人在閱讀了部分資料的總結,來理解爲何會有這個限制。
這個也是 變換 中沒有 詳細 講到的,因此加以說明。
什麼是向量空間?
先了解什麼是向量空間?
就是在某個空間中,某個向量可以 變換 到所有的任意尺度、位置的 空間集合。(我看有些術語叫:張成空間)
一個 一維 向量(就是一個標量),它能 張成 到的空間就是一條線的空間(包含了一個座標軸上的的所有數值)。
一個 二維 向量,它能 張成 到的空間就是一個平面。
一個 三維 向量,它能 張成 到我們的三維的整個空間。(你可以理解爲一個無限大的立方體或是圓體)
當然這些都是低維度可視化的理解。
在一些高維度(三維以上),我們就畫不出來了。
這些維度可以有個維度。
什麼是向量空間的維度?
什麼叫向量空間維度?
或是什麼叫矩陣變換空間的維度?
這麼說 向量空間 == 矩陣變換空間?,他們是 不等於 的。
只不過,一個 矩陣其實代表 的是某個維度的向量空間的 變換。
這裏的變換並不是矩陣對向量空間的變換,而是在這個向量空間下,這個矩陣對在這個向量空間下的某個向量進行變換。
這個矩陣代表的向量空間有多少維度,就說明這個向量空間有多少個維度。
因此我們以矩陣來說明維度。
例如:一個 4x4 矩陣左乘於一個 4x1 的矩陣(或是向量):
其中 4x4, 4x1 代表的就是這個矩陣的尺寸(這裏不用 維度,便於與空間維度 區分)。
然後我們總看到多數的矩陣教學、教程中都有描述,矩陣相乘,必須要,左邊的矩陣的列的數量,與 右邊的矩陣的行的數量 的維度相同。
如 中,必須要 要相同纔可以相乘。
從之前的 LearnGL - 06 - Matrix - 矩陣01 講解中,可以知道矩陣中的 每一列 就是一個 代表一個空間,或是 代表一個座標系 中的 正交基向量,或是 座標軸單位向量。
矩陣 有多少個列,代表有多少個正交基向量(座標軸),就 代表 了這個 向量空間 有多少維度 組成的。
那麼我們可以這麼理解:
上面的矩陣有三個軸,分別是 ,所以他的 向量空間 維度是 三維 的。
這也只是以三維空間(有三個軸)來舉例,在除了3D 圖形學之外,部分領域會使用到不確定的維度數量的 向量空間 下做運算的,如:
可以在 個維度 下的 向量空間 下來做 線性變換。
所以 向量空間的維度 是可以根據你的 矩陣的列的數量來決定的。
那麼還是回到主題,爲何:矩陣相乘,必須要:左邊的矩陣的列的數量,與 右邊的矩陣的行的數量 的維度相同?
理解爲何有這個限制
前面說了,矩陣 m x n,說明有 n 個維度。
以3D圖形中常用的4x4 矩陣 不能和 3x1矩陣(向量)爲例,因爲 前者的列數量 不等於 後者的行數。
那麼你可以這麼理解:後面的 3x1矩陣(向量)的行數量,也可以代表向量空間的維度。
但這也是有規定條件下才能這麼理解的。
如有兩矩陣乘法:
A所在向量空間的維度是,B所在的向量空間的維度同樣是,所以這兩個矩陣可以相乘。
也就說,矩陣變換的所在的維度的數量,必須是同樣的維度數量,纔可以相乘。
但前面不是說用矩陣的列的數量來決定它的向量空間的維度的數量嗎?
爲何B矩陣是用矩陣的行的數量來決定的呢?
這裏可以總結爲:在矩陣相乘中,放在前面(或是在左邊)的矩陣的列可以決定它所在的維度,而放在後面(或是在右邊)的矩陣的行可以決定它所在的維度。
再舉個例子你就明白了。
我們有一個座標點,或是一個向量:3x1:
一般我們認爲它是在三維的,因爲它有表示X,Y,Z三個軸向上的偏移量。
但更準確的理解是:因爲它一般被矩陣變換時,都是矩陣左乘(放在向量的左邊)來計算的,所以這時候,矩陣的列是維度,這個向量的行也是維度。
所以能和這個向量相乘的矩陣的維度必須是:的一個尺寸的矩陣。
如果向量,或是這個頂點,我們擴展到齊次座標:4x1:,那麼能和這個向量相乘的矩陣的維度就必須是:,所以我們3D圖形學中,比較常見的有:3x3不帶位移的矩陣,與4x4帶有位移的矩陣。