篇幅中,我们留下一个话题:如果图像围绕着某个点P(a,b)旋转,则先要将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。
我们需要3步:
- 平移——将坐标系平移到点P(a,b);
- 旋转——以原点为中心旋转图像;
- 平移——将旋转后的图像平移回到原来的坐标原点;
相比较前面说的图像的几何变化(基本的图像几何变化),这里需要平移——旋转——平移,这种需要多种图像的几何变化就叫做图像的复合变化。
设对给定的图像依次进行了基本变化F1、F2、F3…..、Fn,它们的变化矩阵分别为T1、T2、T3…..、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1…T1。
按照上面的原则,围绕着某个点(a,b)旋转θ的变化矩阵序列是:
按照上面的公式,我们列举一个简单的例子:围绕(100,100)旋转30度(sin 30 = 0.5 ,cos 30 = 0.866)
float f[]= { 0.866F, -0.5F, 63.4F,0.5F, 0.866F,-36.6F,0.0F, 0.0F, 1.0F }; matrix = new Matrix(); matrix.setValues(f); 旋转后的图像如下:Android为我们提供了更加简单的方法,如下:
Matrix matrix = new Matrix(); matrix.setRotate(30,100,100); 矩阵运行后的实际结果: 与我们前面通过公式获取得到的矩阵完全一样。在这里我们提供另外一种方法,也可以达到同样的效果:
float a = 100.0F,b = 100.0F; matrix = new Matrix(); matrix.setTranslate(a,b); matrix.preRotate(30); matrix.preTranslate(-a,-b); 将在后面的篇幅中为大家详细解析通过类似的方法,我们还可以得到:相对点P(a,b)的比例[sx,sy]变化矩阵
http://www.moandroid.com/?p=1805