`

2011.10.13(2)——— android Matrix学习03

阅读更多
2011.10.13(2)———  android Matrix学习03

参考:http://www.moandroid.com/?p=1805

这节主要说一下图像的复合变化

我们知道rotate(旋转),scale(缩放)和skew(倾斜)这三种操作都可以指定中心点

第一:::说一下旋转

比如说:
_matrix.postRotate(30, 100, 250);

这个意思是说围绕着(100,250)旋转30°  

这种相当于先将坐标系平移到该点,再进行旋转,然后将旋转后的图像平移回到原来的坐标原点。
我们需要3步:
平移——将坐标系平移到点P(a,b);
旋转——以原点为中心旋转图像;
平移——将旋转后的图像平移回到原来的坐标原点;

1、一个概念

这种需要多种图像的几何变化就叫做图像的复合变化。

2、一个定律

设对给定的图像依次进行了基本变化F1、F2、F3…..、Fn,它们的变化矩阵分别为T1、T2、T3…..、Tn,图像复合变化的矩阵T可以表示为:T = TnTn-1…T1。

注意:最后乘的时候 是倒着乘的


//例子05 围绕某个点旋转的复合运算
	private void init5() {
		_bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.a)).getBitmap();
		
		//Matrix{[1.0, 0.0, -100.0][0.0, 1.0, -250.0][0.0, 0.0, 1.0]}
		//Matrix{[0.8660254, -0.5, 38.39746][0.5, 0.8660254, -266.50635][0.0, 0.0, 1.0]}
		//Matrix{[0.8660254, -0.5, 138.39746][0.5, 0.8660254, -16.506348][0.0, 0.0, 1.0]}
		_matrix.postTranslate(-100, -250);
		Log.i(TAG, _matrix.toString());
		_matrix.postRotate(30);
		Log.i(TAG, _matrix.toString());
		_matrix.postTranslate(100, 250);
		
		//Matrix{[0.8660254, -0.5, 138.39746][0.5, 0.8660254, -16.506348][0.0, 0.0, 1.0]}
//		_matrix.postRotate(30, 100, 250);
		
		
		//可以看出来_matrix.postRotate(30, 100, 250);
		//和上面的复合运算的结果是一样的 
		//所以说   如果图像围绕着某个点P(a,b)旋转,
		//则先要将坐标系平移到该点,
		//再进行旋转,
		//然后将旋转后的图像平移回到原来的坐标原点。
		//我们需要3步:
		//1、平移——将坐标系平移到点P(a,b);
		//2、旋转——以原点为中心旋转图像;
		//3、平移——将旋转后的图像平移回到原来的坐标原点;
		//一个概念:::
		//这种需要多种图像的几何变化就叫做图像的复合变化。
		//一个定律:::
		//设对给定的图像依次进行了基本变化F1、F2、F3…..、Fn,
		//它们的变化矩阵分别为T1、T2、T3…..、Tn,
		//图像复合变化的矩阵T可以表示为:T = TnTn-1…T1。
		//注意::最后乘的时候 是倒着乘的
		
	}



通过上面的 我们证明了
_matrix.postRotate(30, 100, 250);


_matrix.postTranslate(-100, -250);
_matrix.postRotate(30);
_matrix.postTranslate(100, 250);

是一样的

首先 我们根据定律 来算一下:





注意:第一步平移到(100,250)得到的矩阵的a3,b3是负数 -100,-250,我想可能是把坐标(100,250)平移到原点吧 这个得注意

另外 我们可以按照我们上一节的结论 可以算出:

平移 
[1.0, 0.0, -100.0][0.0, 1.0, -250.0][0.0, 0.0, 1.0]
旋转
a3 = a1*dx + a2*dy
b3 = b1*dx + b2*dy
[0.8660254, -0.5, 38.39746][0.5, 0.8660254, -266.50635][0.0, 0.0, 1.0]
平移 直接加即可
[0.8660254, -0.5, 38.39746+100][0.5, 0.8660254, -266.50635+250][0.0, 0.0, 1.0]
即:
[0.8660254, -0.5, 138.39746][0.5, 0.8660254, -16.506348][0.0, 0.0, 1.0]


第二:::缩放

//例子06 围绕某个点缩放的复合运算
	private void init6() {
		_bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.a)).getBitmap();
		//围绕100,250缩放到原来的一半
		//Matrix{[0.5, 0.0, 50.0][0.0, 0.5, 125.0][0.0, 0.0, 1.0]}
//		_matrix.postScale(0.5f, 0.5f, 100, 250);
		
		//Matrix{[1.0, 0.0, -100.0][0.0, 1.0, -250.0][0.0, 0.0, 1.0]}
		//Matrix{[0.5, 0.0, -50.0][0.0, 0.5, -125.0][0.0, 0.0, 1.0]}
		//Matrix{[0.5, 0.0, 50.0][0.0, 0.5, 125.0][0.0, 0.0, 1.0]}
		_matrix.postTranslate(-100, -250);
		Log.i(TAG, _matrix.toString());
		_matrix.postScale(0.6f, 0.5f);
		Log.i(TAG, _matrix.toString());
		_matrix.postTranslate(100, 250);
		
		//这个和上面的_matrix.postScale(0.5f, 0.5f, 100, 250);效果是一样的
		//根据
		//a1 = a1*sx  a2 = a2*sx a3 = a3*sx 
		//b1 = b1*sy  b2 = b2*sy b3 = b3*sy 
		//可以算出来的
	}


和上面一样 先平移 在缩放 在平移
用这个
a1 = a1*sx  a2 = a2*sx a3 = a3*sx
b1 = b1*sy  b2 = b2*sy b3 = b3*sy
就可以算出来
不再分析了 和上面一样的

最后 结论:

旋转
相对点P(a,b)旋转Ø
_matrix.postRotate(Ø, a, b);
矩阵:




缩放
相对点P(a,b)缩放(sx,sy)
_matrix.postScale(sx,sy, a, b);
矩阵:






  • 大小: 3.5 KB
分享到:
评论

相关推荐

    2011.10.12(3)——— android Matrix学习02

    这篇博客“2011.10.12(3)——— android Matrix学习02”可能深入探讨了Matrix类的使用方法,虽然具体的细节没有给出,但我们可以根据Matrix的基本功能和常见用法来展开讨论。 1. **Matrix类的介绍**:Matrix是...

    2011.10.09——— android ImageView放大缩小(2)

    标题中的“2011.10.09——— android ImageView放大缩小(2)”指的是一个关于Android平台中ImageView组件的优化技术,特别是如何处理图片的缩放问题。在Android应用开发中,ImageView是用于显示图像的常见组件,但...

    2011.10.19——— android 显示一行内容并录制其音频

    这篇博客“2011.10.19——— android 显示一行内容并录制其音频”可能详细探讨了如何实现这个功能。虽然描述部分没有提供具体信息,但我们可以基于标签“源码”和“工具”来推测文章内容,以及从文件名...

    com.apple.amp.itmstransporter——Simpsons.zip

    Xcode11,Transporter上传卡在——“正在验证APP-正在通过App Store进行认证...” 下载此文件,把解压后的"com.apple.amp.itmstransporter"目录放到"/用户/你的电脑登录账号名/资源库/Caches/"目录下,覆盖你原有的...

    运动休闲娱乐——运势测算行业SOP.pdf

    运动休闲娱乐——运势测算行业SOP.pdf 运动休闲娱乐——运势测算行业SOP.pdf 运动休闲娱乐——运势测算行业SOP.pdf 运动休闲娱乐——运势测算行业SOP.pdf 运动休闲娱乐——运势测算行业SOP.pdf 运动休闲娱乐——运势...

    嵌入式成品项目-2代身份证识别方案.zip

    嵌入式成品项目——2代身份证识别方案.zip嵌入式成品项目——2代身份证识别方案.zip嵌入式成品项目——2代身份证识别方案.zip嵌入式成品项目——2代身份证识别方案.zip嵌入式成品项目——2代身份证识别方案.zip...

    Android中文翻译组——Android开发者指南(2).chm

    Android中文翻译组是一个非盈利性质的开源组织,至今已超过300人报名参与,关于翻译组的介绍,请看这里。欢迎更多朋友加入,发邮件到over140@gmail.com申请加入。 Android中文翻译组WIKI网站:...

    C语言项目——超级万年历.zip

    C语言项目——超级万年历.zip C语言项目——超级万年历.zip C语言项目——超级万年历.zip C语言项目——超级万年历.zip C语言项目——超级万年历.zip C语言项目——超级万年历.zip C语言项目——超级万年历.zip ...

    嵌入式成品项目-无线接收时钟.zip

    嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟.zip嵌入式成品项目——无线接收时钟...

    C语言项目——通讯录管理系统.zip

    C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言项目——通讯录管理系统.zip C语言...

    微信小程序——新浪读书(截图+源码).zip

    微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip 微信小程序——新浪读书(截图+源码).zip ...

    android.hardware.camera2自定义相机

    在Android平台上,`android.hardware.camera2`是官方提供的高级相机API,它提供了更精细的控制和更高的灵活性,使得开发者能够创建具有专业级别的自定义相机应用。这个API在Android 5.0(API级别21)引入,替代了...

    microsoftrootcertificateauthority2011.cer

    microsoftrootcertificateauthority2011.cer - 教程详情https://blog.csdn.net/Dream_Weave/article/details/125408661

    天正建筑CAD快捷键-较全常用.doc

    2. F2:文本窗口切换——在绘图过程中,F2可以在绘图窗口和文本输入窗口之间切换。 3. F3:对象捕捉——开启或关闭对象捕捉功能,确保精确绘图。 4. F7:栅格——显示或隐藏栅格,用于辅助定位。 5. F8:正交——...

    C语言项目——企业员工管理系统.zip

    C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统.zip C语言项目——企业员工管理系统....

    Android中文翻译组——Android中文API——android.widget合集(中)

    `Android中文翻译组——Android中文API——android.widget合集(中).chm`文件很可能是这个主题的中文参考手册,包含了这些控件的详细解释、使用示例和API文档,对于初学者来说是一份宝贵的资源。建议读者仔细阅读并...

    八路数电电路——病房呼叫系统.ms10 八路数电电路——病房呼叫系统(1优先级最高)_rezip1.zip

    设计内容及要求 1.有六间病房,每个病房装有呼叫按钮;...2.1号优先级别最高,1—6优先级别依次降低; 3.当有病人紧急呼叫时发出5S的呼叫声; 4.护士值班室有一个数码显示管,可显示呼叫的病房号。

    教务管理系统-数据库课程设计mysql+java.zip

    教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库课程设计mysql+java.zip教务管理系统——数据库...

Global site tag (gtag.js) - Google Analytics