美文网首页
从矩阵来看Android中的一些动画变换

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

作者: 长孙雨聪七星上将 | 来源:发表于2018-04-19 17:52 被阅读0次

    个人博客: 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中的一些动画变换

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