android 学习之动画 -- 认识 Matrix

关于矩阵的介绍这两片博文写的不错,特别引荐:

1. http://www.360doc.com/content/11/1215/11/7635_172396706.shtml

2. http://blog.csdn.net/flash129/article/details/8234599


本博文主要介绍矩阵左乘(前乘)和右乘(后乘)的区别。

首先回顾下矩阵的运算的几个基本性质

1. 乘法结合律: (AB)C=A(BC)
2 .乘法左分配律:(A+B)C=AC+BC 
3. 乘法右分配律:C(A+B)=CA+CB 
4. 对数乘的结合性k(AB)=(kA)B=A(kB)

但矩阵乘法一般不满足交换律。即:
 AB != BA


我们知道android中的矩阵最终都是坐标进行变换的,但坐标是3 * 1的矩阵,而变换的矩阵是 3*3的。

我们设坐标为矩阵A,变换的矩阵为B,变换后的坐标矩阵为C,那么根据运算规则只能是

C = B * A,即变换矩阵左乘与坐标矩阵,也即是前乘。


好介绍完基本概念,接下来,看下面的例子:

加入图像需要先按中心旋转90度,再向左平移120个像素,然后再缩放2倍,设依次变换的矩阵是:R1,T1,S1,

原坐标为O1,变换后的坐标设为O2。那么用公式表示即是:  O2 = S1 * (T1 * (R1 * O1)); 按照结合律该公式等价于:

O2 = S1 * T1 * R1 * O1;

最后用android代码表示下:

Matrix m = new Matrix();

m.preRotate(cx,cy, 90);  ----- R1

m.preTranslate(120, 0);  ----- T1

m.preScale(2, 2);            ----- S1

O1.preConcat(m);


所以从这里也可以看出来,为啥叫左乘叫先乘了,按照变换规则,顺序应该是R1, T1, S1。并且我们知道矩阵不满足交换律

所以顺序很重要,T1,S1,只能是左乘于R1,字面上意思也就是R1要在T1之前乘,而T1要在S1之前乘。


如果所有都换成后乘(右乘)就变成了: O2 = R1 * T1 * S1 * O1。按照结合律性质,翻译成字面上意思就是:先进行缩放变换

后进行平移变换,最后进行旋转变换了。和原来要求变换方式,完全颠倒。

so 一个字总结:矩阵变换顺序很重要地,先乘和后乘区别大大的。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值