Android图形变换——Matrix学习

说到Android的图形变换就不得不提Matrix,包括安卓在内的很多计算机图形的变换都是基于矩阵来进行的,常规的操作如平移,旋转,缩放等操作,都是通过矩阵之间的相加,前乘、后乘来实现的。

那么首先,我们就必须知道,为什么Android中的Matrix是一个3*3的座标系,而不是4*4或者2*2呢。我们知道,如果要实现平移变换,只需要对对象的x,y值进行操作即可

 写成矩阵的形式就是

 那么如果想要实现缩放呢

可以看到,缩放其实就是对x和y值进行了一定系数的放大,这里就引入了二维座标系

同理,针对图形的旋转操作 

 就是对X,Y值进行了三角函数运算

那如果,想要同时实现旋转,缩放和平移怎么办,对象平移是加法,而旋转和缩放使用的是乘法。

划重点:那么有没有一种方法能同时实现旋转、缩放、平移呢?

这里,计算机图形学中采用的是升维的方法,就是把二维座标转换为三维座标

这样,平移操作就可以表示成:

同理,缩放和旋转:

 

 

这就是引入齐次座标的作用把各种变换都统一了起来,即 把缩放,旋转,平移等变换都统一起来,都表示成一连串的矩阵相乘的形式。保证了形式上的线性一致性。

至于为什么在X,Y后面添加了1而矩阵不变?这就是齐次座标系的原因了

对于Android来说,也是同样的道理。这里,还是不免俗套地祭出谷歌的经典图

这里写图片描述

 通过字面的意思我们也能大概猜测出来每个元素代表的意思,其中,这个矩阵是通过bitmap的getmatrix得到的,而且在每个手机中的数值都不同,当我想去探究这个矩阵是如何生成时,奈何底层是c实现的,我们不得而知。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章