CGAffineTransform仿射变换

序言:CGAffineTransform可以完成二维的平移、旋转、缩放变换,其本质都是就是仿射变换。一个任意的仿射变换都能表示为乘以一个矩阵 (线性变换) ,接着再加上一个向量 (平移)。以上三种变换可以归纳为平移 (向量加),旋转 (线性变换),缩放 (线性变换)。

  • 先来看一下CGAffineTransform的定义:
struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};
 CGAffineTransformMake(CGFloat a, CGFloat b,CGFloat c, CGFloat d, 
 CGFloat tx, CGFloat ty)

对应的矩阵为:


CGAffineTransform.png

对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:


tranform.png
  • CGAffineTransformIdentity


    identity.png

    同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:


    1.png
  • CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)
2.png

同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:


3.png
  • CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)


    4.png

    同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:


    5.png
  • CGAffineTransformMakeRotation(CGFloat angle)


    6.png

    同理,对于一个二维中的点CGFloat(x,y)通过以上矩阵变换得到CGFloat(x‘,y’),过程如下:


    7.png

    整理后,说明变换后坐标落于同一个圆上。
    8.png

以上就是CGAffineTransform仿射变换,参照链接:http://xummer26.com/blog/CGAffineTransform-simple-analysis.html

  • 后面我会再分享一篇关于CATransform3D的文章,CATransform3D是一个可以在3维空间内做变换的4x4的矩阵。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容