《Fundamentals Of Computer Graphics》虎书第三版翻译——第六章 矩阵变换

线性代数的机制可以用来表达在3D场景中排列对象、用摄像机观察它们并将它们放到屏幕上所需的许多操作。几何变换,如旋转、平移、缩放和投影可以通过矩阵乘法来完成,而用于实现这一目的的变换矩阵是本章的主题。我们将展示一组点如何转换,如果这些点被表示为从原点出发的偏移向量,并且我们将使用图6.1所示的时钟作为点集的一个示例。把时钟想象成一堆点它们是矢量的端点它们的尾巴在原点。我们还讨论了这些变换对位置(点)、位移向量和表面法向量的不同作用

6.1 2D线性变换

我们可以使用一个2 × 2矩阵来改变或变换一个2D向量:

在这里插入图片描述

这种运算是一个线性变换,它取一个2维向量,然后通过一个简单的矩阵乘法得到另一个2维向量。

通过这个简单的公式,我们可以实现各种有用的转换,这取决于我们在矩阵中放入的元素,就像下面几节将要讨论的那样。出于我们的目的,考虑沿x轴移动为水平移动,沿y轴移动为垂直移动。

6.1.1 缩放

最基本的变换是沿着坐标轴的缩放。这个变换可以改变长度和可能的方向:
在这里插入图片描述

注意这个矩阵对一个带有笛卡尔分量(x, y)的向量做了什么:
在这里插入图片描述

通过观察轴向比例矩阵我们可以读出两个比例因子。
例如。将x和y一致缩小1 / 2的矩阵是(图6.1)
在这里插入图片描述

一个矩阵可以水平缩放一倍,垂直缩放三倍(看图6.2)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

6.1.2 切变

切变是一种你向侧面推东西,产生的效果类似一副你用手推过的牌;底部的卡片保持不变,卡片被推的越远,他们就越接近扑克的牌堆顶。水平和垂直切变矩阵为

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(事实上,圆在任何矩阵变换下的图像都是椭圆。)
在这两种情况下,切变时钟的方形轮廓变成平行四边形,而切变时钟的圆形表面变成椭圆形。
另一种考虑切变的方法是只考虑垂直(或水平)轴的旋转。取垂直轴并使其顺时针倾斜一个角度φ的剪切变换是
在这里插入图片描述

同样地,同样,水平轴逆时针旋转角度φ的切变矩阵为
在这里插入图片描述

6.1.3 旋转

假设我们想逆时针旋转向量a一个角φ以得到向量b(图6.5)。如果a与x轴成α角,它的长度是r = x2a + y2a,我们知道
在这里插入图片描述

因为b是a旋转产生的,所以它的长度也是r。因为b与a旋转了一个角φ,所以b与x轴形成一个角(α + φ)。使用三角加法恒等式(第2.3.3节):
在这里插入图片描述

替换xa=rcosα和ya=rsinα得到
在这里插入图片描述

从矩阵考虑,使a变换到b的变化矩阵为
在这里插入图片描述

例如一个将向量旋转45度的矩阵为(图6.6)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在我们的框架中,顺时针旋转π/6弧度(30度)的矩阵是一个旋转−π/6弧度的矩阵(见图6.7):
在这里插入图片描述

在这里插入图片描述

因为旋转矩阵每一行的模都为1 (sin²φ+cos² φ = 1),并且这两行是正交的(cos φ(−sin φ) + sin φ cos φ = 0),我们可以看出旋转矩阵是正交矩阵(第5.2.4节)。通过观察这个矩阵,我们可以读出两对标准正交向量:这两列,就是变换将标准基向量(1,0)和(0,1)发送到的向量;而这些行,就是这些向量这些向量是由变换传递给标准基向量的。
(简单地说,Rei = ui和Rvi = ui,对于包含ui列和vi行的旋转。)

6.1.4 反射

我们可以通过使用带有负比例因子的比例来反映任意一个坐标轴上的向量(见图6.8和6.9):
在这里插入图片描述在这里插入图片描述

虽然人们可能认为对角线上两个元素都有−1的矩阵也是一个反射,但实际上它只是旋转了π弧度。
(这种旋转也可以被称为“通过原点的反射”。)

6.1.5 转换的组合和分解

对于图形程序来说,对一个对象应用多个转换是很常见的。例如,我们可能想要首先应用缩放S,然后旋转r。这将在2D向量v1上分两步完成:
在这里插入图片描述

换句话说,我们可以用一个相同大小的矩阵表示一个向量由两个矩阵顺序转换的效果,我们可以通过将两个矩阵相乘来计算:M = RS(图6.10)。记住这些变换首先从右边应用是非常重要的。矩阵M = RS首先应用S,然后应用R。
在这里插入图片描述
在这里插入图片描述

