计算机图形学(二)|矩阵

26 阅读4分钟

图形变换是计算机图形学开发的重要内容,那么平移、旋转、缩放、剪切等变换是怎么实现的呢?这些图形变换都是通过矩阵实现的。矩阵是图形学中变换的数学语言,能高效、统一地描述和计算物体的位置、姿态、形状变化,是连接几何与渲染的关键工具。

从向量到矩阵

向量是单个几何元素的表示方法,比如用 (x,y,z) 描述三维空间中的点,但是无法高效处理多个向量或复杂变换

为了整合多个向量,将其按行排列或者按列排列,进而形成矩阵这个结构体,可以批量计算多个向量

所以矩阵就是从单个向量的几何描述,到多个向量的结构化组织与运算升级,适配图形学批量变换与统一计算的需求。

矩阵的定义

矩阵(Matrix) 是一个按照长方阵列排列的复数或实数集合,其本质是向量的有序集合,简单来说矩阵就是一个矩形的数字、符号或表达式数组,矩阵中每一项叫做矩阵的元素

矩阵可以通过(i, j)进行索引,i是行,j是列,下面是一个2×3矩阵的例子:

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

矩阵的运算

和向量一样,矩阵也有自己的运算,矩阵运算分为矩阵的加法运算、减法运算、数乘运算、相乘运算、还有矩阵与向量相乘的运算

矩阵相加

矩阵相加就是两个矩阵对应元素相加,如下所示:

矩阵相减

矩阵相加就是两个矩阵对应元素相减,如下所示:

矩阵的数乘

矩阵的数乘就是一个矩阵与一个数相乘,即矩阵的每一个元素分别与这个数相乘,下面的例子展示了数乘的过程: 它在图形学的几何意义是用一个数来缩放矩阵的所有元素

矩阵相乘

相对于签名三种运算方法来说,矩阵相乘是相对比较复杂

矩阵相乘的计算规则是:

结果矩阵中第i行、j列的元素 = 前矩阵A第i行的行向量与后矩阵B第j列的列向量的点积

cij=Ai,:B:,j=k=1Naikbkjc_{ij} = \boldsymbol{A}_{i,:} \cdot \boldsymbol{B}_{:,j} = \sum_{k=1}^{N} a_{ik} \cdot b_{kj}

点积:对应元素相乘后求和

下面我们来看一个简单的例子:

上面是一个两个2×2矩阵相乘的例子,当行和列不相同时的矩阵相乘如下:

[123456]×[789101112]=[1×7+2×9+3×111×8+2×10+3×124×7+5×9+6×114×8+5×10+6×12]=[5864139154]\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix} \times \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix} = \begin{bmatrix} 1×7+2×9+3×11 & 1×8+2×10+3×12 \\ 4×7+5×9+6×11 & 4×8+5×10+6×12 \end{bmatrix} = \begin{bmatrix} 58 & 64 \\ 139 & 154 \end{bmatrix}

以上就是矩阵相乘的基本方法,但是,两个矩阵想要相乘是要符合一个条件:

只有当左侧矩阵的列数与右侧矩阵的行数相等,两个矩阵才能相乘

同时,矩阵相乘不遵守交换律,即A⋅B≠B⋅A

矩阵与向量相乘

我们知道,矩阵是由向量演变过来的,向量其实就是一个特殊的矩阵,是一个多行一列的矩阵,所以矩阵与向量相乘完全遵循矩阵乘法原则

前提条件是矩阵的列数 = 向量的行数

[123456789]×[102030]=[1×10+2×20+3×304×10+5×20+6×307×10+8×20+9×30]=[140320500]\begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{bmatrix} \times \begin{bmatrix} 10 \\ 20 \\ 30 \end{bmatrix} = \begin{bmatrix} 1×10+2×20+3×30 \\ 4×10+5×20+6×30 \\ 7×10+8×20+9×30 \end{bmatrix} = \begin{bmatrix} 140 \\ 320 \\ 500 \end{bmatrix}

单位矩阵

向量中有单位向量,矩阵中同样有单位矩阵

单位矩阵是一个除了对角线以外都是0的N×N矩阵,比如,三阶单位矩阵如下图所示:

在图形学中单位矩阵是无变换的代表,用单位矩阵乘顶点/方向向量,向量不会发生任何旋转、缩放、平移等变化

总结

本文主要简单介绍了矩阵三方面的内容:

  1. 矩阵和向量的关系,是向量的升级版
  2. 介绍矩阵的定义
  3. 描述矩阵运算的5种形式
  4. 单位矩阵的意义

以上就是本文的内容,非常感谢您能花出宝贵的时间阅读,如果对您有帮助的话,欢迎点赞收藏~

如果本文存在不足之处甚至错误的地方欢迎大家在评论区多多批评指出~我随后改正

如果对这一系列感兴趣的话欢迎点击下方公众号名片关注我,我将会持续更新~