版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Matrix 学习 基础知识以前在线性代数中学习了矩阵, 对矩阵的基本运算有一些了解, 前段时间在使用 GDI+ 的时候再次学习如何使用矩阵来变化 图像,看了之后在这里总结说明。首先大家看看下面这个 3 x 3 的矩阵,这个矩阵被分割成 4 部分。为什么分割成 4 部分,在后面详细说明。首先给大家举个简单的例子:现设点P0 (x0 , yO )进行平移后,移到 P (x, y ),其中x方向的平移量x, y方向的平移量y,那么,点P( x,y)的坐标为:x = xO+ xy = yO+ y采用矩阵表达上述如下:2 个元素就可以了上述也类似与图像的平移,通过上述矩阵我们发现,只需要修改矩阵右上角
2、的我们回头看上述矩阵的划分:拒阵区功能唄Scaled缩放心1 MSCALE_X1 ;|MSICEW X1 1Skew Shea:-透视变换口j1'MSKEW ¥1 i1 1|lI 1MSCAEEJ Rotate旋转门1 MTRAKS X1 11 11 11 11 1MT RAKS Ti1iTranslate-'平移"'MPEBSF 0-b_MPEitSP_l ( -1 +3_車i MFERSF_2 卜1iQ为了验证上面的功能划分,我们举个具体的例子:现设点 P0 (x0 , y0 )进行平移后,移到 P (x , y),其中x放大a倍,y放大b倍,2
3、 0 f0 b 00 0 1矩阵就是:5,按照类似前面 平移”的方法就验证。图像的旋转稍微复杂:现设点P0 (x0, yO )旋转B角后的对有点为P (x, y )。通过使用向量,我们得到如下:x0 = rcos ayO = rsin ax = r cos( a - 0 ) = xO cos 0 + yO sin 0y = r sia(a - 0 ) = -xO sin0 +y0 cos 0于是我们得到矩阵:cosfi -sinG 0sin9 cos6 00 0 1如果图像围绕着某个点(a ,b)旋转呢?则先要将坐标平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标 原点,在后面的篇
4、幅中我们将详细介绍。Matrix 学习 如何使用 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.toStri
5、ng();查看运行后的矩阵的值(通过 Log 输出)与上面的公式基本完全一样(android.graphics.Matrix采用的是浮点数,而我们采用的整数)。有了上面的例子,相信大家就可以亲自尝试了。通过上面的例子我们也发现,我们也可以直接来初始化矩阵,比如说要旋转30度:COS0sinO0-sin0 0cos0 00 1siH'30,=-0.5 cosJO 0.S660.8660.5a-0.5001866001前面给大家介绍了这么多,下面我们开始介绍图像的镜的镜像,分为2种:水平镜像、垂直镜像。先介绍如何实现垂直镜像,什么是垂直镜像就不详细说明。图像的垂直镜像变化也可以用矩阵变化的
6、表示,设点P0( x0,y0 )进行镜像后的对应点为P( x ,y ),图像的高度为fHeight,宽度为fWidth ,原图像中的P0( x0,yO )经过垂直镜像后的坐标变为(x0 ,fHeight- yO );x = xO y = fHeight - yO推导岀相应的矩阵是:厂1GV|00-IfHeight001X丿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);按照上述方法运行后的结果:至于水平镜像采用类似的
7、方法,大家可以自己去试试吧实际上,使用下面的方式也可以实现垂直镜像:Matrix matrix =new Matrix();matrix.setScale (1.0, -1.0);matrix.postTraslate(0, fHeight);这就是我们将在后面的篇幅中详细说明Matrix学习 图像的复合变化Matrix学习一一基础知识篇幅中,我们留下一个话题:如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。我们需要3步:1. 平移将坐标系平移到点 P(a,b);2. 旋转一一以原点为中心旋转图像;3. 平移将旋转后的图像平
8、移回到原来的坐标原点;相比较前面说的图像的几何变化(基本的图像几何变化),这里需要平移 平移一一旋转一一平移,这种需要多种图像的几何变化 就叫做图像的复合变化。设对给定的图像依次进行了基本变化F1、F2、F3.、Fn,它们的变化矩阵分别为 T1、T2、T3.、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1T1 。1o计cos 0 -sin R(k10T10-fchn1T2sin 9co a 00+-1c -10 -0,2Q -* o0-0按照上面的原则,围绕着某个点(a,b)旋转B的变化矩阵序列是:T = T3 T2 T1 =b01cos 9sin 0vin日cos e-b/ 51
9、110am 0 cos B按照上面的公式,我们列举一个简单的例子:围绕(100,100 )旋转30度(sin 30 = 0.5,cos 30 = 0.866)float f= 0.866F,-0.5F, 63.4F,0.5F, 0.866F,-36.6F,0.0F,0.0F,1.0F ;matrix = new Matrix ();matrix. setValues (f);旋转后的图像如下:Android为我们提供了更加简单的方法,如下:Matrix matrix = new Matrix ();matrix. setRotate (30 , 100 , 100);矩阵运行后的实际结果:se
10、tEotate(30,IOC.000000,100.000000):Matrix0.3660254, 05, 63.39746J 0.5, 0 . G660254, -36.S0254 0.0 0.0, 1.0与我们前面通过公式获取得到的矩阵完全一样。在这里我们提供另外一种方法,也可以达到同样的效果:float a = 100.0F,b = 100.0F;matrix = new Matrix ();matrix. setTranslate (a,b);matrix. preRotate (30);matrix. preTranslate (-a,-b);将在后面的篇幅中为大家详细解析通过类似
11、的方法,我们还可以得到:相对点对点P(a , b)的比例sx,sy 变化矩阵sx 00 sy0Q、Matrix/ f1-sx17学习Prec on cats or Postc on cats?从最基本的高等数学开始,Matrix的基本操作包括:+、*。Matrix的乘法不满足交换律,也就是说A*B工B*A还有2种常见的矩阵:Identity Matrix单位矩阵 E( T2if elements on th? main diagonal of the identic matrb: are 1. Al o:ier elitns of 二比 identic matr are 0.)Inverse
12、Matrix-逆柜阵 A*A-i=E'有了上面的基础,下面我们开始进入主题。由于矩阵不满足交换律,所以用矩阵B乘以矩阵A,需要考虑是左乘(B*A ),还是右乘(A*B )。在Android的android.graphics.Matrix中为我们提供了类似的方法,也就是我们本篇幅要说明的Preconcats matrix 与Postconcats matrix 。下面我们还是通过具体的例子还说明:- float- 1.0Fr-2.0F,4.GFr *SiOF,fi.OF,-0.0F,1.0FMatrix natrixl= new'Matrix fi;巴已匸工二亘二匸m m f ;
13、Test 匸二歹卩旦:二2二兀_:二&,“忙启匸2:二?2:*三'1 f irLatrixl. toString ");. pxeztate ;"&3匸.二了卩闵壬二二Z二量左” “直盘匸丁二Xl.pTE宝匸隹tE iJl :黑三”llatr.x -ratrixl - newMatrix (i ;広at工二&3 ' f 3 i ;Test,: *sM f &tr_x2 () ;雄a 匸工二 icE . pc3otae 9j);Tet-11vrx2 ,r( 9: i :鳶耳"frxatrix2 * toStriT: (
14、J J ;通过输岀的信息,我们分析其运行过程如下:.461 MatrixL461 MatrixmatriHl.QF, 2.OF,3.OF,5.r,0F, 6.,OFy口.OF, 口.OF,l>pl4.0. 5.0,. 6.0 0.0, 0.0. 1.0juatrixi . preRotate( 90) NatriH 2.0, 5 0.0.0,Kotate(90)O*OF, O.OF,1.07-1.0, 30 -40. 6.0)0.0, 1.0matrixl.preRotate(30)*2 .OF, mF3.DF#5.F/ -4.QF,6 OFO.OF, O.OF,1.OF461 Matr
15、ixi;iatrie2 : Jfat rih1.0. 2 0 3 0“mm为14 SI Matrixmatrix? . postRotaite( 90 ) :Matrix- 4 . 0 , -5.0, 6 . 0 matrix1.0, 2 0 3.00.0. 0.0, 10 mstrisS postRotate(90) r 、:L nF, 2 OFS ,OFrQ,QFf O.DF.r l.DF* Rotate(90)O.GF,-1.0F,0-OF.1.OF5 O.OF,Q.OF. T1 b TV iTI F a TV T1 C Fh 亍T m 0., OF, O. OF, 1.0Fl.OF;
16、2.OF,3.OF,爲QF"氣賊&価fQ . OF,1., OF看了上面的输出信息。我们得出结论:Preconcats matrix相当于右乘矩阵,Postconcats matrix 相当于左乘矩阵。上一篇副中,我们说到:- = -1-Iamx ();r;atrLX . 二:二三:<(己 7,10_ 2 :;尊价floit e 1- <0:, :T,b-'100,OE;ratrix jj -. : : : . : - x 0;带且匸二二sc. : 2 t 'J r - r _ i : (a, b i : rr.s.Z 二x 匸二三 M :=:巴3
17、 :); rttatiix.preZranslatT: -a, -b);其晕死过程的详细分析就不在这里多说了Matrix学习错切变换ratrix = -new Matrix();Matrix. Skew ( j . jf * 5f i ;Test. Log flIL:yR:X_TAGJ,T5etvai 3 门:®sfr.atrLX 匸) ; 当前矩阵运行后的结果直辿豆上三丄县.爭戸匕屯亘丄卫县塁.().:.理gjg占昱_.。亠_ 0 -心”一!:11对图像的错切变换做个总结:/ / X1b :0xOy=d10yo10 0 11X丿X/丿x = x0 + b*yO;y = d*xO +
18、 yO;当d- 0时 x =盂0 &*yO*v -'v0图形的Y坐标不变,X坐标随初始值$ 丫工芨变化系数匕而作线 性变换,如Z图形沿亠X育向作切换变换,如XC,图形沿-芫 芳向作切换变换.当b0时x = kOtv = d*xO -v图形的Y坐标不变,Y坐标随初始值莖“变化系数d而作线性变换;如血爲图形沿亠丫方向作切换变嬴;如肛心图形沿-Y 方向作切换变换.当且x =垃一七孕,y = d;HxO -yij图形沿M Y两个方向作切换变换.r.atr 1 x Matrix (i ;带云匸二二 jc *-£-1 : 2 f i ;豐互匚二二x.gME二二互匚兰二吕匸e2-1
19、2-* ;na111 x = :ew - MatriK ();rem匸二二x 三已匸Sitww j : - 2f, j »2z j ; rritrx,(2 Z, 2 Z 3 ;这里再次给大家介绍一个需要注意的地方:Te3t * Lee 114A;TzlX 二盒;?* 亡七八歳2.u乞二(i :5", Matrix * tcStrL7;g ( i i ;通过以上,我们发现 Matrix的setXXXX()函数,在调用时调用了一次 reset(),这个在复合变换时需要注意。Matrix学习对称变换(反射)什么是对称变换?具体的理论就不详细说明了,图像的镜像就是对称变换中的一种。f X孑XjZ强ab0破y=de0y(10011 J/Ix =泸朝-护、0:v = d*xO- e*vO:bft)当 b=d=0> a=-1» e= l 时 有 x = -kO» y = yO产生与Y轴对称的反射图形(水平鏡像)当 b=cl=u»
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 危险废物转运交接安全管控方案
- 图文店用电安全操作规程
- 岸桥司机安全操作规程
- 2026年煤田地质试题及答案解析
- 结缔组织病相关间质性肺病居家呼吸训练共识
- 2026学年湖南省醴陵市一年级数学期末自测模拟黑金考题详细参考解析详细答案和解析
- Oracle开发面试题及详细答案(实战版)
- 2026年心血管病学综合知识竞赛试题及答案解析
- 电炉炼钢工安全操作规程
- 医用气体终端安装调试方案
- 摩托置换合同协议书模板
- 浦东新区2024-2025学年六年级上学期期中考试数学试卷及答案(上海新教材)
- 2002年江苏省苏州市中考数学真题【含答案、解析】
- 2025-2030中国密胺餐具行业发展分析及发展前景与投资研究报告
- 寒地城市公共交通的绿色出行模式
- 《血管活性药物静脉输注护理》团体标准解读
- 杜绝“死亡游戏”(梦回大唐)学生安全主题班会课件
- 中考英语1600核心词汇
- 《证券投资学实训教程》全套教学课件
- 三月的桃花心中开混声合唱谱
- 银行开门红营销思路
评论
0/150
提交评论