这种技术也能应用到3D转换中。2D中有两个基向量,构成"L"型;3D中有三个基向量,它们形成一个”三脚架“。首先,让我们展示出一个转换前的物品。图7.4展示了一个茶壶,一个立方体。基向量在”单位“向量处。
(为了不使图形混乱,没有标出z轴基向量[0, 0, 1],它被茶壶和立方体挡住了。)
现在,考虑以下3D变换矩阵:
从矩阵的行中抽出基向量,能想象出该矩阵所代表的变换。变换后的基向量、立方体、茶壶如图7.5所示:
这个变换包含z轴顺时针旋转45度和不规则缩放,使得茶壶比以前”高“。注意,变换并没有影响到z轴,因为矩阵的第三行是[0, 0 , 1]。
我们可以通过让比例因子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所示:
总结已知向量并进行代换,得到: