矩阵与matrix
单位矩阵:
matrix.invert
求矩阵的逆矩阵,简而言之就是计算与之前相反的矩阵,
如果之前是平移200px,则求的矩阵为反向平移200px,如果之前是缩小到0.5f,则结果是放大到2倍。
Log.e("matrix", "=======================单位矩阵===========================");
{
Matrix matrix = new Matrix();
Log.e("matrix", "是否单位矩阵========" + matrix.isIdentity());//true
matrix.postTranslate(200, 0);
Log.e("matrix", "是否单位矩阵========" + matrix.isIdentity());//false
}
Log.e("matrix", "=======================平移===========================");
{
Matrix matrix = new Matrix();
Matrix invert = new Matrix();
matrix.setTranslate(200, 500);
Log.e("matrix", "before - matrix ===" + matrix.toShortString());
//[1.0, 0.0, 200.0][0.0, 1.0, 500.0][0.0, 0.0, 1.0]
matrix.invert(invert);
Log.e("matrix", "after - invert ===" + invert.toShortString());
//[1.0, 0.0, -200.0][0.0, 1.0, -500.0][0.0, 0.0, 1.0]
}
Log.e("matrix", "=======================缩放===========================");
{
Matrix matrix = new Matrix();
Matrix invert = new Matrix();
matrix.setScale(2, 2);
Log.e("matrix", "before - matrix ===" + matrix.toShortString());
//[2.0, 0.0, 0.0][0.0, 2.0, 0.0][0.0, 0.0, 1.0]
matrix.invert(invert);
Log.e("matrix", "after - invert ===" + invert.toShortString());
//[0.5, 0.0, -0.0][0.0, 0.5, -0.0][0.0, 0.0, 1.0]
}
Log.e("matrix", "=========================斜切=========================");
{
Matrix matrix = new Matrix();
Matrix invert = new Matrix();
matrix.setSkew(20, 20);
Log.e("matrix", "before - matrix ===" + matrix.toShortString());
//[1.0, 20.0, 0.0][20.0, 1.0, 0.0][0.0, 0.0, 1.0]
matrix.invert(invert);
Log.e("matrix", "after - invert ===" + invert.toShortString());
//[-0.0025062656, 0.050125312, -0.0][0.050125312, -0.0025062656, -0.0][0.0, 0.0, 1.0]
}
Log.e("matrix", "=======================旋转90°===========================");
{
Matrix matrix = new Matrix();
Matrix invert = new Matrix();
matrix.setRotate(90);
Log.e("matrix", "before - matrix ===" + matrix.toShortString());
//[0.0, -1.0, 0.0][1.0, 0.0, 0.0][0.0, 0.0, 1.0]
matrix.invert(invert);
Log.e("matrix", "after - invert ===" + invert.toShortString());
//[0.0, 1.0, -0.0][-1.0, 0.0, 0.0][0.0, 0.0, 1.0]
}
Log.e("matrix", "=======================旋转-90°===========================");
{
Matrix matrix = new Matrix();
Matrix invert = new Matrix();
matrix.setRotate(-90);
Log.e("matrix", "before - matrix ===" + matrix.toShortString());
//[0.0, 1.0, 0.0][-1.0, 0.0, 0.0][0.0, 0.0, 1.0]
matrix.invert(invert);
Log.e("matrix", "after - invert ===" + invert.toShortString());
//[0.0, -1.0, 0.0][1.0, 0.0, -0.0][0.0, 0.0, 1.0]
}
Log.e("matrix", "============== mapPoints(float[] pts) =====================");
{
// 初始数据为三个点 (0, 0) (80, 100) (400, 300)
float[] pts = new float[]{0, 0, 80, 100, 400, 300};
// 构造一个matrix,x坐标缩放0.5
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);
// 输出pts计算之前数据
Log.e("matrix", "before: =====" + Arrays.toString(pts));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
// 调用map方法计算
matrix.mapPoints(pts);//pts:The array [x0, y0, x1, y1, ...] of points to transform.
// 输出pts计算之后数据
Log.e("matrix", "after : =====" + Arrays.toString(pts));
//[0.0, 0.0, 40.0, 100.0, 200.0, 300.0]
}
Log.e("matrix", "============= mapPoints(float[] dst, float[] src) ================");
{
// 初始数据为三个点 (0, 0) (80, 100) (400, 300)
float[] src = new float[]{0, 0, 80, 100, 400, 300};
float[] dst = new float[6];
// 构造一个matrix,x坐标缩放0.5
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);
// 输出计算之前数据
Log.e("matrix", "before: src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
Log.e("matrix", "before: dst=====" + Arrays.toString(dst));
//[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
// 调用map方法计算
matrix.mapPoints(dst, src);
// 输出计算之后数据
Log.e("matrix", "after : src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] 不变
Log.e("matrix", "after : dst=====" + Arrays.toString(dst));
//[0.0, 0.0, 40.0, 100.0, 200.0, 300.0]
}
Log.e("matrix", "==== mapPoints(float[] dst, int dstIndex,
float[] src, int srcIndex, int pointCount) =====");
{
// 初始数据为三个点 (0, 0) (80, 100) (400, 300)
float[] src = new float[]{0, 0, 80, 100, 400, 300};
float[] dst = new float[6];
// 构造一个matrix,x坐标缩放0.5
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);
// 输出计算之前数据
Log.e("matrix", "before: src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
Log.e("matrix", "before: dst=====" + Arrays.toString(dst));
//[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
// 调用map方法计算(最后一个2表示两个点,即四个数值,并非两个数值)
matrix.mapPoints(dst, 0, src, 2, 2);
// 输出计算之后数据
Log.e("matrix", "after : src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
Log.e("matrix", "after : dst=====" + Arrays.toString(dst));
//[40.0, 100.0, 200.0, 300.0, 0.0, 0.0]
}
Log.e("matrix", "==== mapPoints(float[] dst, int dstIndex,
float[] src, int srcIndex, int pointCount) =====");
{
// 初始数据为三个点 (0, 0) (80, 100) (400, 300)
float[] src = new float[]{0, 0, 80, 100, 400, 300};
float[] dst = new float[6];
// 构造一个matrix,x坐标缩放0.5
Matrix matrix = new Matrix();
matrix.setScale(0.5f, 1f);//setScale(float sx, float sy)
// 输出计算之前数据
Log.e("matrix", "before: src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
Log.e("matrix", "before: dst=====" + Arrays.toString(dst));
//[0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
// 调用map方法计算(最后一个2表示两个点,即四个数值,并非两个数值)
matrix.mapPoints(dst, 0, src, 4, 1);
// 输出计算之后数据
Log.e("matrix", "after : src=====" + Arrays.toString(src));
//[0.0, 0.0, 80.0, 100.0, 400.0, 300.0]
Log.e("matrix", "after : dst=====" + Arrays.toString(dst));
//[200.0, 300.0, 0.0, 0.0, 0.0, 0.0]
}