码迷,mamicode.com
首页 > 移动开发 > 详细

ios开发中的矩阵转换

时间:2014-12-24 13:21:42      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

    1. 最近在研究CoreText看了很多的例子其中有很多地方不是特别理解所以上网收集了IOS矩阵的转换原理来记录下

       

      CGAffineTransformMake(a,b,c,d,tx,ty) 

      ad缩放bc旋转tx,ty位移,基础的2D矩阵

       公式

          x=ax+cy+tx
          y=bx+dy+ty

       

      1.矩阵的基本知识:

      struct CGAffineTransform

      {
        CGFloat a, b, c, d;
        CGFloat tx, ty;
      };

      CGAffineTransform CGAffineTransformMake (CGFloat a,CGFloat b,CGFloat c,CGFloat d,CGFloat tx,CGFloat ty);

      为了把二维图形的变化统一在一个坐标系里,引入了齐次坐标的概念,即把一个图形用一个三维矩阵表示,其中第三列总是(0,0,1),用来作为坐标系的标准。所以所有的变化都由前两列完成。

      以上参数在矩阵中的表示为:

       |a    b    0|

       |c    d    0|

       |tx   ty   1|

       

      运算原理:原坐标设为(X,Y,1);

                                  |a    b    0|

             [X,Y,  1]      |c    d    0|     =     [aX + cY + tx   bX + dY + ty  1] ;

                                  |tx    ty  1|

      通过矩阵运算后的坐标[aX + cY + tx   bX + dY + ty  1],我们对比一下可知:

      第一种:设a=d=1, b=c=0.  

      [aX + cY + tx   bX + dY + ty  1] = [X  + tx  Y + ty  1];

      可见,这个时候,坐标是按照向量(tx,ty)进行平移,其实这也就是函数

      CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty)的计算原理。

      第二种:设b=c=tx=ty=0.  

      [aX + cY + tx   bX + dY + ty  1] = [aX    dY   1];

      可见,这个时候,坐标X按照a进行缩放,Y按照d进行缩放,a,d就是X,Y的比例系数,其实这也就是函数

      CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)的计算原理。a对应于sx,d对应于sy。

      第三种:设tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。

      [aX + cY + tx   bX + dY + ty  1] = [Xcos? - Ysin?    Xsin? + Ycos?  1] ;

      可见,这个时候,?就是旋转的角度,逆时针为正,顺时针为负。其实这也就是函数

      CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)的计算原理。angle即?的弧度表示。

ios开发中的矩阵转换

标签:

原文地址:http://www.cnblogs.com/xitongma/p/4182079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!