在GDI+中用Mattix类对2D矢量图形进行平移、缩放操作

 

在GDI+中用Mattix类对2D矢量图形进行平移、缩放操作

1.    GDI+中点坐标的格式及矩阵乘法的定义

GDI+中的的点按照1行3列的格式,即(x坐标,y坐标,1),其中1为哑元坐标。变换矩阵为3行3列格式,根据矩阵的乘法,变换后的坐标仍为1行3列的格式。

根据矩阵乘法的定义,A*B与B*A不一定相等,所以在对图形的坐标系实行多种变换时,图形变换的先后顺序将直接影响变换的结果。

在GDI+中,不同变换矩阵的顺序通过MatrixOrder来来调整,默认采用Matrix. Prepend矩阵放置方式,另一种放置方式为Matrix. Append,当矩阵的乘法运算时提供了选项。例如,坐标点P,平移变换矩阵T,比例变换矩阵S,采用P*T*S的顺序时,在GDI中分为两步走:

第一步,T变换:由于是坐标点乘以变换矩阵,不需要对乘法顺序进行选取。

dc.TranslateTransform( 150 150 );     // 平移变换

第二步,S变换:由于T*S,此时需要说明乘法顺序

dc.ScaleTransform( 1.75f 0.5f , MatrixOrder.Append);  // 比例变换,后置
dc.ScaleTransform( 1.75f 0.5f );      // 比例变换,默认前置
// dc.ScaleTransform(1.75f, 0.5f, MatrixOrder.Prepend);

2.  测试实例


定义一个矩形
None.gif Rectangle rect  =   new  Rectangle( 0 0 150 150 );

不同的变换顺序得到不同的结果。图

1 和图 2 分别显示了先平移变换后比例变换的结果和先比例变换后平移变换的结果,其中红色表示变换前的图形,蓝色表示中间变换的结果,黑色表示最终的结果。
TS1.jpg
                                              图1 先平移后缩放
TS2.jpg
                                            图2 先缩放后平移
  作者采用 Mathcad 软件验证了上面的结果,如图3所示。
TS4.png 
                                              图3 角点坐标计算

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值