前一阵找工作的时候,经常有人问我数学怎么样。有些问的比较笼统,有些问的比较具体。比如有个人问我,你了解矩阵吗?我说不了解。在看《3D数学基础》之前,矩阵给我的感觉就跟黑客帝国差不多。为此我特意上easyicon下了个matrix的图标当头像,感觉就是酷。那到底矩阵是什么?
如果现在有人问我,你了解矩阵吗?我会说,矩阵是坐标系变换的有力工具。通常使用三乘三矩阵来描述线性变换,使用四乘四矩阵来描述仿射变换。矩阵的行向量实际上是经过转换的坐标系单位向量。我们可以通过矩阵定义从一个坐标系到另一个坐标系的变换。使用A坐标系的单位向量乘以该变换矩阵,得到的就是变换后的坐标系的单位向量。
通过上述定义,可以看出来和矩阵做乘法的是向量。其实向量也可以看做是一种矩阵,行向量是一乘三矩阵,列向量是三乘一矩阵。使用一个向量和三乘三矩阵做乘法,相当于在三个方向上对该向量进行变换。先从简单的算起。假设矩阵由三个基向量p,q,r(基向量就是+x,+y,+z方向上的单位向量)组成,那么任意向量[x,y,z]乘以该矩阵[p,q,r],等于xp+yq+zr。再使用基向量乘以任意矩阵,发现[1,0,0]乘以任意矩阵M,得到的是M的第一行。换句话说,只有矩阵的第一行能影响到X轴基向量,因此可以把矩阵的每一行解释为对不同轴的变换。我们可以通过计算基向量的变换来计算不同变换的矩阵。通过想象变换后的基向量是理解矩阵的一个好办法。
三乘三矩阵能够用来表达线性变换。什么是线性变换?不包括平移的变换是线性变换,包括平移的是仿射变换。线性变换包括旋转、缩放、镜像、切变、投影等,其中镜像、投影相当于在某个方向上进行值为-1和值为0的缩放,而切变则指的是取出某一个坐标,对这个坐标的值乘以某个因子,再分别他加到其他坐标上去。对于一个三维坐标,可以乘以两个因子分别加到另两个坐标,对二维坐标自然是乘以一个因子加到另一个坐标上去。那么对于一个四乘四矩阵,可以用第四维坐标乘以三个不同的因子分别加到x,y,z坐标上,这样就能表示仿射变换了。其实这种应用还是在三维的范围内,不是四维坐标的仿射。
矩阵还包括很多知识,比如正交矩阵,行列式,矩阵的逆,透视矩阵等等,行列式是为了求逆,而求行列式又要用到代数余子式。正交矩阵包括旋转和镜像,透视矩阵的原理相当于小孔成像,可以通过四乘四矩阵的第四列来实现。四乘四矩阵的第四行向量则是用来进行仿射变换,各有用途,其实都是为了三维坐标系变换服务,只是利用了一些数学技巧而已。此外,矩阵还可以用来描述角位移,也就是旋转矩阵,由于旋转是正交的,因此矩阵的逆就是矩阵的转置,很容易就求出反向变换来,这是他的优势。
矩阵的具体实现涉及到很多公式,最好自己照着公式推导一下,才能更好的理解矩阵。我也是初学者,先简单的总结一下,以后用到的时候,就不至于完全抓瞎。