`

matrix使用:平移

 
阅读更多
android绘图中使用的矩阵是3x3的结构。



矩阵元素的功能:



先挑与平移有关的看。观察矩阵元素功能可知,如果绘制的图形平移到[x, y], 则只需要修改矩阵右上角的2个元素就可以了。

编写一个继承了view的TransView来验证,以下是onDraw()方法。


	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
		Paint paint = new Paint();
		paint.setColor(Color.RED);
		
		//在点(50,50)绘制半径为5的红色正圆
		canvas.drawCircle(50, 50, 5, paint);

		//在点(200,200)绘制半径为15的红色正圆
		canvas.drawCircle(200, 200, 15, paint);
		
		
		Matrix matrix = new Matrix();
		
		//与 matrix.setTranslate(200, 200)等价
		{
			float[] values = {	1, 0, 200, 
							  	0, 1, 200, 
							  	0, 0, 1	};
			matrix.setValues(values);
		}
		
		Log.i("TransView", "" + matrix.toString());
		
		
		canvas.save();
		
		//画布在x轴移动200,y轴移动200后绘制半径为10的黑色正圆
		canvas.setMatrix(matrix);
		paint.setColor(Color.BLACK);
		canvas.drawCircle(0, 0, 10, paint);
		
		canvas.restore();
	}

效果图:




从log看也可以验证之前的结论。

但从效果图中看,通过matrix绘制的图形坐标有偏移,比起直接在坐标(200, 200)绘制的正圆,y坐标小了70,这点十分奇怪,苦思不得其解,需要继续跟进。


分享到:
评论

相关推荐

    OpenCvSharp的图像基本处理功能:平移、旋转、镜像、映射

    以上就是使用OpenCvSharp进行图像平移、旋转、镜像翻转和映射的基本步骤。在实际应用中,你可能需要根据具体需求调整参数,例如旋转的角度、平移的距离、翻转的方向等。同时,注意处理图像时可能出现的边界问题,...

    Android Matrix处理ImageView中图片缩放,平移

    Matrix类是Android提供的一种强大的工具,它允许我们对图像进行复杂的几何变换,如旋转、缩放、平移和倾斜。本文将深入探讨如何利用Matrix处理ImageView中的图片缩放和平移操作。 首先,我们需要了解Matrix的基本...

    学习Matrix的对图像的处理可分为四类基本变换: Translate平移变换 Rotate 旋转变换 Scale缩放变换 Skew 错切变换 最好的demo

    在Android开发中,Matrix是一个非常重要的工具类,用于进行2D图像的矩阵操作,包括平移、旋转、缩放和错切等基本变换。这些变换是图像处理和动画设计的基础,能够帮助开发者创造出丰富多彩的视觉效果。下面我们将...

    计算机图形学 图形变换,二维图形变换包括:平移、旋转、缩放;三维图形变换:投影

    例如,平移可以通过构建一个包含平移向量的Affine Transform矩阵,然后调用SetWorldTransform函数来应用这个变换。对于更复杂的变换,如旋转和缩放,可以创建一个包含旋转角度或缩放因子的Matrix对象,再结合上述...

    C++矩阵变换操作平移、旋转、镜像

    例如,如果要将物体沿着X轴平移tx,沿着Y轴平移ty,沿着Z轴平移tz,那么对应的平移矩阵就是: ``` [1 0 0 tx] [0 1 0 ty] [0 0 1 tz] [0 0 0 1] ``` 2. **旋转**:旋转操作更复杂一些,涉及到欧拉角(yaw、...

    旋转平移矩阵求解方法

    在三维空间中,物体的位置和方向通常通过一个4x4的齐次变换矩阵来表示,这个矩阵包含了旋转和平移的信息。对于题目所提及的“三维旋转平移矩阵求解”,我们将详细探讨如何构建和应用这样的矩阵,以及如何解决与之...

    平移_计算机图形学平移_

    2. **模型视图矩阵**(Model View Matrix):这是OpenGL中用于组合多个变换的工具,包括平移。你可以先对模型进行一系列操作(如平移、旋转),然后应用到视图上,使得观察者可以以不同的角度看到模型。 3. **平移...

    Exam 4-2--坐标系变换平移、旋转、放缩_C#_坐标变换_

    C#的`Matrix`类支持矩阵的乘法,这使得可以顺序地应用平移、旋转和放缩。例如,先放缩,再旋转,最后平移,可以通过依次乘以对应的变换矩阵来实现。 5. **使用Direct2D或Direct3D**: 对于更复杂的图形操作,C#...

    图像平移算法

    在VC++环境中,我们可以利用MFC(Microsoft Foundation Classes)库或者直接使用GDI+(Graphics Device Interface Plus)来实现图像的平移功能。下面将详细探讨这一主题。 一、图像平移的概念 图像平移,顾名思义,...

    图像处理 平移变换 源代码

    下面是一个简单的代码示例,演示如何实现图像的平移: ```cpp #include // 定义平移向量 cv::Point2f translationVector(-offsetX, offsetY); // 创建仿射变换矩阵 cv::Mat transformMatrix = (cv::Mat_(2,3) , ...

    数字图像处理图像的平移变换代码

    3. **创建仿射变换矩阵**:使用`cv::getAffineTransform`函数创建包含平移变换的矩阵。 ```cpp cv::Mat translationMatrix = (cv::Mat_(2,3) , 0, dx, 0, 1, dy); ``` 4. **应用变换**:使用`cv::warpAffine`函数对...

    OpenGL程序平移、旋转、缩放变换_OpenGL程序平移、旋转、缩放变换_

    例如,使用一个4x4的变换矩阵,我们可以一次性地完成平移、旋转和缩放。 总结来说,OpenGL的平移、旋转和缩放变换是构建3D图形的关键步骤。通过熟练掌握这些变换,开发者可以创建出丰富的视觉效果和动态场景。理解...

    C语言实现矩阵的乘法、平移、旋转和矩阵求逆

    2. **矩阵平移**:在计算机图形学中,平移通常通过将每个点的坐标与一个平移向量相加来实现。一个2D平移矩阵可以表示为: ``` [1 0 tx] [0 1 ty] [0 0 1] ``` 其中tx和ty是沿x轴和y轴的平移距离。 3. **...

    图像平移代码

    这段代码首先读取图像,然后定义一个平移向量,接着创建一个转换矩阵,最后使用`warpAffine`函数应用平移,并将结果保存为新的图像文件。 总的来说,这个压缩包中的代码提供了一个简洁的图像平移解决方案,它结合了...

    OSG场景单元相关操作

    在osg中,`osg::Matrix::translate()`函数用于执行平移。例如,`trans->setMatrix(osg::Matrix::translate(0,0,20));` 这行代码将物体沿Z轴正方向平移20个单位,相当于屏幕上方。这里的参数`(0,0,20)`分别代表X、Y、...

    数字图像处理代码平移变换,对称

    更高效的方法是使用卷积或滤波器技术,通过预计算的卷积核来实现平移。 二、对称变换 对称变换分为水平对称(镜像反射)和垂直对称。图像的水平对称变换就是将图像沿垂直轴翻转,而垂直对称则是沿水平轴翻转。在二...

    bitmap_action.rar_action _openGL 平移_opengl平移

    3. **应用平移变换**:使用`glTranslatef()`函数将平移向量整合到模型视图矩阵中。函数接收三个参数,即x、y和z的位移值。 4. **绘制对象**:在平移矩阵生效后,可以绘制物体。`glBegin()`和`glEnd()`之间的代码...

    Android canvas 放大 缩小 平移

    Android的Matrix类提供了对2D变换的支持,包括缩放(scale)、平移(translate)和旋转(rotate)。要实现放大和缩小,我们可以创建一个Matrix对象,然后调用其setScale()方法,传入缩放的X轴和Y轴因子。例如,要将...

    将平移旋转缩放手势映射到Matrix4对象的手势检测.zip

    "将平移旋转缩放手势映射到Matrix4对象的手势检测"的主题聚焦于如何处理和利用这些手势来改变三维空间中的对象,比如在3D场景中进行平移(translation)、旋转(rotation)和缩放(scaling)。Matrix4对象通常用于...

    Android图片浏览,放大平移

    平移图片涉及到对Matrix的translate操作。当检测到一个手指在屏幕上移动时,我们可以计算出手指的位移,并通过`Matrix.postTranslate()`方法更新Matrix,以使图片随之移动。 4. **双击手势识别**: 双击手势可以...

Global site tag (gtag.js) - Google Analytics