关于Android开发中矩阵的疑问

在安卓开发中,我们会用到矩阵变换,尤其是自定义view时。矩阵的使用有先乘和后乘,这主要是因为矩阵的乘法不满足交换律。那么,当我们在运用一系列的平移,旋转等操作时,究竟是先执行哪个变换呢?

 

首先,我们知道安卓系统框架已经为我们封装了一系列的prexx和postxx方法。

为了便于理解,我们始终把当前的矩阵作为“焦点”。当prexx时,相当于两个矩阵相乘,而我们的焦点就在左边(前面),自然,post时,焦点就在后面即右边。然后把得到的乘式看做一个整体再运用其他的变换。

 

当我们对一个像素(坐标)应用一个矩阵时,就是矩阵左乘以我们的像素对应的列式矩阵。当我们使用一系列的pre和post时,像素对应的矩阵始终处于最右边。

 

那么,在运用的矩阵变换链(即一系列的变换矩阵,不包括像素对应的矩阵)中,是每运用一个变换就马上执行,还是构造了整个矩阵链再从左往右(或从右往左)依次执行呢?其实,矩阵的乘法有一个特点,就是满足结合律。所以不管是上面说的三种情况中的哪一种,结果都是一样的。只要左右不交换!

 

好的,我们现在提个疑问,对一个像素执行一系列变换时,是先执行哪个操作后执行哪个操作呢?

 

我们知道,对一个像素执行一个变换,就是用那个矩阵左乘以我们的像素对应的矩阵,然后得到一个新的像素坐标。嗯,到这里,结果已经出来了。我们可以这么理解,将所有的变换矩阵按照pre和post构成一条链,然后在链的最后乘以我们的坐标对应的矩阵,之后,从右往左依次执行。换句话说,就是先执行最右边的变换,依次往左。

说到底,关键是要记得矩阵满足结合律,另外,像素对应的矩阵始终在最右边。

ps:本篇文章是本人在网上查阅有关matrix资料时,突然有所感悟,为了防止忘记,所以速速记在了云笔记了,然后转过来了。阅读本片文章之前,希望大家对matrix矩阵有了解,文章主要记了本人对pre/post和变换顺序之间存在关系的看法,理解可能有误,欢迎大家多多指教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值