zoukankan      html  css  js  c++  java
  • Android源码之Matrix

    Matrix类在Android中主要用来进行矩阵变换,其可操作的对象包括图像、点阵、Vector(向量)、矩形等。

    Matrix支持的变换类型主要有以下几种:

    1、Translate:平移变换

    2、Rotate:旋转变换

    3、Scale:缩放变换

    4、Skew:错切变换

    Matrix的主要接口也是根据这几种变换类型来分的。

    一、针对变换类型的接口。针对每一种变换类型,Matrix都提供了三种接口,即

    setXXX();

    preXXX();

    postXXX();

    其中:

    setXXX()接口用于设置该Matrix。其以前的设置值全被清空,相当于先执行了一次reset(),然后执行setXXX();

    preXXX()接口用于矩阵前乘,即M' = M * T(...);

    postXXX()接口用于矩阵后乘,即M' = T(...) * M;

    如:

    public void setScale(float sx, float sy, float px, float py);

    public void setScale(float sx, float sy);

    public boolean preScale(float sx, float sy, float px, float py);

    public boolean preScale(float sx, float sy);

    public boolean postScale(float sx, float sy, float px, float py);

    public boolean postScale(float sx, float sy);

    注:除平移变换外,其余三种变换类型的每个接口都提供了一个重载版本,其中一个是可以指定pivot点,另一个是默认0坐标点。pivot点指中心点,如旋转中心点,缩放中心点,其特点是在变换过程中,其位置保持不变。

    二、针对具体对象进行变换的接口

    1、对矩形变换

    public boolean rectStaysRect(); //判断该矩阵是否能够将一个矩形变换为另一个矩形。只有单位阵,或者只进行过平移、缩放、和N*90度旋转的矩阵才能对矩形进行变换

    public boolean setRectToRect(RectF src, RectF dst, ScaleToFit stf); //使用矩形src到dst的平移和缩放值来设置当前矩阵

    public boolean mapRect(RectF dst, RectF src); //使用当前矩阵将src映射为dst
    public boolean mapRect(RectF rect); //同mapRect(rect, rect);

    2、对点序列进行变换

    public void mapPoints(float[] dst, int dstIndex, float[] src, int srcIndex, int pointCount);

    public void mapPoints(float[] dst, float[] src);

    public void mapPoints(float[] pts);

    使用当前矩阵将src点序列映射到dst点序列。点序列的格式为x1,y1,x2,y2......

    3、对Vector向量进行变换

    public void mapVectors(float[] dst, int dstIndex, float[] src, int srcIndex, int vectorCount);
    public void mapVectors(float[] dst, float[] src);
    public void mapVectors(float[] vecs);

    使用当前矩阵对向量进行变换。

    三、矩阵操作

    public boolean invert(Matrix inverse); //判断当前矩阵是否可转置,如果是则返回true,同时将inverse设置为转置阵
    public void getValues(float[] values); //取得当前矩阵的float序列
    public void setValues(float[] values); //将float序列值转化为当前矩阵的值。

    关于Matrix转置类型的介绍以及Matrix矩阵的格式的介绍请参考:

    http://zensheno.blog.51cto.com/2712776/513652

    http://blog.csdn.net/pathuang68/article/details/6991867

    测试代码下载:http://download.csdn.net/detail/lxgwm2008/5234463

  • 相关阅读:
    程序员的7中武器
    需要强化的知识
    微软中国联合小i推出MSN群Beta 不需任何插件
    XML Notepad 2006 v2.0
    Sandcastle August 2006 Community Technology Preview
    [推荐] TechNet 广播 SQL Server 2000完结篇
    《太空帝国 4》(Space Empires IV)以及 xxMod 英文版 中文版 TDM Mod 英文版 中文版
    IronPython 1.0 RC2 更新 1.0.60816
    Microsoft .NET Framework 3.0 RC1
    《Oracle Developer Suite 10g》(Oracle Developer Suite 10g)V10.1.2.0.2
  • 原文地址:https://www.cnblogs.com/xiaorenwu702/p/5158522.html
Copyright © 2011-2022 走看看