If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

多个转换

现在,你已经学会了基础的平移、旋转与缩放。让我们来谈谈我们在开始的时候掠过的复杂部分,并且看看如何将他们一起使用。

顺序很重要

当您执行多个转换时, 顺序会产生影响。先旋转,再平移,最后缩放得到的结果与先平移,再旋转,最后缩放的结果是不一样的。下面是一个示例程序:
你使用的顺序取决于所需的效果。请记住,你移动的是图纸,而不是对象本身。你应该找到适合你的顺序。

变换矩阵

每次进行旋转、平移或缩放时,执行转换所需的信息都会被放到到一个数字表中。这张表,或者说矩阵(Matrix),只有很少的几行和几列。然而,通过神奇的数学成就,它包含了执行任何一系列转换所需的所有信息。这就是为什么 pushMatrix()popMatrix() 的名字里有这个词。
名字的推入(push)和弹出(pop)部分呢?这些都来自一个被称为堆栈(stack)的计算机概念。它的工作原理就像自助餐厅里的一个带弹簧的盘子容器。当有人将盘子放在上面的时候,盘子的重量会使其向下沉(push)。当有人需要盘子时,他就可以从上面拿下来,而这之后下面的托盘就会向上一小点(pop)。
类似的,pushMatrix() 将坐标系的当前状态放在内存区域的最上面,而 popMatrix() 则会将该状态拉回。前面的示例就使用了 pushMatrix()popMatrix() 来确保坐标系在绘图之前的所有地方都已经“清空”了。在所有其他示例中,由于后续没有进行转换,对这两个函数的调用并不是必要的。但是保存、还原坐标系的状态并没有什么不好。所以你最好在做任何转换之前都用一下上述两个函数。
还有一个 resetMatrix() 函数(重置矩阵)。它会将矩阵重置到原始的状态(”标识矩阵“),但推入(push)和弹出(pop)函数一般总是比它更好。
想要了解或回顾代数中的矩阵是如何工作的?你可以看看可汗学院上的矩阵,特别是矩阵与几何变换的章节。

本文改编自 J David Eisenberg 的 2D Transformations,在 Creative Commons Attribution-NonCommercial-ShareAlike 许可证下使用。

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.