CGAffineTransform的矩阵变换
CGAffineTransform介绍
-
CGAffineTransform
数据结构表示用于仿射变换的矩阵。 transformation制定了如何将一个坐标系的点映射到另一个坐标系上。一个仿射变换是一种特殊类型的映射,保留一条平行线,但不一定保留长度或角度。缩放,旋转,位置变化是最常用的操作支持的仿射变换,但扭曲也是可能的。
Quartz提供了创建、连接和用CGAffineTransform实现的transformations的函数。想获得更多信息,请参考Quartz 2D Programming Guide.
我们通常不需要直接创建一个仿射变换-- CGContext Reference
描述了一个函数修改当前的放射变化。 但是如果你不想f复用仿射变化,你需要用到CGContextScaleCTM, CGContextRotateCTM, CGContextTranslateCTM, or CGContextConcatCTM.
函数
-
创建放射变换矩阵
-
CGAffineTransformMake
:-
CGAffineTransform CGAffineTransformMake ( CGFloat a, CGFloat b, CGFloat c, CGFloat d, CGFloat tx, CGFloat ty );
- 参数在矩阵中表示如图: img
-
这个方法创建了 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)的计算原理
-
-
CGAffineTransformMakeRotation
: 旋转 -
CGAffineTransformMakeScale
:scale -
CGAffineTransformMakeTranslation
-
-
修改变换矩阵: 对已经存在的矩阵变化进行修改
-
CGAffineTransformTranslate
: 对横竖位置进行修改 CGAffineTransformScale
CGAffineTransformRotate
-
CGAffineTransformInvert
:根据已经存在的仿射变换进行变换
-CGAffineTransform CGAffineTransformInvert ( CGAffineTransform t );
-
CGAffineTransformConcat
:合并两个变换
-
-
Applying Affine Transformations
-
CGPointApplyAffineTransform
返回矩阵变换后的点的信息- CGPoint CGPointApplyAffineTransform ( CGPoint point, CGAffineTransform t );
-
CGSizeApplyAffineTransform
-
CGRectApplyAffineTransform
-
-
Evaluating Affine Transforms 评测
-
CGAffineTransformIsIdentity
是否是CGAffineTransformIsIdentity- CGAffineTransformIdentity, 即单位矩阵 img
-
CGAffineTransformEqualToTransform
检验变换是否是一样
-