从矩阵来看Android中的一些动画变换

博客:http://zhangsunyucong.top

开头

这篇博客,是参考了文章:Android Matrix,这篇文章有具体的分析过程和android实例。我只是参考和根据自己的理解写的。

在Android中,我们可以从数学的角度来看颜色和动画的变换。这里会从矩阵变换的角度来理解平移,旋转,缩放,对称的变换。

这些变换的完成实际上,是操作一个3X3的矩阵的。而这四种基本变换与操作和这个矩阵有什么样的关系呢?下面会分析。

在Android中,已经为每种变换提供了pre、set和post三种操作方式。

set 用于设置Matrix中的值。 pre 是先乘,因为矩阵的乘法不满足交换律,因此先乘、后乘必须要严格区分。先乘相当于矩阵运算中的右乘。 post 是后乘,因为矩阵的乘法不满足交换律,因此先乘、后乘必须要严格区分。后乘相当于矩阵运算中的左乘。

另外,除平移变换(Translate)外,旋转变换(Rotate)、缩放变换(Scale)和错切变换(Skew)都可以围绕一个中心点来进行,如果不指定,在默认情况下是围绕(0, 0)来进行相应的变换的。

平移变换

假设坐标系中有A和B两个点,从A平移到B点,它们之间的关系上图所示。

在x和y轴的移动增量分别是:

则易得: 它的矩阵表示为:

旋转变换

1、围绕坐标原点旋转

由A点顺时针旋转一定角度到B点,如图所示。

由图易知:

由上面四个式子,可得: 矩阵表示,得:

旋转变换

2、围绕某点旋转

假设旋转点是:

顺时针旋转,结合1、上面的推导结果,可以得到矩阵: 可以化为:

可知,围绕某一点进行旋转变换,可以分成3个步骤,即首先将坐标原点移至该点,然后围绕新的坐标原点进行旋转变换,再然后将坐标原点移回到原先的坐标原点。

缩放变换

A点的x,y坐标分别放大a,b倍。则有一下关系:

用三维矩阵表示为:

对称变换

1、如果对称轴是x轴,则有:

用三维矩阵表示为:

2、如果对称轴是y轴,则有:

用三维矩阵表示为:

3、如果对称轴是y = x轴,如图

由等腰直角三角形可知: 已知中点在对称轴上,由中点坐标公式,易得: 联合两式子,2式先乘以2,再两式相加和相减,可得: 用三维矩阵表示为: 4、如果对称轴是y = -x轴。 同理,易推导得:

5、如果对称轴是y = kx时。如图

由图易知:

则有: 由直线的斜率公式,可得: 中点坐标在直线上,结合中点坐标公式,易得: 由上面两式,可求得: 用三维矩阵表示为:

k为任意实数,可以取特殊的值,验证前面对称推导的结果。k为1或者-1时,k为0时,k为无穷大时等等。

6、如果对称轴是y = kx + b时

只需要在5的基础上增加两次平移变换即可,即先将坐标原点移动到(0, b),然后做上面的关于y = kx的对称变换,再然后将坐标原点移回到原来的坐标原点即可。用矩阵表示大致是这样的:

你可能感兴趣的:(从矩阵来看Android中的一些动画变换)