图形学中的变换
二维变换
缩放变换(Scale)
如上图,如果想把一个图形缩小为原来的0.5倍,那么就需要x坐标变为0.5倍,y坐标也变为0.5倍,可以用以下表达式表示
这两个表达式可以用矩阵的形式表示如下
Sx表示在x轴方向上缩放的倍数,Sy表示在y轴方向上缩放的倍数
反射变换(Reflection)
如上图需要将物体以y轴进行镜像,那么可以用以下表达式表达
也可以用矩阵形式的表达
一些其他镜像矩阵
切变变换(Shear)
如上图这个变换好像是拽着图形的右上角沿着x轴向右拉了一段距离,称为剪切变换。
剪切变换有以下特点
- 变换后物体的y坐标保持不变
- x坐标在最高的点平移了a,最低点没有移动
- 其它的点移动距离a * Y (Y表示物体上点的y坐标值)
用矩阵形式的表达为
旋转变换
说旋转,默认指的是 绕原点(0,0)逆时针旋转,下图是物体绕原点逆时针旋转θ角的示意图
当一个点 (𝑥, 𝑦 ) 绕着原单 (0, 0) 旋转 𝜃 角时,变换矩阵可以表示为:
推导过程:
旋转矩阵的是正交矩阵,旋转矩阵的逆等于其转置。\(R_-\theta = R_\theta^T\)
平移变换(仿射变换)
如上图需要把一个图形沿x轴平移tx,沿y轴平移ty,可以用以下表达式表示
无法用前面熟悉的线性变换矩阵的形式表示,也就是说平移变换是非线性变换,只能用以下矩阵形式表示,上面把这种变换称为非线性变换,也叫仿射变换
为了统一,引入齐次坐标。
齐次坐标
点和向量转换为齐次坐标:
向量具有平移不变性,因此向量的齐次方程在后面加0,可以保护向量在平移时不被改变。
最后一位还可以满足向量与点之间的运算:
齐次坐标中的点加点定义为两个点的中点。
普通坐标转化为齐次坐标:
由此可看出齐次坐标表示时是先线性变换再平移。
逆变换
一个物体做一个变换,变换完以后要恢复到原来的位置,变换回原来的位置的过程称为逆变换,逆变换在数学上的实现是乘以变换矩阵的逆矩阵。
组合变换
先平移后旋转:
先旋转后平移:
由此可知:
- 复杂的变换可以由一系列简单的变换得到。
- 变换的循序很重要,因为组合变换由矩阵相乘得到,而矩阵的乘法不满足交换律。
矩阵相乘的顺序:
矩阵没有交换律,因此不能改变乘的顺序,但有结合律,因此可以先将矩阵相乘得到一个矩阵,再将这个矩阵与向量相乘。
分解变换
非原点的旋转变换:
可将整个变换分解为先进行平移变换T(-c),再进行旋转变换R(\(\alpha\)),最后再平移回去T(c)。
刚体变换
只有平移和旋转组成的变换称为刚体变换,例如一个物体先旋转45度在x轴方向上平移一个单位,这样的变换称为刚体变换,刚体变换的本质是一个物体的位置和角度发生了变换,物体本身的形状并不发生任何变化。
上面的变换是先进行线性变换-旋转,在进行仿射变换-平移,这时可以把两个变换的矩阵合并为一个矩阵,两种变换合并为一个矩阵用来表示刚体变换,这个矩阵称为刚体变换矩阵
刚体变换的逆变换
二维刚体变换的逆变换矩阵,只需要把原变换矩阵左上角2×2矩阵(上图蓝色框部分)转置,右侧最后一列(上图红色框部分)的平移分量符号取反。就可以得到刚体变换的逆变换矩阵
三维变换
三维空间的向量和点:
旋转变换
绕x轴旋转:
绕y轴旋转:
绕z轴旋转:
复杂旋转的公式:用简单旋转公式描述复杂旋转