【Unity Shader入門精要學(xué)習(xí)】數(shù)學(xué)基礎(chǔ)(二)

矩陣(matrix)

一、矩陣相乘

一個(gè)最好記的方法就是,如A×B,A矩陣4×4,B矩陣4×3,則結(jié)果是一個(gè)4×3的矩陣,也就是新矩陣的行數(shù)由A決定,列數(shù)由B決定,所以可以用A的每一行去乘B的每一列,最終就是一個(gè)4×3的矩陣(其實(shí)就是每一行點(diǎn)乘每一列)

1、性質(zhì)

(1)不滿足交換律
通常情況下
A×B ≠ B×A
(2)滿足結(jié)合律
(A×B)×C = A×(B×C)

二、特殊的矩陣

1、方塊矩陣

方塊矩陣(square matrix),簡(jiǎn)稱方陣,是指那些行列數(shù)相等的矩陣,游戲中常用的就是3×3,4×4矩陣

2、對(duì)角矩陣

對(duì)角矩陣(diagonal matrix),是指除對(duì)角元素外其他位置都是0的方陣

image.png

3、單位矩陣

對(duì)角元素都是1的矩陣被稱為單位矩陣(identity matrix)。

image.png

任何能與之相乘的矩陣都會(huì)得到原矩陣
image.png

4、轉(zhuǎn)置矩陣

轉(zhuǎn)置矩陣(transposed matrix),實(shí)際上是對(duì)矩陣的一種運(yùn)算名叫做轉(zhuǎn)置運(yùn)算

image.png

性質(zhì)
(1)矩陣轉(zhuǎn)置的轉(zhuǎn)置等于原矩陣
image.png

(2)矩陣相乘的轉(zhuǎn)置,等于每個(gè)矩陣的轉(zhuǎn)置反向相乘
image.png

5、逆矩陣

逆矩陣(inverse matrix),逆矩陣一定是個(gè)方陣,但是一個(gè)方陣不一定是逆矩陣,一個(gè)矩陣和它的逆矩陣相乘得到的是單位矩陣。

image.png

如果一個(gè)矩陣有對(duì)應(yīng)的逆矩陣,我們就說這個(gè)矩陣是可逆的,或是非奇異的,如果一個(gè)矩陣沒有逆矩陣,則說它是不可逆的,或是奇異的。
當(dāng)一個(gè)矩陣的行列式(determinant)不為0,那么這個(gè)矩陣就是可逆的(參見矩陣的行列式)
性質(zhì)
(1)逆矩陣的逆矩陣是原矩陣
image.png

(2)單位矩陣的逆矩陣是它本身
image.png

(3)轉(zhuǎn)置矩陣的逆矩陣是逆矩陣的轉(zhuǎn)置
image.png

(4)矩陣相乘的逆矩陣等于每個(gè)矩陣的逆矩陣反向相乘
image.png

幾何意義
逆矩陣是對(duì)某種變換的反向操作,公式可看出
image.png

6、正交矩陣

正交矩陣(orthogonal matrix),是一種特殊的方陣,如果一個(gè)矩陣和它的轉(zhuǎn)置相乘得到的是單位矩陣,那么我們就說這個(gè)矩陣是正交的(orthogonal),反過來依然成立。

image.png

而矩陣和它的逆矩陣相乘也得到的是單位矩陣,所以如果一個(gè)矩陣是正交的,那么他的逆矩陣就是它的轉(zhuǎn)置。如果一個(gè)矩陣是正交矩陣,那么他的轉(zhuǎn)置也會(huì)是正交矩陣。
如何判定一個(gè)矩陣是不是正交矩陣:
根據(jù)正交矩陣的定義得知矩陣的轉(zhuǎn)置乘原矩陣得到的是單位矩陣:
注:c1,c2,c3其實(shí)是代表矩陣每一行或列,畢竟矩陣相乘其實(shí)完全可以看成是兩個(gè)向量做的點(diǎn)乘操作
image.png

從而得知如下9個(gè)等式:
image.png

由此而知只需滿足以下條件即為正交矩陣:
(1)矩陣的每一行(列)為單位矩陣,這樣他們的點(diǎn)積才能為1
(2)矩陣的每一行(列)之間相互垂直,這樣他們的點(diǎn)積才能為0(夾角為90度)

