《Practical WPF Charts and Graphics 》通译——之九

《Practical WPF Charts and Graphics 》翻译——之九

齐次坐标系里的拉伸


类似的,拉伸方程(2.1)可以在齐次坐标系里可以表示成

《Practical WPF Charts and Graphics 》通译——之九

也可以表示成下面这种形式:

《Practical WPF Charts and Graphics 》通译——之九

       就像连续的平移是加法,我们期望连续的拉伸是相乘。给定

《Practical WPF Charts and Graphics 》通译——之九

和将方程(2.9)带入方程(2.10)得到

《Practical WPF Charts and Graphics 》通译——之九

       前面的方程得到的矩阵结果是

《Practical WPF Charts and Graphics 》通译——之九

       因此,拉伸确实是相乘

       反射式拉伸的一种特殊情况,拉伸因子是-1。你可以用拉伸的方式表示一个反射。

齐次坐标系里的旋转

 

齐次坐标系里的旋转可以表示成

《Practical WPF Charts and Graphics 》通译——之九

我们可以将方程(2.11)写成

《Practical WPF Charts and Graphics 》通译——之九

R(θ)是齐次坐标系里的旋转矩阵。你可以期望两个连续的旋转应该是相加。给定

《Practical WPF Charts and Graphics 》通译——之九

和将方程(2.12)带入方程(2.13)得到

《Practical WPF Charts and Graphics 》通译——之九

《Practical WPF Charts and Graphics 》通译——之九的矩阵结果是

《Practical WPF Charts and Graphics 》通译——之九

因此,旋转确实是相加。


组合变换

 

图形应用程序应用不止一个变换到图形对象上很常见。例如,你也许想要先应用一个拉伸变换S,然后应用一个旋转变换R。你可以组合基本的S,T,R矩阵去产生想要的一般变换结果。组合变换的基本目的是通过应用一个组合的变换到一个点上,而不是一个接一个地应用一系列的变换,由此来增加效率。

考虑关于任意点P1的一个对象的旋转。既然你只知道怎么关于原点旋转,你需要将原始的问题转化成一系列分开的问题。因此,为了关于P1旋转,你需要进行一系列基本的变换:

  •  将它平移到原点
  •  旋转到想要的角度
  •  平移使得从原点回到P1

这一系列变换如图2-4,里面一个矩形关于P1(x1,y1)进行了旋转。首先的平移量是(-x1,-y1),后一个平移量是相反的(x1,y1)。结果和仅仅应用旋转有很大的差别。网状的变换如下

《Practical WPF Charts and Graphics 》通译——之九

《Practical WPF Charts and Graphics 》通译——之九

图2-4 关于P1旋转一个矩形