在Matrix中,pre、post、set都有对应的Rotate、Scale、Translate、Skew函数,每个函数的效果都可以看成是一个3x3矩阵与matrix的乘积。对于同样的函数f()的pre、post、set
形式,该函数f()可用同一个矩阵A表示,则pref()所做的工作就是matrix=matrix*A,postf()所做的工作就是matrix=A*matrix,setf()所做的工作就matrix=matrix.rest();matrix=matrx*A
现在来分析这三种方式的区别
当matrix为标准矩阵时,这三种方式是没有区别的,因为标准矩阵与任何矩阵的乘积都等于该矩阵(不管是左乘还是右乘)
matrix改变图像的实质就是作用于图像上一个个的像素点,现在假设有矩阵A、B、C作用于点(x,y),表示为A*B*C*,其效果为先对点(x,y)进行C变换再进行B变换最后进行A变换。下面用实例来分析pre,post,set的区别
matrix.postScale(2,3,4,5); matrix.preTranslate(4,5);注意以上代码,虽然postScale(2,3,4,5)是写在前面的,但是先执行的却是translate(4,5),为什么会这样呢?假设postScale(2,3,4,5)用矩阵A表示,preTransLate(4,5)用矩阵B表示,则行以上两条语句后最后生成的矩阵为A*matrix*B,根据前面所讲的理论,其效果为先对点进行B变换再进行matrix(原)变换最后进行A变换
matrix.postScale(2,3,4,5); matrix.preTranslate(4,5); matrix.setRotate(30); matrix.preScale(2,3);注意set以前对matrix的作用都是无效的,因为在执行matrix.setf()时执行了matrix.reset(),所以以上代码的执行效果为:scale(2,3)——>rotate(30)