矩阵与matrix

参考:
矩阵的加法、乘法、转置、求逆、行列式

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

矩阵与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]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值