矩阵运算在图形学几何运算中占据重要的地位,常用来进行模型位置变换、坐标系变换等操作。接下来我们看一下矩阵都具有哪些运算方式。
两个具有相同行数和列数的矩阵可以相加,对应元素逐个相加。
[a11, a12] - [b11, b12] = [a11 - b11, a12 - b12]
[a21, a22] + [b21, b22] = [a21 + b21, a22 + b22]
如果一个矩阵A的列数等于另一个矩阵B的行数,那么它们可以相乘。矩阵乘法遵循“点乘”的原则,即A中每一行的元素分别与B中每一列的元素相乘后再求和。
矩阵 M 能和标量k 相乘,结果是一个和 M 维数相同的阵。阵和标相的记法如公式7.4 所示标量经常写在左边,不需要写乘号。这种乘法法则很直观,即用k乘以M 中的每个元素。
$$ k\mathbf{M}=k\left[\begin{array}{cccc}m_{1_{1}}&m_{1_{1}}&m_{3}\\ m_{1_{1}}&m_{2_{2}}&m_{3_{3}}\\ m_{3_{1}}&m_{3_{3}}&m_{3}\end{array}\right]=\left[\begin{array}{cccc}km_{1_{1}}&km_{1_{2}}&km_{1_{3}}\\ km_{1_{1}}&km_{2_{2}}&km_{3}\\ km_{3_{1}}&km_{2_{2}}&km_{3}\end{array}\right] $$
矩阵A和B相乘。矩阵A的列数必须等于矩阵B的行数。可以看下面这个例子:
$$ C = AB = \begin{bmatrix} a_{11} & a_{12} \\ a_{21} & a_{22} \end{bmatrix} \begin{bmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \end{bmatrix} = \begin{bmatrix} a_{11}b_{11} + a_{12}b_{21} & a_{11}b_{12} + a_{12}b_{22} \\ a_{21}b_{11} + a_{22}b_{21} & a_{21}b_{12} + a_{22}b_{22} \end{bmatrix} $$
向量或者点乘矩阵仍然满足矩阵乘矩阵这一规律,向量的列数需要等于矩阵的行数。具体可以看下面这个例子:
$$ \begin{bmatrix}x & y & z\end{bmatrix} * \begin{bmatrix} c_{00}&c_{01}&{c_{02}}&c_{03}\\ c_{10}&c_{11}&{c_{12}}&c_{13}\\ c_{20}&c_{21}&{c_{22}}&c_{23}\\ \end{bmatrix} $$
冰哥说:行向量左乘矩阵时,结果是行向量,列向量右乘矩阵时,结果是列向。另外两种组合是不允许的,不能用行向量右乘矩阵,列向量左乘矩阵。这就证明了为什么webgl是列向量,需要右乘矩阵。
矩阵运算其实并不难,你只需要拿出演草纸,手动算一下就非常容易理解。我们继续后面内容..