美文网首页
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的矩阵变换

    CGAffineTransform介绍 CGAffineTransform数据结构表示用于仿射变换的矩阵。 tra...

  • CGAffineTransform

    CGAffineTransform用于绘制2D图形的仿射变换矩阵。 仿射变换矩阵用于旋转,缩放,平移或倾斜在图形上...

  • CGAffineTransform

    CGAffineTransform此类是一个3*3矩阵的变换。 - (void)transformImageVie...

  • 详细解析 CGAffineTransform 矩阵

    CGAffineTransform 是对于仿射变换矩阵进行了封装,而要理解仿射变换(affine transfor...

  • iOS CGAffineTransform 详解

    CGAffineTransform 定义 用于绘制2D图形的一个仿射变换矩阵。一个仿射变换矩阵用于做旋转、缩放、平...

  • CALayer变换

    放射变换: CGAffineTransform中的“仿射”的意思是无论变换矩阵用什么值,图层中平行的两条线在变换之...

  • iOS Core Animation Advanced Tech

    变换 仿射变换 CGAffineTransform是一个可以和二维空间向量(如CGPoint)做乘法的3*2的矩阵...

  • CGAffineTransform-仿射矩阵的变换

    首先说一下CGAffineTransform的常见应用场景 与CoreGraphics一起用来画画; 根据用户的手...

  • CGAffineTransform 简单标注

    UIView 属性 CGAffineTransform原理 CGAffineTransform形变是通过"仿射变换...

  • CGAffineTransform

    参考: iOS形变之CGAffineTransform iOS 仿射变换CGAffineTransform详解 如...

网友评论

      本文标题:CGAffineTransform的矩阵变换

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