All articles(网络文学目录) All Pictures(图片目录) All Softwares(软件目录)

 
C#中GDI+变形的矩阵表示形式

Writer: qq Article type: Programming skills(编程技巧) Time: 2014/7/11 9:16:27 Browse times: 452 Comment times: 0

C#中GDI+变形的矩阵表示形式


Head photo

Go homepage
Upload pictures
Write articles

C#中GDI+变形的矩阵表示形式

变形的矩阵表示形式
m×n矩阵是排列成m行和n列的一系列数,例如,图1为几个矩阵表示形式。
用户可以通过将单个元素相加来合并两个尺寸相同的矩阵,例如,图2表示两个矩阵相加。

图1 矩阵

图2 矩阵相加
m×n矩阵可与一个n×p矩阵相乘,结果为一个m×p矩阵,但如果两个矩阵相乘,第一个矩阵的列数必须与第二个矩阵的行数相同。例如,图3表示两个矩阵相乘。
如果将平面中的点视为1×2矩阵,则可通过将该点乘以一个2×2矩阵来将该点变换,例如,图23显示了应用于点(2, 1)的几个变换。
图4中显示的所有变换都是线性变换,如果变换(如平移)不是线性的,则不能表示为与2×2矩阵相乘的形式。例如,从点(2, 1)开始,将其旋转90°,然后在x方向将其平移3个单位,在y方向将其平移4个单位,这时可先使用矩阵乘法,再使用矩阵加法来完成此操作,如图5所示。
后面跟一平移的线性变换称为仿射变换。将仿射变换存储于一对矩阵(一个用于线性部分,一个用于平移)的替换方案是将整个变换存储于3×3矩阵。如果要使3×3矩阵起作用,平面上的点必须存储于具有虚拟第3坐标的1×3矩阵中。通常的方法是使所有的第3坐标等于1,例如,矩阵[2 1 1]表示点(2,1)。将图5中“点的平移”转换为仿射变换的结果如图6所示。

图3 矩阵相乘

图4 点的变换

图5 点的平移
在前面的示例中,点(2,1)映射到了点(2,6),请注意,3×3矩阵的第3列数字为:0、0、1,对于仿射变换的3×3矩阵而言,重要的数字是列1和列2中的6个数字,如图7所示,矩阵左上角的2×2部分表示变换的线性部分,第3行中的前两项表示变换的平移部分。

图6 仿射变换

图7 仿射变换分解图
在GDI+中,可以在Matrix对象中存储仿射变换。由于表示仿射变换的矩阵的第3列总是(0,0,1),因此在构造Matrix对象时,只需指定前两列中的6个数即可。
GDI+中,还有一种变换叫复合变换。复合变换是一个接一个的变换序列,它的矩阵表示形式可通过将几个单独的变换矩阵相乘而得到。Matrix类提供构建复合变换的方法包括Multiply、Rotate、RotateAt、Scale、Shear和Translate。
注意:
① 复合变换的顺序非常重要,一般说来,先旋转、再缩放、然后平移,与先缩放、再旋转、然后平移是不同的。同样,矩阵相乘的顺序也是非常重要的,一般说来,ABC 与 BAC 不同。
② Matrix类属于System.Drawing.Drawing2D命名空间。





There are 0 records,
Comment:
Must be registered users to comment(必须是注册用户才能发表评论)

Disclaimer Privacy Policy About us Site Map
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.