例如。的例子。使用我们提出的尺度矩阵,非均匀尺度只能沿着坐标轴进行。如果我们想沿着它的对角线将时钟拉伸50%,以便8:00到1:00移动到西北方向,2:00到7:00移动到东南方向,我们可以使用旋转矩阵结合轴对齐的缩放矩阵来获得我们想要的结果。其思想是使用一个旋转将缩放轴与一个坐标轴对齐,然后沿着该轴缩放,然后返回。在我们的例子中,缩放轴是正方形的“反斜杠”对角线,我们可以使它平行于x轴旋转+45◦。把这些操作放在一起,完整的转换是
在这里插入图片描述

在这里插入图片描述

(记住变换是从右往左读的)
(将乘积转置法则应用到公式RSRT中,这个矩阵是对称的,这并非巧合。)
从旋转和缩放转换构建转换实际上适用于任何线性转换,这一事实导致了一种思考这些转换的强大方法,如下一节所探讨的。

6.1.6 分解的转换

有时有必要“撤销”转换组合,将转换分解为更简单的部分。例如,根据单独的旋转和比例因子向用户表示转换以进行操作通常是有用的,但是转换可能在内部简单地表示为

矩阵,旋转和缩放已经混合在一起。如果可以通过计算将矩阵分解成所需的部分,调整这些部分,然后通过将这些部分再次相乘重新组合矩阵,就可以实现这种操作。
结果是,这种分解或因式分解是可能的,而不管矩阵中的条目是什么——这一事实提供了一种富有成效的方式来思考转换以及它们对被它们转换的几何产生的影响。

对称的特征值分解

让我们从对称矩阵开始。回想第5.4节,一个对称矩阵总是可以使用特征值分解成乘积的形式
在这里插入图片描述

其中R是正交矩阵,S是对角矩阵;我们将R的列(特征向量)命名为v1和v2,我们将S的对角元素(特征值)命名为λ1和λ2。
在几何方面,我们现在可以识别R为旋转,S为缩放,所以这只是一个多步几何变换(图6.13):
在这里插入图片描述

看看这三种变换的效果,我们可以看到它们沿着一对轴具有非均匀尺度的效果。与轴对齐比例一样,轴是垂直的,但它们不是坐标轴;相反,它们是A的特征向量,这告诉我们对称矩阵意味着什么:对称矩阵只是缩放操作——尽管可能是非一致的和非轴对齐的操作

在这里插入图片描述

(如果你喜欢计算维度:一个对称的2× 2矩阵有3个自由度,特征值分解将它们重写为一个旋转角度和两个比例因子。)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

奇异值分解

一种非常类似的分解也可以对非对称矩阵进行:它是奇异值分解(SVD),也在第5.4.1节中讨论过。不同之处在于对角矩阵两边的矩阵不再相同:
在这里插入图片描述

替代单个旋转R的两个正交矩阵称为U和V,它们的列分别称为ui(左奇异向量)和vi(右奇异向量)。在这种情况下,S的对角线项被称为奇异值而不是特征值。几何解释与对称特征值分解非常相似(图6.15):

在这里插入图片描述

主要的区别在于单个旋转和两个不同的正交矩阵之间。这种差异导致了另一种不那么重要的差异。因为SVD的两边有不同的奇异向量,所以不需要负奇异值:我们总是可以翻转一个奇异值的符号,反转一个相关的奇异向量的方向,然后再次得到相同的变换。因此,SVD总是产生一个所有元素都是正的对角矩阵,但是矩阵U和V不能保证是旋转的——它们也可以包含反射。在像图形这样的几何应用程序中,这是一个不便,但较小的一个:很容易区分旋转和反射通过检查行列式,这是旋转和−1 + 1反射,如果旋转,一个奇异值可以否定,导致rotation-scale-rotation序列反映在哪里滚的规模,而不是一个旋转。

在这里插入图片描述

SVD存在的一个直接结果是,我们所见过的所有二维变换矩阵都可以由旋转矩阵和缩放矩阵得到。切变矩阵很方便,但它们在表示转换时不是必需的。总之,每个矩阵都可以通过SVD分解为一个旋转乘以一个尺度乘以另一个旋转。只有对称矩阵可以通过特征值对角化分解为一个旋转乘以一个尺度乘以逆旋转,这样的矩阵是一个在任意方向上的简单尺度。对称矩阵的奇异值分解将产生与特征值分解相同的三重积,这是通过稍微复杂一点的代数操作实现的

路径旋转分解

在这里插入图片描述

这种特殊的变换对于光栅旋转非常有用,因为剪切是图像的一个非常有效的光栅操作;它会带来一些锯齿,但不会留下洞。关键的观察是,如果我们取一个光栅位置(i, j),并对其施加水平切变,我们得到
在这里插入图片描述

如果我们将sj四舍五入到最接近的整数,这就相当于取图像中的每一行,并将其向旁边移动一定的量——每一行都是不同的量。因为它是一行内相同的位移,这允许我们在生成的图像中旋转而没有间隙。垂直切变也有类似的作用。因此,我们可以很容易地实现简单的光栅旋转。
在这里插入图片描述

我们将展示一组点如何转换,如果这些点被表示为从原点出发的偏移向量,并且我们将使用图6.1所示的时钟作为点集的一个示例。把时钟想象成一堆点它们是矢量的端点它们的尾巴在原点。我们还讨论了这些变换对位置(点)、位移向量和表面法向量的不同作用

