您的位置:首页 > 移动开发 > Android开发

Android graphics学习笔记(5) - Matrix

2013-11-11 11:20 369 查看
public class Matrix extends Object

Matrix类主要用来进行图形的矩阵变换

在学习Matrix之前,先复习下几个公式:

1. 矩阵乘法:

[a11, a12, a13   * [b11, b12]     ……

a21, a22, a23]  

2. 两角和差公式

sin(α+β)=sin α×cosβ+sinβ×cos α

sin(α-β)=sin α×cosβ-sinβ×cos α

cos(x+y)=cosxcosy-sinxsiny

cos(x-y)=cosxcosy+sinxsiny

Matrix定义了一个3×3的矩阵用于进行图形变换.

参数有:

int MPERSP_0

int MPERSP_1

int MPERSP_2

int MSCALE_X

int MSCALE_Y

int MSKEW_X

int MSKEW_Y

int MTRANS_X

int MTRANS_Y

包括SCALE(缩放), SKEW(歪斜), TRANS(平移), PERSP(好像定义的是3D方面的转动角度)

同时Matrix定义了一系列的set,pre,post方法来设定变换的参数:

同时,这几种方法是有不同的意义的:

set方法执行后,之前设置的参数都会被清除.变为默认值.

pre方法会在set、post和前面的pre方法之前调用.

post则是最正常的,依次调用.

比如:

matrix = new Matrix();

matrix.setRotate(10.0f);            //step ①

matrix.postScale(0.5f, 0.5f);      //step ②

matrix.postTranslate(0, 100.0f);   //step ③

matrix.preRotate(30.0f);            //step ④

matrix.preTranslate(300.0f, 0);    //step ⑤

canvas.drawBitmap(bitmap, matrix, mPaint);

调用顺序是⑤④①②③

这里值得一提的是,这种调用顺序变化的实现方式是通过矩阵的前乘和后乘实现的。

具体的方法有:

setRotate(),setScale(),setSinCos(),setSkew(),setTranslate(),

Matrix还提供了一个方法:setValues(float[] values).

这个方法该怎么传递变换参数呢:

这里,values就是包含上述9个参数的一个3维数组,也可以称为3阶矩阵.正是这个3阶矩阵和原矩阵相乘,从而得到新的变换矩阵.

更多参考见API:
http://developer.android.com/reference/android/graphics/Matrix.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: