zoukankan      html  css  js  c++  java
  • 在GDI+中用Mattix类对2D矢量图形进行平移、缩放操作

     

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

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

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

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

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

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

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

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

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

    2.  测试实例

    定义一个矩形

    Rectangle rect = new Rectangle(00150150);

    不同的变换顺序得到不同的结果。图1和图2 分别显示了先平移变换后比例变换的结果和先比例变换后平移变换的结果,其中红色表示变换前的图形,蓝色表示中间变换的结果,黑色表示最终的结果。

                                                  图1 先平移后缩放

                                                图2 先缩放后平移
     作者采用Mathcad软件验证了上面的结果,如图3所示。
     
                                                  图3 角点坐标计算

  • 相关阅读:
    java 正则表达式
    jqGrid初次使用遇到的问题及解决方法
    JavaScript设计模式 -- 读书笔记
    CSS 7阶层叠水平
    高性能的JavaScript -- 读书笔记
    javaWeb学习笔记
    eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space.
    解决eclipse插件svn不显示svn信息和显示的信息为数字的问题
    JDK环境变量配置
    Maven3.0.3的环境变量配置
  • 原文地址:https://www.cnblogs.com/ssbpro/p/755132.html
Copyright © 2011-2022 走看看