1. 程式人生 > >《Unity3D 實戰核心技術詳解》書中關於矩陣的錯誤

《Unity3D 實戰核心技術詳解》書中關於矩陣的錯誤

不同的 linear 應該 印刷 幫助 tar 線性代數 計算 計算機圖形學

最近一直在學習實時渲染,不免要接觸線性代數。而渲染中,一定會用到矩陣,當我再次去復習我之前看的書時,發現《Unity3D 實戰核心技術詳解》關於矩陣就有幾處錯誤 ,特標註出來。

書的第一章《3D數學與Unity》,1.3.2講矩陣縮放、1.3.3講矩陣的旋轉。縮放是一個矩陣,後面旋轉針對繞三個不同的軸的旋轉矩陣(x、y、z),總共4個矩陣,其中3個是錯誤的,只有一個繞y軸旋轉是正確的。我不確定是印刷問題,還是作者本身對矩陣了解和掌握的就不深入,但出現這樣的低級錯誤實屬不該。

我直接上圖片,不然口說無憑。

技術分享圖片

技術分享圖片

如第一張圖所示,如果縮放的矩陣如書中所註,那麽x’= x·Sx + y 而不是期望的 x.Sx,同理繞x軸旋轉,那麽x軸的坐標應當是不動的,也就是除了第一列的第一個為1外,其余應該為0,而第二行居然出現了1,那x’= x + y了,這根本就不是旋轉了啊 技術分享圖片

,繞z軸旋轉的就更離譜了…

好了,矩陣確實麻煩,但它卻是理解和學習3D必不可少的知識。如果判斷一個矩陣是否正確呢?這裏我推薦《程序員的數學3 —— 線性代數》這本書中的一個方法,如下圖所示。

技術分享圖片

註意看線線的部分,我正是掌握了書中這個簡單的方法,再去看有“錯誤”的那本書的矩陣時,一眼就發現矩陣是錯的。希望這個小技巧和方法能幫助到你:

將輸入的列向量放倒,然後將對應的元素分別相乘。

再額外補充一句,我之前也看孟巖在CSDN上寫的那三篇《理解矩陣》,裏面提及的書有:

《數學:它的內容、方法和意義》

《線性代數五講》

《數學概觀》

《數學拾遺》

《重溫微積分》

《計算機圖形學 —— 幾何工具算法詳解》

因為作者非數學系的專業人士,所以它的描述可能存在不準確的地方,但那是他自己的理解,能幫助到不理解矩陣的人,我覺得也是很有價值的。畢竟大部分人只是需要了解矩陣到底是什麽東東,好奇為什麽要用矩陣呢,至於矩陣更深層次的研究可能就不是那麽在意了。科普有科普的作用,專業有專業的必要。

其實我覺得關於矩陣,看維基百科上的定義已經寫的很清晰、明了了,仔細研究透,也就有個大概的了解了。鏈接地址 https://zh.wikipedia.org/wiki/矩陣

那矩陣到底是什麽,以我目前的理解和認知,矩陣就是映射,

矩陣就是映射,矩陣就是映射(重要的事情說三遍!)

這裏推薦幾個我覺得非常好的視頻給大家,更直觀,進一步降低學習門檻。

【官方雙語/合集】線性代數的本質 - 系列合集(用直觀的動畫、簡潔的語言來講述線性代碼,你值得觀看!)

https://www.bilibili.com/video/av6731067/index_1.html

麻省理工公開課:線性代數
http://open.163.com/special/opencourse/daishu.html

Introduction to Linear Algebra, Fifth Edition(2016) —— 線性代數教程評價最高的書,沒有之一
http://math.mit.edu/~gs/linearalgebra/

Linear Algebra Done Wrong (Sergei Treil)
https://www.math.brown.edu/~treil/papers/LADW/LADW.html

《Unity3D 實戰核心技術詳解》書中關於矩陣的錯誤