CGAffineTransform的矩阵变换

CGAffineTransform介绍

  • CGAffineTransform数据结构表示用于仿射变换的矩阵。 transformation制定了如何将一个坐标系的点映射到另一个坐标系上。一个仿射变换是一种特殊类型的映射,保留一条平行线,但不一定保留长度或角度。缩放,旋转,位置变化是最常用的操作支持的仿射变换,但扭曲也是可能的。

Quartz提供了创建、连接和用CGAffineTransform实现的transformations的函数。想获得更多信息,请参考Quartz 2D Programming Guide.

我们通常不需要直接创建一个仿射变换-- CGContext Reference描述了一个函数修改当前的放射变化。 但是如果你不想f复用仿射变化,你需要用到CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM, or CGContextConcatCTM.

函数

  • 创建放射变换矩阵

    1. CGAffineTransformMake:

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

      • 参数在矩阵中表示如图:
        img
      • 这个方法创建了 CGAffineTransform结构体,描述了新的矩阵变换。你可以用(或复用,如果你想的话),去改变一个坐标系。 由于第三列为 [0,0,1],因此矩阵变化起作用只有前两列。

      • 如果你想transform一个对象,没必要使用这个函数。因为有很多更直接的方法。

      • 矩阵的原理:

        假设原坐标点为(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] ;

        1.平移: a=d=1, b=c=0 -> [x + tx , y + ty] 这也就是CGAffineMakeTranslation的原理

        2.缩放: b=c=tx=ty=0. [ax dy 1] 这也就是CGAffineTransformMakeScale的原理

        3.旋转:设tx=ty=0,a=cos?,b=sin?,c=-sin?,d=cos?。 [aX + cY + tx bX + dY + ty 1] = [Xcos? - Ysin? Xsin? + Ycos? 1] ; 可见,这个时候,?就是旋转的角度,逆时针为正,顺时针为负。其实这也就是函数。 CGAffineTransformMakeRotation(CGFloat angle)的计算原理

    2. CGAffineTransformMakeRotation: 旋转

    3. CGAffineTransformMakeScale:scale

    4. CGAffineTransformMakeTranslation

  • 修改变换矩阵: 对已经存在的矩阵变化进行修改

    1. CGAffineTransformTranslate: 对横竖位置进行修改
    2. CGAffineTransformScale
    3. CGAffineTransformRotate
    4. CGAffineTransformInvert:根据已经存在的仿射变换进行变换
      -CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t );
    5. CGAffineTransformConcat:合并两个变换
  • Applying Affine Transformations

    • CGPointApplyAffineTransform 返回矩阵变换后的点的信息

      • CGPoint CGPointApplyAffineTransform ( CGPoint point, CGAffineTransform t );
    • CGSizeApplyAffineTransform

    • CGRectApplyAffineTransform

  • Evaluating Affine Transforms 评测

    • CGAffineTransformIsIdentity 是否是CGAffineTransformIsIdentity
      • CGAffineTransformIdentity, 即单位矩阵
        img
    • CGAffineTransformEqualToTransform 检验变换是否是一样

你可能感兴趣的:(CGAffineTransform的矩阵变换)