AndroidMatrix基础详解

上传人:痛*** 文档编号:128212640 上传时间:2022-08-01 格式:DOC 页数:13 大小:483.50KB
收藏 版权申诉 举报 下载
AndroidMatrix基础详解_第1页
第1页 / 共13页
AndroidMatrix基础详解_第2页
第2页 / 共13页
AndroidMatrix基础详解_第3页
第3页 / 共13页
资源描述:

《AndroidMatrix基础详解》由会员分享,可在线阅读,更多相关《AndroidMatrix基础详解(13页珍藏版)》请在装配图网上搜索。

1、Matrix学习基础知识以前在线性代数中学习了矩阵,对矩阵的基本运算有一些了解,前段时间在使用DI+勺时候再次学习如何使用矩阵来变化图像,看了之后在这里总结说明。首先大家看看下面这个3x的矩阵,这个矩阵被分割成4部分。为什么分割成4部分,在后面详细说明。首先给大家举个简单的例子:现设点P0(xO,yO)进行平移后,移到P(x,y),其中x方向的平移量x,y方向的平移量为,那么,点P(x,y)的坐标为:x=xO+xy=yO+y采用矩阵表达上述如下上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角的2个元素就可以了。我们回头看上述矩阵的划分:为了验证上面的功能划分,我们举个具体的例

2、子:现设点P0(x0,y0)进行平移后,移到P(x,y),其中x放大a倍,y放大b倍,a00bO001矩阵就是:,按照类似前面平移”的方法就验证。图像的旋转稍微复杂:现设点P0(xo,yO)旋转e角后的对有点为P(X,y)。通过使用向量,我们得到如下:x0=cosayO=sinax=rcos(a-e)=xocose+yosiney=rsia(a-e)=-xOsine+yOcosecosGsine0sin6cos00001于是我们得到矩阵:如果图像围绕着某个点(a,b)旋转呢?则先要将坐标平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点,在后面的篇幅中我们将详细介绍。Matrix

