美文网首页
Matrix篇 — 基本使用

Matrix篇 — 基本使用

作者: 一盘好书 | 来源:发表于2019-12-08 18:42 被阅读0次

1 Matrix是什么

Matrix在内存中,就是一个长度为9的一维数组,可以用矩阵进行表示,如下图:

Matrix矩阵.jpg

通过这9个变量名可以发现,对Matrix的操作可以实现对组件的缩放,错切以及平移。最后一行的3个变量是在3D变换中使用,不在本篇的讨论范围。

执行preScale(x,y)改变的就是MSCALE_XMSCALE_Y的值,以此类推。

2 怎么操作Matrix

2.1 先了解几条规则:

1.操作矩阵是有左乘和右乘的分别,但是没有先执行谁,后执行谁的概念;

pre  : 右乘, M‘ = M * A
post : 左乘, M’ = A * M

2.矩阵的操作满足结合律

M = (A * B) * C = A * (B * C )
2.2 上例子:实现围绕点P(x,y)进行旋转S操作

因为默认坐标系是(0,0),所以该操作可以划分为三个步骤:

1.移动坐标系到(x,y)位置;
2.旋转S;
3.把坐标系移回原点。

利用Matrix写出来如下:

//最开始new出来,始终为单位矩阵
Matrix matrix = new Matrix();

matrix.preTranslate(x,y);
matrix.preRotate(S);
matrix.preTranslate(-x, -y);

需要注意的点是:scale操作会对整个画布造成缩放效果,而后的操作会在这个缩放效果上进行。比如:如果scale(2,0) ,那么接下来transform(100,0),其实是在x轴方向上移动了200像素。

Matrix matrix = new Matrix();
matrix.preScale(2, 0);
matrix.preTranslate(100, 0);
LogUtils.d("matrix: " + matrix.toShortString());

打印结果:matrix: [2.0, 0.0, 200.0][0.0, 0.0, 0.0][0.0, 0.0, 1.0]

相关文章

网友评论

      本文标题:Matrix篇 — 基本使用

      本文链接:https://www.haomeiwen.com/subject/jgvmgctx.html