Android中的Matrix类的使用

Matrix顾名思义就是大学的线性代数中的矩阵,关于矩阵的基本知识和加减乘除运算这里不再赘述,需要了解的可以看看线性代数有关知识(随便提供一个介绍地址:http://course.tjau.edu.cn/xianxingdaishu/jiao/2.htm

Android中的Matrix类是一个比较简单的3x3的3阶矩阵,结构如下:

float matrix = {MSCALE_X, MSKEW_X, MTRANS_X,
            	MSKEW_Y, MSCALE_Y, MTRANS_Y,
            	MPERSP_0, MPERSP_1, MPERSP_2
            	};

结构如上:其中 MSCALE_X和MSCALE_Y分别是控制X轴和Y轴方向的缩放,MSKEW_X和MSKEW_Y是分别控制X坐标和Y坐标的线性倾斜系数,MTRANS_X和MTRANS_Y则是控制X方向和Y方向的线性平移。MPERSP_0、MPERSP_1和MPERSP_2暂时使用不多,以后补充说明。

有了上诉描述了,所谓的矩阵变换主要就是针对这个3阶矩阵进行算术运算了!如平移操作从(0,0)平移到(10,120)则直接将上述矩阵的MSCALE_X=10和MSCALE_Y=120即可Matrix.setValues(matrix数组)。这样Canvas就可以使用该矩阵进行绘图操作,实现平移。

其中旋转矩阵比较特殊的,其结构如下:

float matrix = {cosA, -sinA, 0,
            	sinA,  cosA, 0,
            	0,     0,    1
            	};
其中A为旋转的角度,如需旋转操作只需将角度传入上述矩阵即可。

同时我们知道矩阵的乘法是不对称的,即A*B !=B*A,这样的话就涉及到矩阵乘法中的左乘和右乘了,同样Android中Matrix中也实现了左乘和右乘的函数,所有postXXX均为左乘运算,所有preXXX均为右乘运算。这点在我们使用Matrix进行组合变换时需要注意的问题。

同时由于矩阵对象最后的状态是进过所有变换后运算获得的矩阵,所有如果你需要重新使用该矩阵又不想保留之前的状态时,需要调用reset()重置矩阵的状态,以免发生错误。同时需要注意的是Matrix类的setXXX方法都会默认调用reset()进行矩阵的重置,所以在实现组合变换时一点要注意不要在变换的中间调用setXXX方法,这样setXXX方法之前的变换都被忽略了。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值