前言
开始学习图形学之后,真的后悔自己当初线性代数学的不够扎实,在写这一篇学习笔记之前,也是回看了很多关于向量、矩阵、点乘、叉乘的知识。
目录
前言一.2D线性变换1.缩放2.剪切3.旋转 二.2D仿射变换1.平移 三.齐次坐标一.2D线性变换
1.缩放
缩放是一种针对于沿着坐标轴的变换方式,2D缩放矩阵定义如下:
上述效果代表了分别沿x轴和y轴进行0.5倍缩放变换
2.剪切
剪切是把当前2维图像的一边进行固定,然后向某个方向拉伸,相较于缩放,剪切会改变原先图像的具体样貌
针对上图的2D剪切变换矩阵是:
图像中每一个y坐标不改变,但是不同高度的x左边根据当前高度进行相应的变化,及x’=x+ay
3.旋转
旋转相较于缩放和剪切会稍微复杂一些,在旋转中,我们一般默认旋转中心是坐标轴原点
对于旋转,其实图像上每个点经过的变化是相同的,所以在推导时,我们可以选用图像的几个特殊顶点来进行推导,有助于快速理解。
推导过程这里不再给出,推导结果如下(如果自己推导真的没有结果,那就请记住以下结果):
二.2D仿射变换
1.平移
单纯的平移变换是非常简单容易理解的:
三.齐次坐标
至于为何要引出齐次坐标,原因如下:
如果我们把线性变换和仿射变换放到一起,我们不引入齐次坐标的情况下只能写成如下形式:
这种形式看起来并不是简便的,我们要尽量把线性变换和仿射变换放到同一个变换矩阵中。
于是我们就需要在这里引入齐次坐标的概念了。
齐次坐标的定义:
齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。
我们用三维的向量来表示我们的2维图像变换的操作:
齐次坐标下,对应的缩放、旋转、平移操作
我们把仿射变换和线性变换用齐次坐标统一之后,很多复杂的变换,我们就可以拆分成很多步简单的变换来一步一步实现:
针对上图的变换,我们可以拆分成先旋转再平移的操作:
那么在变换的矩阵的表现上就应该是先进行旋转操作再进行平移操作(注意这里不支持交换律):
先进性的操作矩阵放在后操作的矩阵的右边,向量从右往左一次执行每一个矩阵变换。
针对3D变换,只需在2D变换的基础上增加一个维度,3D变换的齐次坐标也是如此。