CGAffineTransform变换拼接顺序:为何与常规矩阵变换逻辑不同?
关于CGAffineTransform的变换顺序误区
刚接触CGAffineTransform的时候,很多人都会在变换顺序上踩坑,我来给你理清楚这里的核心差异:
常规线性代数中的点变换逻辑:
当对单个点批量应用一系列变换时,变换序列的指定顺序要和预期操作顺序相反。比如你想先对点x做平移(记为变换矩阵T),再做旋转(记为变换矩阵R),那最终的拼接矩阵得是RT,变换公式为(RT)x——矩阵从左到右作用,实际执行顺序是先右边的平移T,再左边的旋转R。CGAffineTransform的特殊实现:
但Apple的CGAffineTransform采用了上述表达式的转置版本,它并不是以Ax(A为变换矩阵)的形式变换点,而是用xA的形式来计算。
举个实际的例子更清楚:
还是先平移再旋转的需求,在CGAffineTransform里,你需要先创建平移变换,再通过CGAffineTransformRotate把旋转变换拼接上去,最终的变换矩阵等价于TR,变换时的计算是x(TR)——这就完全贴合我们直观的操作顺序:先执行平移,再执行旋转,不用再反过来记矩阵顺序了。
内容的提问来源于stack exchange,提问作者Jans
相关产品推荐
相关产品推荐

