Affaine Transformation 浅析

Affaine Transformation只要是用在2D图像变换上的的。比如缩放,平移,旋转,扭曲。常用的CATransform3D道理相同

概述

Affine Transformation由一个3 x 3矩阵来表示

Affaine Transformation 浅析_第1张图片

作为一个增广矩阵,第三列永远是[0 0 1]。 所以在API中提供的都是对前两列参数的改变。
下图表示的即是变换过程,图像上的每个点的坐标(x, y, 1),与上图矩阵相乘,产生新的坐标(x', y', 1),也就是我们变化后的图像上点的坐标。

Affaine Transformation 浅析_第2张图片

对于图像上的每个点,通过这样的计算转换到了新的坐标。


通常不需要直接创建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)

你可能感兴趣的:(Affaine Transformation 浅析)