天行健 君子当自强而不息

3D数学 ---- 矩阵和线性变换(2)

我们可以通过让比例因子k按比例放大或缩小来缩放物体。如果在各方向应用同比例的缩放,并且沿原点“膨胀”物体,那么就是均匀缩放。均匀缩放可以保持物体的角度和比例不变。如果长度增加或减小因子k,则面积增加或减小k^2。在3D中,体积将增加或减小 k^3。

如果需要“挤压”或"拉伸"物体,在不同的方向应用不同的因子即可,这称作非均匀缩放。非均匀缩放时,物体角度将发生变化。视各方向缩放因子的不同,长度、面积、体积的变化因子也各不相同。

如果|k|<1,物体将“变短”;如果|k|>1,物体将“变长”,如果k = 0,就是正交投影,如果k < 0就是镜像。

应用非均匀缩放的效果类似于切变,事实上,非均匀缩放和切变是很难区分的。

 

沿坐标轴的缩放

最简单的缩放方法是沿着每个坐标轴应用单独的缩放因子,缩放是沿着垂直的轴(2D中)或平面(3D中)进行的。如果每个轴的缩放因子相同,就是均匀缩放,否则是非均匀缩放。

2D中有两个不同的缩放因子,Kx和Ky,图8.13展示了应用不同缩放因子后的情况。

凭直觉就可知道,基向量pq由相应的缩放因子单独影响:

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,可以通过vn和k来计算v'。为了做到这一点,将v分解为两个分量,v||和v⊥,分别平行于n和垂直于n,并满足v =v|| + v⊥。v||是vn上的投影,由 (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所示:



posted on 2008-01-12 18:32 lovedday 阅读(1638) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

导航

统计

常用链接

随笔分类(178)

3D游戏编程相关链接

搜索

最新评论