【译】计算机图形学基础第四版(5.1)

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

特别声明

本文翻译的是由Steve MarschnerPeter Shirley主要参与编写的的第四版《计算机图形学基础》[英]。
版权归原作者所有。

正文

5 线性代数

也许图形程序最通用的工具是改变或变换点和向量的矩阵。在下一章中,我们将看到如何将向量表示为具有单列的矩阵,以及如何通过与方阵相乘以不同的基来表示向量。我们还将描述如何使用这种乘法来完成向量的更改,例如缩放、旋转和平移。在本章中,我们从几何的角度回顾了基本的线性代数,重点关注在二维和三维情况下运行良好的直觉和算法。

熟悉线性代数的读者可以跳过本章。然而,即使对这些读者来说,也可能有一些启发性的花絮,例如行列式的发展以及奇异值和特征值分解的讨论。

5.1 行列式

我们通常认为行列式是在线性方程的解决方案中产生的。

但是,就我们的目的而言,我们会认为行列式是增加向量的另一种方式。对于2D矢量A和B,行列式| ab |是由A和B形成的平行四边形区域(图5.1)。这是一个签名的区域,如果A和B右手是右手,则符号为正。

image.png

这意味着| ab |= - | ba |。在2D中,我们可以将“右撇子”解释为意味着我们逆时针旋转第一个向量,以将最小角度关闭到第二个矢量。在3D中,必须一次使用三个向量采取决定因素。对于三个3D向量,A,B和C,决定符| ABC |是由三个矢量形成的平行填充(3D平行四边形;一个剪切的3D框)的签名体积(图5.2)。要计算2D决定因素,我们首先需要建立其一些属性。我们注意到,平行四边形的一侧缩放其面积的比例相同(图5.3):

image.png

image.png image.png

此外,我们注意到“剪切”平行四边形不会改变其面积(图 5.4):

image.png

最后,我们看到行列式具有以下性质:

image.png

因为如图 5.5 所示,我们可以“滑动”两个平行四边形之间的边以形成一个平行四边形,而不会改变两个原始平行四边形中任何一个的面积。

现在让我们假设 a 和 b 的笛卡尔表示:

image.png

这个简化使用了 |vv| = 0 对于任何向量 v,因为平行四边形都将与 v 共线,因此没有面积。

在三个维度中,三个 3D 向量 a、b 和 c 的行列式表示为 |abc|。对于向量的笛卡尔表示,平行六面体和平行四边形有类似的规则,我们可以像二维一样进行类似的扩展:

image.png

正如你所看到的,随着维度的增加,以这种方式计算行列式变得越来越难看。我们将在 5.3 节讨论计算行列式的不易出错的方法。

例子: 当将一个向量的表达式计算为其他两个向量的线性组合时,行列式自然会出现——例如,如果我们希望将向量 c 表示为向量 a 和 b 的组合:

image.png

image.png

从图 5.6 可以看出

image.png

因为这些平行四边形只是彼此的剪切版本。求解 bc 收益率

image.png

一个类似的论点产生

image.png

这是克莱默规则的二维版本,我们将在第 5.3.2 节中重新讨论。

5.2 矩阵

矩阵是遵循某些算术规则的数字元素的数组。具有两个行和三列的矩阵的示例

image.png

矩阵经常用于计算机图形,用于各种目的,包括表示空间变换。在我们的讨论中,我们假设矩阵的元素都是实数。本章介绍了矩阵算术的力学和“正方形”矩阵的决定因素,即具有与列相同数量的行数的矩阵。

5.2.1 矩阵算术

矩阵乘以常数得到一个矩阵,其中每个元素都乘以该常数,例如,

image.png

矩阵还逐个元素添加,例如,

image.png

对于矩阵乘法,我们将第一个矩阵的行与第二个矩阵的列“相乘”:

image.png

所以得到的产品的元素 pij 是

image.png

只有当左矩阵的列数与右矩阵的行数相同时,才可能取两个矩阵的乘积。例如,

image.png

在大多数情况下,矩阵乘法是不可交换的:

image.png

此外,如果 AB = AC,则不一定遵循 B = C。幸运的是,矩阵乘法是关联和分配的:

image.png

5.2.2 矩阵运算

我们想要一个实数倒数的矩阵模拟。我们知道实数 x 的倒数是 1/x,x 和它的倒数的乘积是 1。

我们需要一个可以认为是“矩阵”的矩阵 I。这仅适用于方阵,称为单位矩阵;它由对角线上的一个和其他地方的零组成。例如,四乘四单位矩阵是

image.png

矩阵A的逆矩阵A -1是确保AA -1 = I的矩阵。例如,

image.png

请注意,A -1的倒数为A。因此AA -1 = A -1 A =I。两个矩阵的产物的倒数是倒置的乘积,但随着顺序逆转:

image.png

我们将返回本章稍后的计算逆问题。

矩阵A处的转置AT具有相同的数字,但行用列切换。如果我们标记为a'ij的条目AT,则

image.png

例如:

image.png

两个矩阵乘积的转置遵循类似于公式 (5.4) 的规则:

image.png

方阵的行列式只是矩阵列的行列式,被视为一组向量。行列式与刚刚讨论的矩阵运算有几个很好的关系,我们在这里列出以供参考:

image.png

5.2.3 矩阵形式的向量运算

在图形中,我们使用方形矩阵来转换表示为矩阵的向量。 例如,如果您有一个2D矢量a =(xa,ya),并希望将其旋转90度,以形成向量a =(-ya,xa),则可以使用2×2的乘积矩阵和2×1矩阵,称为列矢量。矩阵形式的操作是

image.png

我们可以通过使用该矩阵的转置并在左侧乘以(“预乘”)与行向量来获得相同的结果:

image.png

如今,使用列向量的后乘法是相当标准的,但在许多较旧的书籍和系统中,您会遇到行向量和预乘法。唯一的区别是必须将变换矩阵替换为其转置。

我们也可以使用矩阵形式对向量的操作进行编码。如果我们把点积的结果看成一个 1×1 的矩阵,可以写成

image.png

例如,如果我们采用两个 3D 向量,我们得到

image.png

相关向量积是两个向量之间的外积,可以表示为左边为列向量,右边为行向量的矩阵相乘:abT。结果是一个矩阵,由 a 的条目与 b 的条目的所有对的乘积组成。对于 3D 向量,我们有

image.png 从向量运算的角度考虑矩阵乘法通常很有用。

为了说明使用三维情况,我们可以将 3 × 3 矩阵视为三个 3D 向量的集合,有两种方式:它由三个列向量并排组成,或者由三行向量堆叠起来。例如,矩阵向量乘法 y = Ax 的结果可以解释为一个向量,其条目是 x 与 A 的行的点积。命名这些行向量 ri,我们有

image.png

或者,我们可以将相同的乘积视为 A 的三列 ci 的总和,由 x 的条目加权:

image.png

使用相同的想法,可以将矩阵矩阵乘积AB理解为包含所有a行的成对点产物的数组,其中所有B列(cf.(5.2));作为矩阵A的产品的集合,其所有B的圆柱向量从左到右排列;作为与矩阵B的所有行矢量的产品集合,堆叠在上到底部;或作为A与B的所有行的所有列的成对外部产品的总和。

如有错误,麻烦联系我共同指出,加以修正~

猜你喜欢

转载自juejin.im/post/7107965873549213710