怎样理解iOS CGAffineTransform API 传参?

来源:互联网 发布:adobe air是什么软件 编辑:程序博客网 时间:2024/06/05 15:33

结论:


CGAffineTransformMake(a,b,c,d,tx,ty)

1、ad缩放;2、bc旋转;3、tx,ty位移。

基础的2D矩阵公式

    x'=ax+cy+tx    y'=bx+dy+ty

概要:


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|

计算原理:

原坐标设为(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],我们对比一下可知:

第一种:

设a=d=1, b=c=0.  [aX + cY + tx   bX + dY + ty  1] = [X  + tx  Y + ty  1];坐标是按照向量(tx,ty)进行平移,即函数CGAffineTransform CGAffineMakeTranslation(CGFloat tx,CGFloat ty)的计算原理。

第二种:

设b=c=tx=ty=0.  [aX + cY + tx   bX + dY + ty  1] = [aX    dY   1];坐标X按照a进行缩放,Y按照d进行缩放,a,d就是X,Y的比例系数,即函数CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)的计算原理。a对应于sx,d对应于sy。

第三种:

设tx=ty=0,a=cosɵ,b=sinɵ,c=-sinɵ,d=cosɵ。[aX + cY + tx   bX + dY + ty  1] = [Xcosɵ - Ysinɵ    Xsinɵ + Ycosɵ  1] ;ɵ就是旋转的角度,逆时针为正,顺时针为负。即函数CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)的计算原理。angle即ɵ的弧度表示。

(此篇主要帮助动画初学者理解CGAffineTransform,阅读前请先查阅齐次坐标系和矩阵相关知识。大神勿喷,不足之处还请指正!)