Loading...
墨滴

WL

2021/08/26  阅读:72  主题:默认主题

理解android中出现的matrix

概览

matrix,中文名:矩阵,曾经在《线性代数》中出现过。我们应该学过矩阵乘法,知道它不满足乘法交换律,知道前乘和后乘结果不一样。

在android中也多次出现matrix,例如:

  1. ImageView的scaleType有一个matrix的值,设置缩放属性为matrix
  2. Canvas也可以设置matrix: Canvas.setMatrix,设置canvas的位移、缩放、旋转
  3. TextureView也可以设置matrix: TextureView.setTransform,设置画面的位移、缩放、旋转

matrix的运算函数有 setRotate、setScale、setTranslate preRotate、preScale、preTranslate postRotate、postScale、postTranslate

android中为什么使用matrix? matrix的pre、post、set方法有什么区别?

相关概念

矩阵:是一个按照长方阵列排列的复数或实数集合
矩阵相乘:两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。如Am×n矩阵和Bn×p矩阵,它们的乘积C是一个m×p矩阵 ,它的一个元素:

例如:

矩阵和向量相乘:如果Am×n矩阵和Bn×1矩阵(向量n),它们的乘积C是一个m×1矩阵(向量m)

对角矩阵(identity matrix):一个n*n的矩阵,非对角线上的元素均为0

对角矩阵和向量相乘:如果对角线元素均为1,那么结果还是向量本身

顶点 构成图形的关键点,例如矩形的顶点是四个角,三角形的顶点是3个角

用向量(x, y, z)表示顶点坐标(x, y, z)

坐标变换

缩放

缩放相对容易理解,直接乘顶点坐标即可

可以看到,S1负责缩放x,S2负责缩放y, S3负责缩放z

位移

缩放也容易理解,直接乘顶点坐标即可

可以看到,T1负责x,T2负责y,T3负责z

旋转

旋转的数学逻辑比较复杂,我们跳过数据逻辑,直接看答案 绕x轴旋转

绕y轴旋转

绕z轴旋转

绕(Rx, Ry, Rz)旋转

拼接操作

通过矩阵乘法,我们可以把多个变换矩阵合并到一个矩阵,例如:先移动,再缩放

然后乘以顶点坐标,符合先位移再缩放

总结

  1. matrix可以合并多个变换为1个,相当于可以存储变换,也减少最终变换的计算量
  2. pre: 应用在所有变换之前
  3. post: 应用在所有变换之后
  4. set: 重新设置变换

WL

2021/08/26  阅读:72  主题:默认主题

作者介绍

WL