Affaine Transformation只要是用在2D图像变换上的的。比如缩放,平移,旋转,扭曲。常用的CATransform3D道理相同
概述
Affine Transformation由一个3 x 3矩阵来表示
作为一个增广矩阵,第三列永远是[0 0 1]。 所以在API中提供的都是对前两列参数的改变。
下图表示的即是变换过程,图像上的每个点的坐标(x, y, 1),与上图矩阵相乘,产生新的坐标(x', y', 1),也就是我们变化后的图像上点的坐标。
对于图像上的每个点,通过这样的计算转换到了新的坐标。
通常不需要直接创建affine transformation, 只需要调用对应的函数 translateBy(x:y:)
, scaleBy(x:y:)
, rotate(by:)
即可
变换
如果自定义创建的话,一般都是先创建一个单位矩阵
let indentity = CATransform3DIdentity // [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1].
平移
let transformation = CATransform3DTranslate(transform, tx, ty, tz)
这个变换实际上发生的是 (代码上是3D,我们的例子跟图上的矩阵保持一致,用2D)
x' = ax + cy + tx
y' = bx + dy + ty
所以显而易见,tx, ty, tz
就是平移移动的距离了
CATransform3DTranslate(transform, tx, ty, tz)