ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:501.48KB ,
资源ID:8161177      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8161177.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android Matrix理论与应用详解.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android Matrix理论与应用详解.docx

1、Android Matrix理论与应用详解Android Matrix理论与应用详解 分类: Android 2011-09-01 20:46 693人阅读 评论(2) 收藏 举报 Matrix学习基础知识 以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用GDI+的时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。首先大家看看下面这个3 x 3的矩阵,这个矩阵被分割成4部分。为什么分割成4部分,在后面详细说明。首先给大家举个简单的例子:现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为x,y方向的平移量为y,那么,点P(x,y)的坐标为

2、:x = x0 + xy = y0 + y采用矩阵表达上述如下:上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角的2个元素就可以了。我们回头看上述矩阵的划分:为了验证上面的功能划分,我们举个具体的例子:现设点P0(x0 ,y0)进行平移后,移到P(x,y),其中x放大a倍,y放大b倍,矩阵就是:,按照类似前面“平移”的方法就验证。图像的旋转稍微复杂:现设点P0(x0, y0)旋转角后的对应点为P(x, y)。通过使用向量,我们得到如下:x0 = r cosy0 = r sinx = r cos(+) = x0 cos - y0 siny = r sin(+) = x0 sin

3、 + y0 cos于是我们得到矩阵:如果图像围绕着某个点(a ,b)旋转呢?则先要将坐标平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点,在后面的篇幅中我们将详细介绍。 Matrix学习如何使用Matrix 上一篇幅Matrix学习基础知识,从高等数学方面给大家介绍了Matrix,本篇幅我们就结合Android 中的android.graphics.Matrix来具体说明,还记得我们前面说的图像旋转的矩阵:从最简单的旋转90度的是:在android.graphics.Matrix中有对应旋转的函数:Matrix matrix = new Matrix();matrix.setR

