android view绘制之matrix

android view绘制之点的matrix坐标变换

首先我们来复习下高等数学中矩阵的知识(来自百度百科)

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 [1] ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出
由 m × n 个数aij排成的m行n列的数表称为m行n列的矩阵,简称m × n矩阵。记作:
在这里插入图片描述
这m×n 个数称为矩阵A的元素,简称为元,数aij位于矩阵A的第i行第j列,称为矩阵A的(i,j)元,以数 aij为(i,j)元的矩阵可记为(aij)或(aij)m × n,m×n矩阵A也记作Amn。
元素是实数的矩阵称为实矩阵,元素是复数的矩阵称为复矩阵。而行数与列数都等于n的矩阵称为n阶矩阵或n阶方阵 [8] 。

矩阵的基本的加减法这里不做介绍,自行查询
这里特别介绍下矩阵乘法
矩阵的乘法满足以下运算律:
结合律:a(bc) =( ab)c
左分配律:(a+b)c=ac+bc
右分配律:c(a+b) = ca+cb!=ac+bc
矩阵乘法不满足交换律 ab!=ba

矩阵相乘必须满足的条件:
矩阵a的行数=矩阵b的列数
在这里插入图片描述
矩阵乘法的结果矩阵=矩阵a的每一行的各个元素分别*矩阵b的每一列的各个元素的结果相加

关于矩阵的数学知识就介绍到这里,下面介绍安卓中矩阵的运用
matrix有6个元素,分别代表
在这里插入图片描述
一个点的矩阵是一个3*1的矩阵

在这里插入图片描述

那么对一个点进行矩阵变换后的结果就是
resultx = mscalex * prex+mskewx * prey+mtransx * 1
resulty = mscaley * prex+mskewy * prey+mtransy * 1

对一个path进行matrix android提供了API,这里仅仅展示下我在一个项目中的写法,具体自行研究

              Matrix matrix = new Matrix();

               matrix.setScale(Float.valueOf(scaleX) * getScale(), Float.valueOf(scaleY) * getScale());
                path.transform(matrix);
                matrix.setRotate(Float.valueOf(rotate) * getScale());
                path.transform(matrix);
                matrix.setSkew(Float.valueOf(rotate) * getScale(), Float.valueOf(skew) * getScale());
                path.transform(matrix);
                matrix.setTranslate(Float.valueOf(translateX) * getScale(), Float.valueOf(translateY) * getScale());
                path.transform(matrix);

猜你喜欢

转载自blog.csdn.net/ligaoyuan8030/article/details/103642330