本文原始发表于:https://juejin.cn/post/7038557734517604382
Matrix 简介
Android 图形库中的 android.graphics.Matrix 是一个 3×3 的 float 矩阵,其主要作用是坐标变换
它的结构大概是这样的
其中每个位置的数值作用和其名称所代表的的含义是一一对应的
- MSCALE_X、MSCALE_Y:控制缩放
- MTRANS_X、MTRANS_Y:控制平移
- MSKEW_X、MSKEW_X:控制错切
- MSCALE_X、MSCALE_Y、MSKEW_X、MSKEW_X:控制旋转
- MPERSP_0、MPERSP_1、MPERSP_2:控制透视
在 Android 中,我们直接实例化一个 Matrix
,内部的矩阵长这样:
是一个左上到右下为 1,其余为 0 的矩阵,也叫单位矩阵,一般数学上表示为 I
Matrix 坐标变换原理
前面说到 Matirx 主要的作用就是处理坐标的变换,而坐标的基本变换有:平移、缩放、旋转和错切
这里所说的基本变换,也称仿射变换 ,透视不属于仿射变化,关于透视相关的内容不在本文的范围内
当矩阵的最后一行是 0,0,1 代表该矩阵是仿射矩阵,下文中所有的矩阵默认都是仿射矩阵
线性代数中的矩阵乘法
在正式介绍 Matrix 是如何控制坐标变换的原理之前,我们先简单复习一下线性代数中的矩阵乘法,详细的讲解可参见维基百科或者翻翻大学的《线性代数》,这里只做最简单的介绍
-
两个矩阵相乘,前提是第一个矩阵的列数等于第二个矩阵的行数
-
若 A 为 m × n 的矩阵,B 为 n × p 的矩阵,则他们的乘积 AB 会是一个 m × p 的矩阵,表达可以写为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVHNdQyD-1648174828210)(https://wikimedia.org/api/rest_v1/media/m