美文网首页
CGAffineTransform的矩阵变换

CGAffineTransform的矩阵变换

作者: 缭雾 | 来源:发表于2016-07-28 14:00 被阅读255次

    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 );

        • 参数在矩阵中表示如图: imgimg
        • 这个方法创建了 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, 即单位矩阵 imgimg
      • CGAffineTransformEqualToTransform 检验变换是否是一样

    相关文章

      网友评论

          本文标题:CGAffineTransform的矩阵变换

          本文链接:https://www.haomeiwen.com/subject/wgeajttx.html