这两个序列在应用此变换的图像层中给出两个不同的结果。我似乎没有理由......有人可以给出解释吗?
/* first sequence of transformation */
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, M_PI / 180 * 30);
transform = CGAffineTransformTranslate(transform, 100, 0);
/* second sequence of transformation */
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 100, 0);
transform = CGAffineTransformRotate(transform, M_PI / 180 * 30);
答案 0 :(得分:7)
短(技术)答案:因为变换实际上只是一个矩阵,当你连接两个变换时,两个矩阵相乘。矩阵乘法不是commutative,意味着A(A B)与⨉(B A)不同。换句话说,订单很重要。
我之前写过关于combining translations and rotations和the math behind transforms的文章(即进入矩阵数学)。如果您想了解有关变换如何工作的更多信息,这两个资源可能是很好的资源。
在project by Richard Turton上还有一个很好的GitHub用于试验变换,这对于掌握不同变换的顺序如何影响最终结果的概念非常有用。