首先,作為一個(gè)游戲開發(fā)者為什么需要學(xué)習(xí)矩陣?因?yàn)樵谖覀兊挠螒蛑芯仃嚳梢詫?shí)現(xiàn)對(duì)原來(lái)物體的縮放,平移,旋轉(zhuǎn)的線性變換(計(jì)算機(jī)最快以及最高效的旋轉(zhuǎn)為歐拉角),矩陣就是我們實(shí)現(xiàn)旋轉(zhuǎn)的一種基本方式,在我們3D游戲開發(fā)中用得最多的為3X3的矩陣,可以完成對(duì)XYZ軸的旋轉(zhuǎn),而4X4的齊次矩陣則是在旋轉(zhuǎn)的基礎(chǔ)上增加了平移變換。
??現(xiàn)在開始來(lái)介紹矩陣,我們之前知道向量相當(dāng)于標(biāo)量的數(shù)組,那矩陣就是向量的數(shù)組。
矩陣的類型:
方陣:??行數(shù)與列數(shù)相等的矩陣叫做方陣。
對(duì)角矩陣:??除對(duì)角線上以外的元素都為0的矩陣叫做方陣。
單位矩陣:??除對(duì)角線上以外的元素都為0,并且對(duì)角線上的元素都為1的矩陣叫做方陣。
向量以矩陣來(lái)表示:向量同時(shí)也可以作為矩陣使用,列向量相當(dāng)于3x1的矩陣
矩陣的轉(zhuǎn)置:矩陣的行和列的交換成為矩陣的轉(zhuǎn)換。對(duì)角矩陣和單位矩陣的轉(zhuǎn)置等于它本身(D)(矩陣的轉(zhuǎn)置非常重要,因?yàn)橹疤岬?x4的齊次矩陣可以同時(shí)做到平移和旋轉(zhuǎn)的變換。而齊次矩陣的性質(zhì)就是它的逆等于它的轉(zhuǎn)置,我們可以通過(guò)轉(zhuǎn)置輕松的求得逆)
向量可以作為矩陣表示同樣可以實(shí)現(xiàn)轉(zhuǎn)置。
矩陣的相關(guān)公式。
標(biāo)量與矩陣的乘法:標(biāo)量與矩陣的乘法等于這個(gè)與矩陣中每個(gè)元素相乘
矩陣與矩陣相乘:矩陣與矩陣相乘需要遵循前一個(gè)矩陣的行數(shù)需要等于后一個(gè)矩陣的列數(shù)?。?strong>矩陣的乘法是不遵循乘法交換律的除非其中一個(gè)矩陣為單位矩陣)
????第一個(gè)矩陣決定了最后得到矩陣的行數(shù),第二個(gè)矩陣決定了列數(shù)
????????????????AB!=BA
矩陣的乘法公式:
單位矩陣的乘法:
矩陣的乘法結(jié)合律等:
向量與矩陣的乘法:(行向量與列向量分別與矩陣相乘結(jié)果是不同的)
-
行向量:
Paste_Image.png -
列向量:
Paste_Image.png
從以上可以看出行向量與矩陣相乘需要左乘,列向量則需要右乘。
矩陣的幾合解釋:(0,1)和(1,0)兩個(gè)向量通過(guò)矩陣乘法實(shí)現(xiàn)了旋轉(zhuǎn)和大小的變換
實(shí)際上把這個(gè)平面上的點(diǎn)都進(jìn)行了變換
可以發(fā)現(xiàn)需要對(duì)2D的物體實(shí)現(xiàn)縮放以及旋轉(zhuǎn)變換我們使用2x2的矩陣就可以實(shí)現(xiàn)
那3D的呢? 我們就需要使用3x3的矩陣:
矩陣的編程實(shí)現(xiàn):(相關(guān)運(yùn)算符需要重載實(shí)現(xiàn))
-
運(yùn)算符的重載,矩陣乘法
Paste_Image.png - 矩陣的乘法,在源文件中實(shí)現(xiàn)。