Matrix
首先Google一下这个词的意思
ok, 本内容主要学习安卓中Matrix的使用
如果要学习安卓中的矩阵的话,首先学习一下数学中的矩阵。这个高中的时候好像学过。大概长这个样子:
这就是个2*2 的矩阵了。
矩阵可以加,减,数乘,乘,转置,共轭和共轭转置(后面三个高大上的就不看了)。
加减比较容易如:
也就是各个位置上的数加或减,得到的结果就是两矩阵加或减,需要注意的是两个矩阵要是同型矩阵,同型。。。同性。。。Emmm果然同性才是真爱
先看看数乘:
前面的数分别和矩阵中各个位置上的数相乘就阔以了
在看一下乘法,两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵
阔以看到乘法的规则是
第一个矩阵的第一行各个数 * 第二个矩阵的第一列各个数 = 结果矩阵的第一行第一列的数
第一个矩阵的第一行各个数 * 第二个矩阵的第二列各个数 = 结果矩阵的第一行第二列的数
以此类推
另外从上面看出乘法不满足交换律
数学矩阵基础先到这里。
看一下安卓中Matrix类的概要
矩阵类用一个3x3的矩阵来处理坐标转换
下面有9个字段,如果放在矩阵中就是这样的
这个是根据常量的值来放的
先创建一个Matrix类的对象,看看这几个字段对应的值是多少
[1.0 ,0.0 ,0.0 ,0.0 ,1.0 ,0.0 ,0.0 ,0.0 ,1.0 ,]
matrix.setRotate(30);
设置旋转角度30之后
值变成了
先看一下效果图,
顺时针旋转了30度。怎么做到的呢?
假定有一个点 ,相对坐标原点顺时针旋转后的情形,同时假定P点离坐标原点的距离为r,如下图:
那么就有:
换做矩阵运算就如下图:
这样就能看出来设置角度是如何作用于像素点x,y的坐标了
如果是缩放呢? 试着设置
matrix.setScale(3,3);
效果图
可以看出,图被放大了3倍,对应matrix中的值是
从上面两个例子中,可以看出缩放和旋转只用了左上角四个变量就阔以完成了
在看一下移动吧设置matrix.setTranslate(200,20);
效果图:
对应matrix中的值是
也就是右上角两个值是处理平移的