Matrix

首先Google一下这个词的意思

android 使用matrix 进行缩放 安卓matrix_字段

ok, 本内容主要学习安卓中Matrix的使用

如果要学习安卓中的矩阵的话,首先学习一下数学中的矩阵。这个高中的时候好像学过。大概长这个样子:

android 使用matrix 进行缩放 安卓matrix_Matrix_02

这就是个2*2 的矩阵了。

矩阵可以加,减,数乘,乘,转置,共轭和共轭转置(后面三个高大上的就不看了)。

加减比较容易如:

android 使用matrix 进行缩放 安卓matrix_Android_03

也就是各个位置上的数加或减,得到的结果就是两矩阵加或减,需要注意的是两个矩阵要是同型矩阵,同型。。。同性。。。Emmm果然同性才是真爱

先看看数乘:

android 使用matrix 进行缩放 安卓matrix_Matrix_04

前面的数分别和矩阵中各个位置上的数相乘就阔以了

在看一下乘法,两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如Am×n矩阵和Bn×p矩阵,它们的乘积C是一个m×p矩阵

android 使用matrix 进行缩放 安卓matrix_缩放_05

 

 

android 使用matrix 进行缩放 安卓matrix_Matrix_06

android 使用matrix 进行缩放 安卓matrix_缩放_07

阔以看到乘法的规则是

第一个矩阵的第一行各个数  *  第二个矩阵的第一列各个数 = 结果矩阵的第一行第一列的数

 

第一个矩阵的第一行各个数  * 第二个矩阵的第二列各个数 = 结果矩阵的第一行第二列的数

以此类推

另外从上面看出乘法不满足交换律

数学矩阵基础先到这里。

看一下安卓中Matrix类的概要

android 使用matrix 进行缩放 安卓matrix_Matrix_08

矩阵类用一个3x3的矩阵来处理坐标转换

android 使用matrix 进行缩放 安卓matrix_Android_09

下面有9个字段,如果放在矩阵中就是这样的

android 使用matrix 进行缩放 安卓matrix_Android_10

这个是根据常量的值来放的

先创建一个Matrix类的对象,看看这几个字段对应的值是多少

[1.0 ,0.0 ,0.0 ,0.0 ,1.0 ,0.0 ,0.0 ,0.0 ,1.0 ,]    

android 使用matrix 进行缩放 安卓matrix_Matrix_11

matrix.setRotate(30);

设置旋转角度30之后

值变成了

android 使用matrix 进行缩放 安卓matrix_Android_12

先看一下效果图,

android 使用matrix 进行缩放 安卓matrix_字段_13

顺时针旋转了30度。怎么做到的呢?

假定有一个点 ,相对坐标原点顺时针旋转后的情形,同时假定P点离坐标原点的距离为r,如下图:

android 使用matrix 进行缩放 安卓matrix_缩放_14

那么就有:

换做矩阵运算就如下图:

android 使用matrix 进行缩放 安卓matrix_字段_15

这样就能看出来设置角度是如何作用于像素点x,y的坐标了

android 使用matrix 进行缩放 安卓matrix_字段_16

如果是缩放呢? 试着设置

matrix.setScale(3,3);

效果图

android 使用matrix 进行缩放 安卓matrix_Android_17

可以看出,图被放大了3倍,对应matrix中的值是

android 使用matrix 进行缩放 安卓matrix_字段_18

 

android 使用matrix 进行缩放 安卓matrix_缩放_19

从上面两个例子中,可以看出缩放和旋转只用了左上角四个变量就阔以完成了

在看一下移动吧设置matrix.setTranslate(200,20);

效果图:

android 使用matrix 进行缩放 安卓matrix_缩放_20

对应matrix中的值是

android 使用matrix 进行缩放 安卓matrix_Matrix_21

 

也就是右上角两个值是处理平移的