您的位置:首页 > 移动开发 > Android开发

android Matrix的pre、post、set三种变形方式

2016-03-18 09:59 483 查看
在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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: