Android Matrix 学习

来源:互联网 发布:淘宝cpu散片 编辑:程序博客网 时间:2024/05/18 02:46

以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用 GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。 

首先大家看看下面这个 3 x 3 的矩阵,这个矩阵被分割成 4部分。为什么分割成 4 部分,在后面详细说明。 

 

首先给大家举个简单的例子:现设点 P0(x0, y0)进行平移后,移到 P(x,y),其中 x方向的平移量为△x,y方向的平移量为△y,那么,点 P(x,y)的坐标为: 
x = x0  + △x 
y = y0  + △y 
采用矩阵表达上述如下: 


上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角的 2 个元素就可以了。 



Matrix学习 —如何使用Matrix 

从高等数学方面给大家介绍了 Matrix,本篇幅我们就结合 Android 中的android.graphics.Matrix来具体说明,还记得我们前面说的图像旋转的矩阵: 


从最简单的旋转 90 度的是: 


在 android.graphics.Matrix中有对应旋转的函数: 

Matrix matrix = new Matrix(); matrix.setRotate(90); Test.Log(MAXTRIX_TAG,”setRotate(90):%s” , matrix.toString()); 

与上面的公式基本完全一样(android.graphics.Matrix采用的是浮点数,而我们采用的整数)。 

有了上面的例子,相信大家就可以亲自尝试了。通过上面的例子我们也发现,我们也可以直接来初始化矩阵,比如说要旋转30 度: 


前面给大家介绍了这么多,下面我们开始介绍图像的镜像,分为 2 种:水平镜像、垂直镜像。先介绍如何实现垂直镜像,什么是垂直镜像就不详细说明。图像的垂直镜像变化也可以用矩阵变化的表示,设点 P0(x0 ,y0 )进行镜像后的对应点为 P(x ,y ),图像的高度为 fHeight,宽度为 fWidth,原图像中的 P0(x0 ,y0 )经过垂直镜像后的坐标变为(x0 ,fHeight y0); 

推导出相应的矩阵是: 


final float f[] = {1.0F,0.0F,0.0F,0.0F,1.0F,120.0F,0.0F,0.0F,1.0F}; Matrix matrix = new Matrix(); matrix.setValues(f); 
按照上述方法运行后的结果: 

至于水平镜像采用类似的方法,大家可以自己去试试吧。 实际上,使用下面的方式也可以实现垂直镜像: 

Matrix matrix = new Matrix(); matrix.setScale (1.0,1.0); matrix.postTraslate(0, fHeight); 

 



原创粉丝点击