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*
![](https://img-blog.csdn.net/20160318093519927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
,其效果为先对点(x,y)进行C变换再进行B变换最后进行A变换。下面用实例来分析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);注意set以前对matrix的作用都是无效的,因为在执行matrix.setf()时执行了matrix.reset(),所以以上代码的执行效果为:scale(2,3)——>rotate(30)
matrix.preScale(2,3);
相关文章推荐
- Android 手势识别类 ( 一 ) GestureDetector 基本介绍
- Android——Bundle savedInstanceState的作用
- androidListView分页加载总是回到头部的问题
- android Listview,gridview局部刷新,部分刷新
- [android] “坐标”相关的一些故事
- android开发 ArrayList用法
- Android——Android Bundle详解(转)
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Android Studio 中查看上SHA1和MD5值
- Android——Android Bundle类(转)
- Android 图片缓存 随手笔记
- android 中添加libssl和libcurl
- Handler可能引起的内存泄露及解决方案-android
- Android:adb 启动activity、service,发送broadcast
- android解析JSON数据
- 如何恢复(初始化)android studio所有设置
- android studio运行的时候出现Unable to obtain debug bridge错误的解决办法
- android 各种颜色值 colors.xml
- Android小应用(更新中...)
- Android 5.1高通方案增加GPIO按键