图形学基础—矩阵

矩阵

[abcd]\begin{bmatrix}a & b \\c & d \end{bmatrix}

1、矩阵的乘法

矩阵的乘法

给定两个矩阵,要计算乘积,前提是两个矩阵必须能够相乘,也就是第一个矩阵的列数要等于第二个矩阵的行数

矩阵的乘积没有任何的交换,他们相乘的顺序十分重要,通常情况下交换相乘的顺序会得到不一样的结果。但是矩阵的乘积满足结合律和分配律:

(AB)C=A(BC)(AB)C = A(BC)
A(B+C)=AB+ACA(B+C) = AB+AC
(A+B)C=AC+BC(A+B)C = AC+BC

2、矩阵的转置

矩阵的转置就是把矩阵的行和列互换位置

[123456]T=[135246]\begin{bmatrix}1 & 2 \\3 & 4 \\5 & 6 \end{bmatrix}^{T}=\begin{bmatrix}1 & 3 & 5\\2 & 4 & 6 \end{bmatrix}

矩阵转置的性质:

(AB)T=BTAT(AB)^T = B^T A^T

3、单位矩阵

单位矩阵一定是一个m*m的方阵,从左上角到右下角的对角线(主对角线)上的元素均为1。

I33=[100010001]I_{3*3}=\begin{bmatrix}1 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 1\end{bmatrix}

单位矩阵相当于常数中的1,无论什么矩阵乘以一个单位阵,最终得到的矩阵都和原来的矩阵一样。

因此利用这个性质我们可以定义一个新的矩阵类型:逆矩阵

4、逆矩阵

如果能找到一个矩阵,使得矩阵A与之相乘,且不管相乘的顺序,最终都得到一个单位阵,那么我们就把矩阵称为矩阵A的逆矩阵,记做: A1A^{-1}

AA1=A1A=IAA^{-1}=A^{-1} A = I

可以把逆矩阵理解成矩阵的除法。

逆矩阵的性质:

(AB)1=B1A1(AB)^{-1}=B^{-1} A^{-1}

5、矩阵的变换

5.1、缩放矩阵

在三维场景中的缩放矩阵为:[a000d000c]\begin{bmatrix}a & 0 & 0 \\ 0 & d & 0 \\ 0 & 0 & c\end{bmatrix} ,将该矩阵和点(X, Y, Z)相乘后结果为(aX, bY, cZ)。

5.2、反射矩阵

反射矩阵其实是一种特殊的缩放矩阵,将某一个轴的缩放比例改成-1,就可以实现模型相对于某一个平面进行镜面翻转的效果。

在三维场景中,相对于YZ平面的反射矩阵为: [100010001]\begin{bmatrix}-1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{bmatrix} ,将该矩阵和点(X, Y, Z)相乘后结果为(-X, Y, Z)。

5.3、旋转矩阵

旋转矩阵推导

通常情况下,我们计算旋转矩阵都是相对于标准位置进行旋转的。

我们对上图旋转前和旋转后的图形顶点进行分析后,可以发现顶点的变化规律,根据这些规律就可以把旋转矩阵写出来。

沿着X轴旋转:[1000cosθsinθ0sinθcosθ]\begin{bmatrix}1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}

沿着Y轴旋转:[cosθ0sinθ010sinθ0cosθ]\begin{bmatrix}\cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta\end{bmatrix}

沿着Z轴旋转:[cosθsinθ0sinθcosθ0001]\begin{bmatrix}\cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1\end{bmatrix}

旋转矩阵是正交矩阵(它的逆矩阵等于它的转置矩阵),因此如果需要求旋转矩阵的逆矩阵,则只需要求它的转置矩阵就可以了。

5.4、平移矩阵

上面的缩放矩阵、反射矩阵、旋转矩阵都可以写成{X=aX+bY+cZY=dX+eY+fZZ=gX+hY+iZ\begin{cases}X^{`} = aX + bY + cZ\\ Y^{`} = dX + eY + fZ \\ Z^{`} = gX + hY + iZ\end{cases} 这种线性组合的形式。

写成矩阵形式就是[XYZ]=[abcdefghi][XYZ]\begin{bmatrix} X^{`}\\ Y^{`}\\ Z^{`}\end{bmatrix} = \begin{bmatrix}a & b & c \\ d & e & f \\ g & h & i\end{bmatrix} \begin{bmatrix} X\\ Y\\ Z\end{bmatrix},而这种形式无法进行平移变换。

为了使用矩阵计算平移变换,人们创造出了齐次坐标这一天才的发明,使得平移变换也可以表示成初始位置点坐标左乘一个变换矩阵的形式。

齐次坐标使用4个分量来表示三维空间中的点,前三个分量和普通坐标一样,第四个分量为1: [xyz][xyz1]\begin{bmatrix}x\\ y\\ z\end{bmatrix}\rightarrow \begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix}

引入齐次坐标之后,平移变换就可以表示为[xyz1]=[100tx010ty001tz0001][xyz1]\begin{bmatrix}x'\\ y'\\ z'\\ 1\end{bmatrix}=\begin{bmatrix}1 & 0 & 0 & t_{x}\\ 0 & 1 & 0 & t_{y}\\ 0 & 0 & 1 & t_{z}\\ 0 & 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix}

而与此同时缩放变换可以表示成:[xyz1]=[sx0000sy0000sz00001][xyz1]\begin{bmatrix}x'\\ y'\\ z'\\ 1\end{bmatrix}=\begin{bmatrix}s_{x} & 0 & 0 & 0\\ 0 & s_{y} & 0 & 0 \\ 0 & 0 & s_{z} & 0\\ 0 & 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix}

旋转变换(以绕Z轴旋转为例)可以表示成:[xyz1]=[cosθsinθ00sinθcosθ0000100001][xyz1]\begin{bmatrix}x'\\ y'\\ z'\\ 1\end{bmatrix}=\begin{bmatrix}\cos\theta & -\sin\theta & 0 & 0\\ \sin\theta & \cos\theta & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1\end{bmatrix}\begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix}

在齐次坐标下这些基本变换实现了形式上的统一,这种形式的统一意义重大。

5.5、逆变换

逆变换

假如一个物体经过MM变换之后,变成了另一个物体。

那么将变化后的物体变回原本的物体称之为逆变换,在数学上对应的是乘以MM变换的逆矩阵。

一个矩阵MM乘以他的逆矩阵M1M^{-1},一定等于单位阵II

就好像说,一个物体经过MM变换后,再经过M1M^{-1}变换,相当于什么操作都没做。

5.6、矩阵的相乘顺序

前面提到,矩的乘法不存在任何交换律,因此矩阵相乘的顺序十分重要,先平移后旋转和先旋转后平移得到的结果通常会不一样。

5.7、自定义旋转轴

前面提到,我们计算旋转矩阵都是基于标准位置进行旋转的,那么,如果我们不想基于标准位置进行旋转该怎么办?

二维平面中,假如我们想让一个平面基于中心点进行旋转,但是平面的中心点并不在原点上,那么可以先平移平面,使得平面中心点与原点重合,然后再进行旋转操作,最后再将平面平移回原来的位置即可。

而在三维场景中,不仅需要模型的中心点与原点重合,还需要让模型的XYZ轴与世界坐标的XYZ轴重合,而这一步只需要乘上原来模型矩阵的逆矩阵即可。


图形学基础—矩阵
https://www.liaomz.top/2022/02/20/tu-xing-xue-ji-chu-ju-zhen/
作者
发布于
2022年2月20日
许可协议