6.2 3D线性变换

线性三维变换是二维变换的扩展。例如,一个scale沿笛卡尔轴是
在这里插入图片描述

旋转在3D中要比在2D中复杂得多,因为有更多可能的旋转轴。然而,如果我们只是想要绕z轴旋转,这只会改变x和y坐标,我们可以使用不对z进行操作的2D旋转矩阵:

在这里插入图片描述

类似的,我们可以构造沿着X轴和y轴的矩阵:
在这里插入图片描述

我们将在下一节讨论关于任意轴的旋转。在二维空间中,我们可以沿着一个特定的轴切变。例如,

在这里插入图片描述

与2D变换一样,任何3D变换矩阵都可以使用SVD分解为一个旋转、缩放和另一个旋转。任何对称的三维矩阵都有一个特征值分解为旋转、缩放和逆旋转。最后,三维旋转可以分解成三维切变矩阵的乘积

6.2.1 任意3D旋转轴

在2D,3D中旋转是正交矩阵。在几何上,这意味着三行矩阵是三个互相正交的单位向量的笛卡尔坐标,如第2.4.5节所讨论的。列有三个,可能是不同的,互相正交的单位向量。有无数个这样的旋转矩阵。我们写下这样一个矩阵:
在这里插入图片描述

这里,u=xux+yuy+zuz,v和w同理。从这三个向量都是正交的我们可以知道
在这里插入图片描述

我们可以推断出旋转矩阵的一些性质通过将它应用于向量u v w,例如,
在这里插入图片描述

注意,Ruvwu的这三行都是点积:
在这里插入图片描述

类似地,Ruvwv = y和Ruvww = z,所以Ruvw通过旋转将基uvw取到相应的笛卡尔坐标轴上。

如果Ruvw是一个行正交的旋转矩阵,那么RTuvw也是一个列正交的旋转矩阵,实际上是Ruvw的逆(正交矩阵的逆总是它的转置)。重要的一点是,对于变换矩阵,代数逆也是几何逆。因此,如果Ruvw使u到x,那么RTuvw使x到u,同样适用于v和y,我们可以确定:
在这里插入图片描述

所以我们总是可以从标准正交基得到旋转矩阵。如果我们想绕任意向量a旋转,我们可以用w = a形成一个标准正交基,把这个基旋转到规范基xyz,绕z轴旋转,然后把规范基旋转回uvw基。在矩阵形式下,绕w轴旋转φ角:
在这里插入图片描述

这里我们有一个单位矢量w,方向是a(即a除以它自己的长度)。但是u和v是什么呢?第2.4.6节给出了求合理u和v的方法。

如果我们有一个旋转矩阵,我们希望以轴-角的形式进行旋转,我们可以计算一个真实的特征值(它将是λ = 1),相应的特征向量是旋转轴。这是一个不因旋转而改变的轴。
在第17章中,除了旋转矩阵外,还比较了几种常用的表示旋转的方法。

6.2.1 变换法向量

虽然我们使用的大多数三维向量表示位置(从原点偏移的向量)或方向,比如光线来自哪里,但一些向量表示表面法线。曲面法向量垂直于曲面的切平面。这些法线不会以我们想要的方式变换,当下表面被变换时。例如,如果曲面上的点被一个矩阵M变换,一个与曲面相切的向量t乘以M就与变换后的曲面相切。然而,被M变换的曲面法向量n可能并不垂直于变换后的曲面(图6.17)。

我们可以推导出一个变换矩阵N它把N变成一个垂直于变换曲面的向量。解决这个问题的一种方法是注意到面法向量和切向量是垂直的,所以它们的点积是零,用矩阵形式表示为
在这里插入图片描述

如果我们表示所需的变换向量为tM = Mt和nN = nN,
我们的目标是求出N,使nTN tM = 0。我们可以通过代数技巧求出N。首先,我们可以在点积中加入一个单位矩阵,然后利用M−1M = I:
在这里插入图片描述

尽管上面的操作没有明显地得到任何结果,但请注意,我们可以添加括号,使上面的表达式更明显地成为点积:
在这里插入图片描述

这意味着垂直于tM的行向量是上面表达式的左边部分。这个表达式对切平面上的任何切向量都成立。由于3D中只有一个方向(及其对方向)垂直于所有这些切向量,所以我们知道上面表达式的左侧一定是nN的行向量表达式,即nTN,因此我们可以推断N:

在这里插入图片描述

因此,我们可以看到,正确变换法向量使其保持正态的矩阵是N = (M−1)T,即逆矩阵的转置。
因为这个矩阵可以改变n的长度,我们可以用任意标量乘以它,它仍然会产生方向正确的nN。回忆一下,在第5.3节中,矩阵的逆等于余因子矩阵的转置除以行列式。因为我们不关心法向量的长度,我们可以跳过除法,发现对于一个3 × 3矩阵,
在这里插入图片描述在这里插入图片描述

开摆开摆,现代狗都不学!

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值