《Practical WPF Charts and Graphics 》翻译——之七——第2章

来源:互联网 发布:怎么做淘宝店供应商 编辑:程序博客网 时间:2024/06/06 12:55

第二章

 

2D变换

 

在前面一章中,你学习了同时使用XAML和后台代码文件的基本WPF编程。为了创建现实WPF应用程序中的图形和图表,你需要理解图形对象的变换操作。

       在一个图形应用程序中,操作能够在不同的坐标系统中表示。从一个坐标空间移动到另一个坐标空间需要使用变换矩阵。在本章中,我们回顾向量,矩阵和2D空间里变换的数学基础。这里,我将通过想你展示它们的属性的更正式的说明来提到矩阵和变换在图形和图表应用程序中的重要性。我们我们自己在不同坐标系统里的线性变换。这些变换包括简单的拉伸,反射,平移和旋转。你将学习怎么在WPF里进行矩阵操作和图形对象变换。更多复杂的3D变换将在第12章讲解。

 

矩阵和变换基础

 

向量和矩阵在变换过程中扮演重要的角色。WPF使用列为主定义向量和矩阵。因此,在WPF里一个向量是一个列数组,一个矩阵是一个多维数组。这部分介绍2D矩阵和2D变换基础。通过改变一个图形对象在世界坐标系统里的坐标,比如移动(zoom)或者平移,你可以轻易地将图形对象移动到屏幕的另一部分。然而,如果你的图形包含不止一个对象,你可能想移动其中一个对象而不影响其他对象。这种情况下,你不能使用简单的移动(zoom)和平移去移动对象,因为这样将会移动其他对象。

但是你可以应用一个变换到你想要移动的对象上。这里我们将讨论拉伸,选择和平移一个对象的变换。

 

向量和点

 

在一个列为主的展示中,一个向量是一个展示2D显示的列向量。一个点,换句话说,通过它的X和Y坐标被定义成一个固定的位置,如图2-1所示。


图2-1 点和向量

 

一个向量和一个点的区别是点表示一个固定地位置,而一个向量表示一个方向和大小。因此,一条线段的终点(x1,y1)和(x2,y2)是点,但是V12不同,是一个向量,表示这条线段的方向和长度。在WPF里,下面的代码段是一个合理:

Vector v12 = newPoint(x2, y2) – new Point(x1, y1);

从数学上来讲,你必须记住v12=v2-v1,其中v2和v1是从原点分别到(x1,y1)和(x2,y2)的向量。

 

拉伸

 

为了在X方向伸缩一个对象,你可以简单地通过将X坐标乘以一个拉伸因子Sx。类似的,你也可以在Y方向拉伸一个对象。拉伸过程可以像下面这样表示:


例如,一个通过一个因子2均匀收缩X和Y的拉伸矩阵和在Y方向二等分,而在X方向增加3半的拉伸矩阵分别是,


       这两个拉伸矩阵操作在对象上产生不同的效果,如图2-2所示。


图2-2 在x和y方向(上)均匀收缩一半和在X和Y方向上不均匀拉伸(下)

 

反射

 

通过对一个对象进行X和Y轴的反射,你可以创建一个对象的镜像图片。一个对象相对一个轴反射和拉伸它一样,是使用一个负的拉伸因子。相对所有轴的变换矩阵可以像下面这样的形式写出来:


正如你期望的,一个对角线两个元素都包含-1的矩阵是简单的旋转了180度。

 

旋转


原创粉丝点击