我们可以通过让比例因子k按比例放大或缩小来缩放物体。如果在各方向应用同比例的缩放,并且沿原点“膨胀”物体,那么就是均匀缩放。均匀缩放可以保持物体的角度和比例不变。如果长度增加或减小因子k,则面积增加或减小k^2。在3D中,体积将增加或减小
k^3。
如果需要“挤压”或"拉伸"物体,在不同的方向应用不同的因子即可,这称作非均匀缩放。非均匀缩放时,物体角度将发生变化。视各方向缩放因子的不同,长度、面积、体积的变化因子也各不相同。
如果|k|<1,物体将“变短”;如果|k|>1,物体将“变长”,如果k
= 0,就是正交投影,如果k < 0就是镜像。
应用非均匀缩放的效果类似于切变,事实上,非均匀缩放和切变是很难区分的。
沿坐标轴的缩放
最简单的缩放方法是沿着每个坐标轴应用单独的缩放因子,缩放是沿着垂直的轴(2D中)或平面(3D中)进行的。如果每个轴的缩放因子相同,就是均匀缩放,否则是非均匀缩放。
2D中有两个不同的缩放因子,Kx和Ky,图8.13展示了应用不同缩放因子后的情况。
凭直觉就可知道,基向量p,q由相应的缩放因子单独影响:
p' = Kxp = Kx [1 0] = [Kx
0]
q' = Kyq = Ky [0 1] = [0
Ky]
用基向量构造矩阵,结果如公式8.6所示:
对于3D,需要增加第三个缩放因子Kz,3D缩放矩阵如公式8.7所示:
沿任意方向缩放
我们可以不依赖于坐标系而沿任意方向进行缩放,设n为平行于缩放方向的单位向量,k为缩放因子,缩放沿穿过原点并平行于n的直线(2D中)或平面(3D中)进行。
我们需要推导出一个表达式,给定向量v,可以通过v,n和k来计算v'。为了做到这一点,将v分解为两个分量,v||和v⊥,分别平行于n和垂直于n,并满足v
=v|| + v⊥。v||是v在n上的投影,由
(v . n)n 可以得到 v||。因为v⊥垂直于n,它不会被缩放操作影响。因此,v'
= v||' + v⊥,剩下的问题就是怎样得到v||'。由于v||平行于缩放方向,v||'可以由公式kv||得出,如图8.14所示:
总结已知向量并进行代换,得到:
既然我们知道了怎样对任意向量进行缩放,当然也就可以计算缩放后的基向量。这里只详细列出2D中的一个基向量的求法,其余的基向量依次类推。我们只给出其结果(注意下面采用列向量形式只是为了使等式的形式好看一些。)
通过基向量构造矩阵,得到以单位向量n为缩放方向,k为因子的缩放矩阵,如公式8.8所示:
3D中,基向量为:
以单位向量n为缩放方向,k为因子的3D缩放矩阵如公式8.9所示: