Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1049200
  • 博文数量: 403
  • 博客积分: 10272
  • 博客等级: 上将
  • 技术积分: 4407
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:22
文章分类

全部博文(403)

文章存档

2012年(403)

分类: 嵌入式

2012-04-21 22:21:01

 

上一篇中说到四个变换类,都是比较简单的,这里要说到四个变换类,分别为:

 

矩阵变换,一句标准矩阵表示的变换

复合变换按照指定顺序将多个变换复合为一个变换

组合变换按照固定顺序组合一系列变换
 

 

 表示二维 x-y 平面使用 3x3 矩阵进行自定义变换,上一篇文章中的四个变换类都是基于此得到,MtrixTransForm类是通过矩阵算法运行得到相应的效果


 

 


  
  矩阵中第三列的值是固定不变的!



  原理:
  原坐标(x0,y0)通过这个3*3矩阵得到变换之后的新坐标(x1,y1)的过程如下:

    [x0,y0] *,通过矩阵乘法可得到坐标 (x0 * M11+x0 * M21,y0 * M12+y0 * M22)之后,再加上 (OffsetX,OffsetY) 即可得到新坐标(x1,y1)。也即是说最终坐标 (x1,y1) : x1 =  x0 * M11 + x0 * M21 + OffsetX , y1 = y0 * M12 + y0 * M22 + OffsetY.

 

1  
2 
3 "M11 M12 M21 M22 OffsetX OffsetY">

 示例:

复制代码
"ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            
            "tbShow" FontSize="72" VerticalAlignment="Center" HorizontalAlignment="Center" Text="变换文字示例"  Foreground="Cyan">
                
                    "0,1,2,1,2,2">
                

            
        
复制代码

 效果:

 

 总结规律得到

 

        m11 ——X轴缩放
        m12 ——Y轴上倾斜
        m21 ——X轴上倾斜
        m22——Y轴缩放
        offsetX ——X轴上的位移
        offsetY ——Y轴上的位移
 部分参考:http://www.cnblogs.com/crazypig/archive/2012/02/20/2359599.html

                

 

表示对变换效果的一种复合,在TransformGroup中可以包含其他的变换,当然也嵌套TransformGroup

 

代码:

 

 

复制代码
 
        "ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            "tbShow" FontSize="72" VerticalAlignment="Center" HorizontalAlignment="Center" Text="变换文字示例"  Foreground="Cyan">
                
                    
                        "-2" Y="3">
                        "0.8" ScaleY="0.9">
                        "23">
                        
                            "1,0,1,1,0,1">
                        

                    

                

            
        
复制代码

 

 这里需要注意的是我们在定义变换的顺序,因为每个变换都是基于上一个变换的基础进行变换,效果:

 

 

 

 是表示对变换的一种组合,并且具有顺序性,所有的变换都是通过属性进行设置的

 

复制代码
       
        "ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            "tbShow" FontSize="72" VerticalAlignment="Center" HorizontalAlignment="Center" Text="变换文字示例"  Foreground="Cyan">
                
                    "23" TranslateX="-2" TranslateY="3" ScaleX="0.8" ScaleY="0.9" >
                

            
        
复制代码

 

 上面代码中用到属性的意思Rotation表示旋转的角度,TranslateX表示在X轴平移的位置量,TranslateY表示在Y轴平移的位置量,ScaleX表示在X轴缩放的尺寸,ScaleY表示在Y轴缩放的尺寸;

 效果:

 

 TransformGroup 和CompositeTransfom异同:两者可以设置相同的属性得到相同的效果,在TransformGroup中我们可以使用 TransformGroup进行相同变换的多次使用,但是在CompositeTransfom中使用属性是不允许的,还有就是在 TransformGroup我们可以使用自定义变换,但是在组合变换CompositeTransfom中并没有该属性;两者还需要注意的是顺序性,不同的顺序,实现的效果不同;

阅读(1448) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~