zoukankan      html  css  js  c++  java
  • CGAffineTransform 原理

    参考:http://guxiaojje.blog.163.com/blog/static/14094229120131510359399/

    http://www.buildapp.net/iphone/show.asp?id=10192

    矩阵的基本知识:

    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|

    The identity transform: [ 1 0 0 1 0 0 ].

    CG_EXTERN const CGAffineTransform CGAffineTransformIdentity

    /* Return the transform [ a b c d tx ty ].  可控制变换任何变化*/

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

    /* Return a transform which translates by `(tx, ty)':  t' = [ 1 0 0 1 tx ty ]  控制位移*/

    CG_EXTERN CGAffineTransform CGAffineTransformMakeTranslation(CGFloat tx, CGFloat ty)

    /* Return a transform which scales by `(sx, sy)':  t' = [ sx 0 0 sy 0 0 ]   控制缩放*/

     CG_EXTERN CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)

    /* Return a transform which rotates by `angle' radians: t' = [ cos(angle) sin(angle) -sin(angle) cos(angle) 0 0 ]  控制旋转*/

     CG_EXTERN CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)

    =====================

    简单记忆:

    在使用矩阵控制图片的缩放和旋转的时候,CGAffineTransformMake(a,b,c,d,tx,ty);
    这几个参数里面,哪些是控制缩放,哪些是控制旋转:
    a,d缩放;
    b,c旋转;
    tx,ty位移。
     
    基础的2D矩阵,文档里有。
  • 相关阅读:
    实验四 代码评审
    实验三、UML 建模工具的安装与使用
    结对编程 第二阶段
    结对编程第一阶段
    实验一 GIT代码版本管理
    实验五 单元测试
    实验四 代码评审
    实验三 UML 建模工具的安装与使用
    结对编程阶段二
    结对编程第一阶段
  • 原文地址:https://www.cnblogs.com/bunsman/p/3142587.html
Copyright © 2011-2022 走看看