图形学基本线性变换:缩放、旋转、平移、切变、镜像
图形学基本线性变换:缩放、旋转、平移、切变、镜像
图形学中的线性变换是计算机图形学、游戏开发、计算机视觉等领域的核心技术之一。本文详细介绍了图形学中的基本线性变换,包括缩放、旋转、平移、切变、镜像等变换,并通过矩阵运算的方式进行了深入的解释。
线性变换定义
变换都可以使用以下表达式表示:
使用矩阵形式表示为:
继而表示为:输出坐标 = 变换矩阵 × 输入坐标 的形式
满足以上条件的变换称为线性变换
(1)缩放变换
如果想把一个图形缩小为原来的0.5倍,那么就需要x坐标变为0.5倍,y坐标也变为0.5倍,可以用以下表达式表示:
这两个表达式可以用矩阵的形式表示如下:
上面的矩阵表达式针对x轴和y轴进行相同比例的缩放,实际中两个方向上的缩放可能不尽相同,例如x轴缩放为0.5倍与轴不缩放,这时只需要把矩阵表达式稍作修改即可:
Sx表示在x轴方向上缩放的倍数,Sy表示在y轴方向上缩放的倍数
缩放变换效果如下所示:
(2)镜像变换
将物体以y轴进行镜像,那么可以用以下表达式表达:
也可以用矩阵形式的表达:
同理, 一些其他镜像矩阵如下:
镜像变换效果如下所示:
(3)剪切变换
剪切变换好像是拽着图形的右上角沿着x轴向右拉了一段距离,称为剪切变换。
用矩阵形式的表达为:
剪切变换效果如下所示:
(4)原点旋转变换
默认指的是绕原点(0,0)逆时针旋转,下图是物体绕原点逆时针旋转θ角的示意图。
写成矩阵的形式:
(5)非原点的旋转变换
我们学会了物体绕原点旋转,对于一个不是绕原点旋转的变换需要换个思维实现,实现过程分三步:
1、将物体旋转要绕的点移动到原点,
2、移到原点后做旋转变换
3、旋转变换完成后平移到原来的位置
这个过程用一个表达式表示:
矩阵变换作用在物体上的顺序是从右到左,所以上面表达式表示,先平移T(-c)到原点,然后旋转R(α),最后平移到原来位置T(c),一定要注意先后顺序
(6)平移变换(仿射变换)
把一个图形沿x轴平移tx,沿y轴平移ty,可以用以下表达式表示:
它无法用前面熟悉的线性变换矩阵的形式表示,也就是说平移变换是非线性变换。只能用以下矩阵形式表示,上面把这种变换称为非线性变换,叫仿射变换。
引入齐次坐标把平移变换也能够像其他变换一样用同样的形式表示,使用起来更加便捷统一。
平移变换齐次坐标表示:
平移变换原本是仿射变换,通过引入齐次坐标后,可以使用线性变换的形式表示
这样我们的目的就达到了,把平移变换也表示为一个矩阵乘以一个坐标的线性变换的形式。
仿射变换效果如下所示:
(7)逆变换(逆矩阵)
一个物体做一个变换,变换完以后要恢复到原来的位置,变换回原来的位置的过程称为逆变换,逆变换在数学上的实现是乘以变换矩阵的逆矩阵。
(8)组合变换(进行平移和旋转变换,注意矩阵乘法结合律)
上图中有两套组合变换:
先平移(1,0),再旋转45度
先旋转45度,再平移(1,0)
你会发现虽然都作了相同的变换,但是变换的顺序不同最终的结果也不同,是因为矩阵A乘矩阵B与矩阵B乘矩阵A的结果不同。
组合变换矩阵相乘应用的顺序
上图中A1,A2一直到An表示变换矩阵,一个点进行组合变换时,应用在该点的矩阵是从右到左。即矩阵An乘An-1一直乘到A1,实际应用到点的顺序是A1,A2一直到An
矩阵乘法结合律使用。
我们知道矩阵相乘交换律不适用,但是适用结合律,既然适用有什么妙用,接下来看看
一个点做多个变换即多个矩阵相乘再乘以这个点,根据矩阵乘法结合律,可以先把这些矩阵相乘,乘完在与这个点相乘,只要保证矩阵相乘的顺序不变即可
(9)刚体变换(刚体变换矩阵)
刚体变换定义
只有平移和旋转组成的变换称为刚体变换,并没有改变的图形的形状
举例:
一个物体先旋转45度在x轴方向上平移一个单位,这样的变换称为刚体变换,刚体变换的本质是一个物体的位置和角度发生了变换,物体本身的形状并不发生任何变化
假如有一个刚体变换先逆时针旋转45度,在沿x轴平移1个单位,那么这个变换可以用下面的矩阵表示:
上面的变换是先进行线性变换-旋转,在进行仿射变换-平移,这时可以把两个变换的矩阵合并为一个矩阵,之所以可以合并因为在同一个矩阵同时表示两种变换时,会先进行线性变换再进行仿射变换,这与我们提到的变换顺序是一致的,两种变换合并为一个矩阵用来表示刚体变换,这个矩阵称为刚体变换矩阵
刚体变换的逆变换
二维刚体变换的逆变换矩阵,只需要把原变换矩阵左上角2×2矩阵(上图蓝色框部分)转置,右侧最后一列(上图红色框部分)的平移分量符号取反。就可以得到刚体变换的逆变换矩阵