3、学习如何使用Matrix上一篇幅Matrix学习一一基础知识,从高等数学方面给大家介绍了Matrix,本篇幅我们就结合5ndroid中的android.graphics.Matrix来具体说明,还记得我们前面说的图像旋转的矩阵:从最简单的旋转90度的是:在android.graphics.Matrix中有对应旋转的函数:Matrixmatrix=newMatrix();matrix.setRotate(90);Test.Log(M5XTRIX_T5G,”setRotate(90):%s”,matrix.toString();查看运行后的矩阵的值(通过Log输出):与上面的公式基本完全一样(.g

4、ph采用的是浮,点数,而我们采用的整数)。有了上面的例子,相信大家就可以亲自尝试了。通过上面的例子我们也发现,我们也可以直接来初始化矩阵,比如说要旋转30度:cosO-sinS00.8660.5-0.5G.8660-0.5A=sinGCOS00001,:0;50001001sin3Ci=G.5cos-30=C.866前面给大家介绍了这么多,下面我们开始介绍图像的镜像,分为2种:水平镜像、垂直镜像。先介绍如何实现垂直镜像,什么是垂直镜像就不详细说明。图像的垂直镜像变化也可以用矩阵变化的表示,设点P0(xO,y0)进行镜像后的对应点为P(x,y),图像的高度为fHeght宽度为fWth原图像中的P

5、O(xO,yO)经过垂直镜像后的坐标变为(xO,fHeight-)y0;x=xOy=fHeght-yO推导出相应的矩阵是:000-1freight001丿finalfloatf=1.OF,O.OF,O.OF,O.OF,-1.OF,12O.OF,O.OF,O.OF,1.OF;MatrixmatrneiwxM=atrix();matrix.setValues(f);按照上述方法运行后的结果:至于水平镜像采用类似的方法,大家可以自己去试试吧。实际上,使用下面的方式也可以实现垂直镜像:MatrixmatnreiwxM=atrix();.setSca,le-1.(01).;0.postTraslate(

6、0,fHeight);这就是我们将在后面的篇幅中详细说明。Matrix学习图像的复合变化M学习一一基础知识篇幅中,我们留下一个话题:如果图像围绕着某个点P(,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。我们需要3步:1. 平移将坐标系平移到点P(a,b);2. 旋转以原点为中心旋转图像;3. 平移将旋转后的图像平移回到原来的坐标原点;相比较前面说的图像的几何变化(基本的图像几何变化),这里需要平移旋转平移,这种需要多种图像的几何变化就叫做图像的复合变化。设对给定的图像依次进行了基本变化F1、F2、F3、Fn,它们的变化矩阵分别为T1、T2、T3、T

7、n,图像复合变化的矩阵T可以表示为:T=TnTn-1.T1按照上面的原则,围绕着某个点(,b)旋转0的变化矩阵序列是:10-ajpcoe0-sin0.I-0a+!T10-1_b+Jsin0-cos日WT30-1b+JO0*1()Qd01相T=T3T211=/COS.-0sin9-sin&cos00cosusiii0-SUL0cos9-acos0+bsin&+a-asiii8-bcos0+b按照上面的公式,我们列举一个简单的例子:围绕(100,100)旋转30度(sn30=,0c0s30=0.866)floatf=0.866F,-0.5F,63.4F,0.5F,0.866F,-36.6F,00.

8、0.0F,F1,.0F;matrinxew=Mat(r);ixmatrsietxV.alue(fs);旋转后的图像如下:Android为我们提供了更加简单的方法,如下:Matrixmatrix=neMwatrix();matrix.setRotate(30,100,100);矩阵运行后的实际结果::ffietRotate(.30,1U0.OUOfUUO,1OfO.OUUOfUO):MatriK0.8660254,-0.5,63.97460.0.3660254,-J6.602540.0,0.0,1.01-与我们前面通过公式获取得到的矩阵完全一样。在这里我们提供另外一种方法,也可以达到同样的效果:

9、floata=100.0F,b=100.0F;matrix=neMwatrix();matrix.setTranslate(a,b);matrix.preRotate(30);matrix.preTranslate(-a,-b);将在后面的篇幅中为大家详细解析通过类似的方法,我们还可以得到:相对点P(a,b)的比例sx,sy变化矩阵sxO(1-sx)*aOsy(1-sy)*b00:1Matrix学习PreconcatsorPostconcats?从最基本的高等数学开始,Matrix的基本操作包括:+、*。Matrix的乘法不满足交换律,也就是说5*B去B*5还有2种常见的矩阵:IdenbtMa

10、trix单位矩阵E(-Th?-elementsonthemaindiagonalcf-heidentic/-matrixare-1.ALotherelementscftheidentitymatrix-areG.:)-:;InverseMaixP逆無A*A-1=E有了上面的基础,下面我们开始进入主题。由于矩阵不满足交换律,所以用矩阵B乘以矩阵5,需要考虑是左乘(B*5),还是右乘(5*B)。在5ndroid的android.graphics.Matrix中为我们提供了类似的方法,也就是我们本篇幅要说明的Preconeatsmatrix与Postconeatsmatrix下面我们还是通过具体的例

11、子还说明:finalfloatf3:=:一2.OF,-2.OF,3.OF,弓.0Fr-5.0Fr6.OF,0.OF;0.OF;L.OF-MatrixBn.atrLxl=newuMatrix();KiatrLxLsetValijes(f3);Tes匸.log(MiDtI3;ZX_rG/,K&trLxl:,matrixl匸口3匸ring();natrxlpreRotate(90i;Test匚ogi:卜IkXT宝二臣G*rr.5i匸工二x二己宝口匸且匸已i:90j:s,natrLxltcString();Matrix-na匸二二-=,newMatrixi:);iaatrixZsetValues(f3

12、);Test匚匸益吕j瓦己匸m二:2:电已门f匸匸三二();r?.atrix2匸口己匸孟口匸乙匸已(90);Tea匸.Loa(HAXTZiZXAG,r,n;a匸h二臺口刁匸量o匸&匸亡(50J:%5n賞natrixZ匸oStrtng();通过输出的信息,我们分析其运行过程如下:1461MatrismatriKl:Matri瓦.1.0,2.0,304.O5.0,6G0.O0.0,101461MatrismatriKl.preRota90):Matrix2.0,-1.0,3.05.0,-4.0,6.00.0,0.0,1.Cnisatrixmatrisl.preRotate(9U)z2OF,一1OF

13、,3匚iF#5匚IF一4OF,6匚IF匚iOF,OF,1.IZIFl.-.UF,2.QF.3.QF,4. 0F5.OF,6.,OF,p.-.OF,O.,OF,l.rOFRotate(90)y.,iJF,-l-L!F,L!.OF,1. 0F,O.,OF,O.OF,O.-OF,O.-OF,1.OF1461Matris.Rotate(90)U.,.OF,-l.,yF,O.,.OF,matrix2?postRotateSO.J:Matrix-4.0,-5.0,-6.01.0,1.0,3.00.0,0.0,-1.0pogtRotate(90J,-4.OF-.-5.OF,-:6.OF,matris1.UF

14、,2.OF,3.,OF,1.OF,O_.OF,O.LIF.T4. 0F,5.UF,6.UF,Q上OF,i:!.,LiF,1,.OF.OF,O.OF-1.OF.-OF,L!.OF,1,OFmatrix当于左乘矩看了上面的输出信息。我们得出结论:Preconcatsmatrix相当于右乘矩阵,Postconcats阵。上一篇副中,我们说到:MaErx-rniatriinwMatrix();natriii.3etTt匸己匸e(30)100).100);等价float-a-=-100.0Ef!=LOO.OF;匿呂匸rxa=:Ee:.Bl0,图形沿-X方向作切换变换?如b6图形沿-丫右向作切换变换如d,

15、图飛扌昔-1方向作切换变换.当b定i,且clu时x-xO-yO,y=d*xO-3=iiewrMatrix(i;riatxLX.3etSkew(0.2f,0.2f);r-.at.rz_x.ureTraE5Late(20;2ji;i.atrx=rnew-Mstrik();matrix.setSkew(0.2f,.j.2zj;raatriji.3已匸e心亠;Test.Log(14hXT:XTAG,set(l:%snrir.at-rK.toStrirg();通过以上,我们发现Matrix的setXXXX()函数,在调用时调用了一次reset(),这个在复合变换时需要注意。Matrix学习对称变换(反射

16、)什么是对称变换?具体的理论就不详细说明了,图像的镜像就是对称变换中的一种。a-b0de00G1yox=-a*xObvOiIy-=-(I*iOeyO;当b=d=Oa=-le=l时有-x=-xO?y=yO产生与Y轴对称的反射图形(来平後椽当b=d=ua=de=r-l时有x-=x&,y=-yO張生与畫轴对称的反射图形(垂直镜像)当b=d=ua-=Le=-l时x,=-xC:!y=-y0产生与原点对称的反射图形当b=El=l0=吃=町时有x=vOjy=xO+,产生与直线v=x对称的反射图形当b=cl=-la=Le*=O时稽x,=-yO;y=j-xfl产生与直线尸乍对称的反射图形利用上面的总结做个具体的例子,产生与直线y=-对称的反射图形,代码片段如下:finalfloat士弓,2-.0F,-1.?F_.0.7E-1.0F,-O.OE,0.0F;3.0Ff-3.0FfZ.OFmatrix-=new-Matrix():icatrx.i;KdtriK.pr匸e(2巳匚、一2.201;Teat.Lsj(i:snfr-.cttrx.()j;原图与变换后的图丽对比canvas(吐盘芦匸亡弓匸护12013nisll);canvas戊工且唧弓二匸理豆口(吐議匸已弓匸(rKatrLXnullj;当前矩阵输出是:图像变换的效果如下:

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!