4、otate(90);Test.Log(MAXTRIX_TAG,”setRotate(90):%s” , matrix.toString();查看运行后的矩阵的值(通过Log输出):与上面的公式基本完全一样(android.graphics.Matrix采用的是浮点数,而我们采用的整数)。有了上面的例子,相信大家就可以亲自尝试了。通过上面的例子我们也发现,我们也可以直接来初始化矩阵,比如说要旋转30度:前面给大家介绍了这么多,下面我们开始介绍图像的镜像, 分为2种:水平镜像、垂直镜像。先介绍如何实现垂直镜像,什么是垂直镜像就不详细说明。图像的垂直镜像变化也可以用矩阵变化的表示,设点P0(x0 ,

5、y0 )进行镜像后的对应点为P(x ,y ),图像的高度为fHeight,宽度为fWidth,原图像中的P0(x0 ,y0 )经过垂直镜像后的坐标变为(x0 ,fHeight- y0);x = x0y = fHeight y0推导出相应的矩阵是:finalfloatf = 1.0F,0.0F,0.0F,0.0F,-1.0F,120.0F,0.0F,0.0F,1.0F;Matrix matrix =newMatrix();matrix.setValues(f);按照上述方法运行后的结果:至于水平镜像采用类似的方法,大家可以自己去试试吧。实际上,使用下面的方式也可以实现垂直镜像:Matrix ma

6、trix =newMatrix();matrix.setScale (1.0,-1.0);matrix.postTraslate(0, fHeight);这就是我们将在后面的篇幅中详细说明。 Matrix学习图像的复合变化 Matrix学习基础知识篇幅中,我们留下一个话题:如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。我们需要3步:1.平移将坐标系平移到点P(a,b);2.旋转以原点为中心旋转图像;3.平移将旋转后的图像平移回到原来的坐标原点;相比较前面说的图像的几何变化(基本的图像几何变化),这里需要平移旋转平移,这种需

7、要多种图像的几何变化就叫做图像的复合变化。设对给定的图像依次进行了基本变化F1、F2、F3.、Fn,它们的变化矩阵分别为T1、T2、T3.、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1T1。按照上面的原则,围绕着某个点(a,b)旋转的变化矩阵序列是:按照上面的公式,我们列举一个简单的例子:围绕(100,100)旋转30度(sin 30 = 0.5 ,cos 30 = 0.866)floatf= 0.866F, -0.5F, 63.4F,0.5F, 0.866F,-36.6F,0.0F, 0.0F, 1.0F ;matrix =newMatrix();matrix.setValue

8、s(f);旋转后的图像如下:Android为我们提供了更加简单的方法,如下:Matrix matrix = new Matrix();matrix.setRotate(30,100,100);矩阵运行后的实际结果:与我们前面通过公式获取得到的矩阵完全一样。在这里我们提供另外一种方法,也可以达到同样的效果:float a = 100.0F,b = 100.0F;matrix = new Matrix();matrix.setTranslate(a,b);matrix.preRotate(30);matrix.preTranslate(-a,-b);将在后面的篇幅中为大家详细解析通过类似的方法,我

9、们还可以得到:相对点P(a,b)的比例sx,sy变化矩阵Matrix学习Preconcats or Postconcats? 从最基本的高等数学开始,Matrix的基本操作包括:+、*。Matrix的乘法不满足交换律,也就是说A*B B*A。还有2种常见的矩阵:有了上面的基础,下面我们开始进入主题。由于矩阵不满足交换律,所以用矩阵B乘以矩阵A,需要考虑是左乘(B*A),还是右乘(A*B)。在 Android的android.graphics.Matrix中为我们提供了类似的方法,也就是我们本篇幅要说明的Preconcats matrix 与 Postconcats matrix。下面我们还是通

10、过具体的例子还说明:通过输出的信息,我们分析其运行过程如下:看了上面的输出信息。我们得出结论:Preconcats matrix相当于右乘矩阵,Postconcats matrix相当于左乘矩阵。上一篇幅中,我们说到:其晕死过程的详细分析就不在这里多说了。 Matrix学习错切变换 什么是图像的错切变换(Shear transformation)?我们还是直接看图片错切变换后是的效果:对图像的错切变换做个总结:x = x0 + b*y0;y = d*x0 + y0;这里再次给大家介绍一个需要注意的地方:通过以上,我们发现Matrix的setXXXX()函数,在调用时调用了一次reset(),这

11、个在复合变换时需要注意。 Matrix学习对称变换(反射) 什么是对称变换?具体的理论就不详细说明了,图像的镜像就是对称变换中的一种。利用上面的总结做个具体的例子,产生与直线y= x对称的反射图形,代码片段如下:当前矩阵输出是:图像变换的效果如下: 附:三角函数公式 两角和公式sin(a+b)=sinacosb+cosasinbsin(a-b)=sinacosb-sinbcosa cos(a+b)=cosacosb-sinasinbcos(a-b)=cosacosb+sinasinbtan(a+b)=(tana+tanb)/(1-tanatanb)tan(a-b)=(tana-tanb)/(1

12、+tanatanb)cot(a+b)=(cotacotb-1)/(cotb+cota) cot(a-b)=(cotacotb+1)/(cotb-cota)倍角公式tan2a=2tana/1-(tana)2cos2a=(cosa)2-(sina)2=2(cosa)2 -1=1-2(sina)2sin2a=2sina*cosa半角公式sin(a/2)=(1-cosa)/2) sin(a/2)=-(1-cosa)/2)cos(a/2)=(1+cosa)/2) cos(a/2)=-(1+cosa)/2)tan(a/2)=(1-cosa)/(1+cosa) tan(a/2)=-(1-cosa)/(1+c

13、osa)cot(a/2)=(1+cosa)/(1-cosa) cot(a/2)=-(1+cosa)/(1-cosa) tan(a/2)=(1-cosa)/sina=sina/(1+cosa)和差化积2sinacosb=sin(a+b)+sin(a-b)2cosasinb=sin(a+b)-sin(a-b) )2cosacosb=cos(a+b)-sin(a-b)-2sinasinb=cos(a+b)-cos(a-b)sina+sinb=2sin(a+b)/2)cos(a-b)/2cosa+cosb=2cos(a+b)/2)sin(a-b)/2)tana+tanb=sin(a+b)/cosaco

14、sb积化和差公式sin(a)sin(b)=-1/2*cos(a+b)-cos(a-b)cos(a)cos(b)=1/2*cos(a+b)+cos(a-b)sin(a)cos(b)=1/2*sin(a+b)+sin(a-b)诱导公式sin(-a)=-sin(a)cos(-a)=cos(a)sin(pi/2-a)=cos(a)cos(pi/2-a)=sin(a)sin(pi/2+a)=cos(a)cos(pi/2+a)=-sin(a)sin(pi-a)=sin(a)cos(pi-a)=-cos(a)sin(pi+a)=-sin(a)cos(pi+a)=-cos(a)tga=tana=sina/co

15、sa万能公式sin(a)= (2tan(a/2)/(1+tan2(a/2)cos(a)= (1-tan2(a/2)/(1+tan2(a/2)tan(a)= (2tan(a/2)/(1-tan2(a/2)其它公式a*sin(a)+b*cos(a)=sqrt(a2+b2)sin(a+c) 其中,tan(c)=b/aa*sin(a)-b*cos(a)=sqrt(a2+b2)cos(a-c) 其中,tan(c)=a/b1+sin(a)=(sin(a/2)+cos(a/2)21-sin(a)=(sin(a/2)-cos(a/2)2其他非重点三角函数csc(a)=1/sin(a)sec(a)=1/cos(a)双曲函数sinh(a)=(ea-e(-a)/2cosh(a)=(ea+e(-a)/2tgh(a)=sinh(a)/cosh(a)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1