CGAffineTransform矩阵中第三列

CGAffineTransform的定义中只有6个数据,可为什么背后的矩阵有第三列,且是固定值 0, 0, 1

struct CGAffineTransform {
  CGFloat a, b, c, d;
  CGFloat tx, ty;
};

CGAffineTransform实际上是通过矩阵来计算的,而矩阵背后的数学就是矩阵的相乘.


坐标的矩阵公式

坐标的计算

如果第三列去掉,公式和结果是没有什么影响的,那为什么还要第三列呢?


CGAffineTransform矩阵中第三列_第1张图片
去掉第三列

但是如果多种平移和缩放的矩阵相结合,那就不一样了,如果同样是3行2列的矩阵,就无法相乘,为了能够使不同的transform矩阵相乘,那就需要第三列,把他们都变成3*3矩阵来计算,本来第三列的数值就没什么用,那就给个固定值0,0,1。

参考:Transforms:The Math Behind the Matrices

你可能感兴趣的:(CGAffineTransform矩阵中第三列)