理解android中出现的matrix

2021-08-24  本文已影响0人  WLHere

概览

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矩阵 ,它的一个元素:

image.png
例如: image.png

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

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

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

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

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

坐标变换

缩放

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


image.png

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

位移

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


image.png

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

旋转

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


image.png

绕y轴旋转


image.png
绕z轴旋转
image.png
绕(Rx, Ry, Rz)旋转
image.png
拼接操作

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


image.png

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


image.png

总结

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

猜你喜欢

热点阅读