三、矩陣的幾何意義

1、變換(transform)

(1)線性變化(linear transform)
線性變換是指那些可以保留矢量加和標(biāo)量乘的變換:


image.png

如果對(duì)一個(gè)三維向量做線性變換,那么只需要一個(gè)3×3的矩陣就完全足夠了
(2)仿射變換(affine transform)
僅僅有線性變換是不夠的,還需要考慮平移變換,它不是線性變換,因?yàn)樗鼭M足標(biāo)量乘,但不滿足矢量加,所以需要引入仿射變換。放射變換就是合并線性變換和平移變換的變換類型,用一個(gè)4×4的矩陣表示,即把向量擴(kuò)展到四維空間,也就是齊次坐標(biāo)空間(homogeneouse space)。


常見的變換種類和它們的特性

2、齊次坐標(biāo)(homogeneous coordinate)

因?yàn)?×3無法表示平移,所以增加了一個(gè)維度來表示平移,即齊次坐標(biāo)。為每個(gè)矢量增加一項(xiàng)w分量:
(a,b,c,w)。對(duì)于一個(gè)點(diǎn)w=1,對(duì)于一個(gè)矢量w=0,這樣在對(duì)點(diǎn)進(jìn)行線性或非線性變換都會(huì)作用于這個(gè)點(diǎn),如果是矢量,則平移不會(huì)起作用。

3、分解基礎(chǔ)變換矩陣

分解后的矩陣格式

(1)左上角的3×3的矩陣用于線性變換
(2)右上角的3×1的矩陣用于平移
(3)左下角的1×3矩陣是一個(gè)0矩陣(0,0,0)
(4)右下角是1

4、平移矩陣

點(diǎn)平移

從上面的矩陣可看出,相當(dāng)于在x,y,z方向上增加了tx,ty,tz的距離,即發(fā)生了平移。其實(shí)就是4×4的矩陣每一行組成的矢量與原矢量進(jìn)行了的點(diǎn)乘操作:
(1,0,0,tx)·(x,y,z,1)=x+tx,其中w=1,即表示這是一個(gè)點(diǎn),如果w=0則說明是一個(gè)矢量


矢量平移

我們可以法線如果是矢量平移,則并不會(huì)發(fā)生作用,這就是w的作用。
由此也可以看出平移矩陣并不是正交矩陣,因?yàn)樗⒉粷M足正交矩陣的兩條要求。


平移矩陣的逆矩陣

5、縮放矩陣

點(diǎn)的縮放

矢量縮放

縮放的逆矩陣

當(dāng)縮放系數(shù)相等(kx=ky=kz)時(shí),被稱為統(tǒng)一縮放(uniform scale),如果系數(shù)不相等則則稱為非統(tǒng)一縮放。統(tǒng)一縮放不會(huì)改變角度和比例信息,非統(tǒng)一縮放會(huì)改變與模型相關(guān)的角度和比例。
注:以上的矩陣變換只適用于沿坐標(biāo)軸方向進(jìn)行縮放,如果想沿任意方向進(jìn)行縮放,需要進(jìn)行復(fù)合變換,先把縮放軸換成標(biāo)準(zhǔn)的坐標(biāo)軸,然后再沿標(biāo)準(zhǔn)坐標(biāo)軸進(jìn)行縮放

6、旋轉(zhuǎn)矩陣

繞著空間X軸旋轉(zhuǎn)

繞著空間Y軸旋轉(zhuǎn)

繞著空間Z軸旋轉(zhuǎn)

旋轉(zhuǎn)矩陣是正交矩陣,幾個(gè)旋轉(zhuǎn)矩陣串聯(lián)同樣也是正交的

7、復(fù)合變換

我們可以把平移、旋轉(zhuǎn)、縮放組合起來,因?yàn)榫仃嚥粷M足交換律,所以乘法的順序很重要,在大多數(shù)情況下我們約定變換順序:先縮放,在旋轉(zhuǎn),最后平移
變換的順序不同會(huì)得到不同的變換結(jié)果,究其本質(zhì)就是矩陣不滿足交換律。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容