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 角点坐标计算

  • 相关阅读:
    Pixar 故事公式
    你想住在中国哪里
    tar.gz方式安装nacos设置使用systemct进行service方式的管理并设置开机自启动
    记一个nginx server_name配置多个时的坑
    linux软链接的创建、修改和删除
    阿里云SLB的健康检查配置
    (转载)bullet安装之——windows下的安装与VS开发
    [译] 找到ndarray中的重复行
    [译] 对dataframe数据按照某列值进行分组,分组后连接字符串
    [译] 如何将列表嵌套列表的情况转化成一维列表
  • 原文地址:https://www.cnblogs.com/ssbpro/p/755132.html
Copyright © 2011-2022 走看看