在android的自定义View中,使用Matrix来转换坐标非常方便,其中有一个方法叫mapPoints,它的计算方式是怎么样的呢?

首先来看看Matrix矩阵长得什么样?它是一个3x3的矩阵。
在这里插入图片描述

在编程里,它对应一个长度为9的float[]数组,通过以下变量准确取到数组中相应的值。
在这里插入图片描述

现在再来看看,每一位的含意:

  • MSCALE_X 与 MSCALE_Y:x坐标和y坐标的缩放
  • MSKEW_X 与 MSKEW_Y:x坐标和y坐标的斜切(就是偏斜)
  • MTRANS_X 与 MTRANS_Y:x坐标和y坐标的平移
  • MPERSP_0、MPERSP_1和MPERSP_2:控制透视

好了,我们现在来看一下,mapPoints的计算过程:

// 初始化 matrix矩阵 val values = floatArrayOf ( 2f , 3f , 10f , 4f , 5f , 30f , 0f , 0f , 1f val matrix = Matrix ( ) matrix . setValues ( values ) // 待转换的点(1,2) val pointsSrc = floatArrayOf ( 1f , 2f ) // 存放转换后的结果 val pointsDst = FloatArray ( 2 ) // 调用mapPoints方法转换数据 matrix . mapPoints ( pointsDst , pointsSrc ) // pointsDst [18.0, 44.0] // 以下的方法也可以完成mapPoints的转换 val points2 = FloatArray ( 2 ) // 转换pointsSrc[0] points2 [ 0 ] = values [ Matrix . MSCALE_X ] * pointsSrc [ 0 ] + values [ Matrix . MSKEW_X ] * pointsSrc [ 1 ] + values [ Matrix . MTRANS_X ] // 转换pointsSrc[1] points2 [ 1 ] = values [ Matrix . MSCALE_Y ] * pointsSrc [ 1 ] + values [ Matrix . MSKEW_Y ] * pointsSrc [ 0 ] + values [ Matrix . MTRANS_Y ] // points2 [18.0, 44.0]

那么mapPoints的计算方式就如上所示了。

Canvas类中drawBit map (Bit map bit map , Matrix matrix , Paint paint) 方法 中有个参数类型是 Matrix ,从字面上理解是矩阵的意思,而实际上它也确实是个3x3的矩阵。 Matrix Android 中的主要作用是图像变换,如平移、旋转、缩放、扭曲等。 关于图像如何通过矩阵进行变化可参考这篇文章图像处理—关于像素坐标矩阵变换(平移,旋转,缩放,错切)Ma ORB SLAM2学习笔记之mono_kitti(六)Local Map ping 线程注意:SetAcceptKeyFramesProcessNewKeyFrame Map PointCullingCreateNew Map Points Local Map ping 线程 这个线程接收来自Tracking线程传进来的关键帧,进行一些处理,主要有:将关键帧插入地图,剔除不合格的地图点 map points ,生成新的... Android View 通过平移、旋转、缩放后,顶点映射之前写的这个文章,里面用到的是通过 矩形的4个点来映射出新的4个点。个人以为这就会得到正确的结果。最近呢,就想着,验证一下这个是不是正确的验证想法:“基于 变换后的 ltrb,加一个自定义 view layout;有最外层 view那么大;当 view 变换后,在 layout 上以 ltrb为圆心, 画出一个小圆”最终发现,旋转 用会有问题... 上篇文章介绍了 Matrix 基本原理 方法 ,这篇文章介绍下 Matrix 的其他比较常用的 方法 。 1、 map Points 计算 一组点基于当前 Matrix 变换后的位置。 其有三个重载 方法 : void map Points (float[] pts) void map Points (float[] dst, float[] src) void map Points (float[] ds... 1 Matrix Android 中的运用 ImageView 缩放模式 setImage Matrix (m Matrix ) 方法 ,可以自定义一个 Matrix 。 对 Bit map 做相应的处理,如缩放,位移。 Matrix 可以对 Rect 和 点的集合做变换处理 public void map Points (float[] pts) { map Points (pts, 0,... 以下转自:    http://www.gcssloop.com/customview/ Matrix _Method    http://www.gcssloop.com/customview/ Matrix _Basic这应该是目前最详细的一篇讲解 Matrix 的中文文章了,在上一篇文章 Matrix 原理中,我们对 Matrix 做了一个简单的了解,偏向理论,在本文中则会详细的讲解 Matrix 的具体用法,以及... 这是一个非常简单的例子:我们来一个矩阵: Matrix matrix = new Matrix ();设置该矩阵以将所有内容缩放两倍: matrix .setScale(2.0F,2.0F);在左上角创建一个10×10的矩形,其原点为:RectF rect = new RectF(0F,0F,10F,10F);所以当我们打电话时 matrix . map Rect(rect);我们创建的输入矩形被输出矩形替换,输... //我们在从金字塔的图像中获取特征点时为每一个特征点 计算 了描述子 //现在看看如何 计算 一个空间的地图点的描述子 void Map Point::ComputeDistinctiveDescriptors() // Retrieve all observed descriptors vector<cv::Mat> vDescriptors; //获取到某一个地... andriod一般对图片进行缩放,旋转,移动时会利用到 Matrix 来做,但如果想知道经过矩阵运算后的图片上某个坐标对应没有 matrix 运算前的坐标是不是觉得很棘手。       首先先看一下 matrix 的几个 方法 public void map Points (float[] dst, int dstIndex, float[] src, int srcIndex, int pointCount) 1、 Matrix : map Point() map Rect(src,dst)...根据矩阵将src内容转化并存储到dst中; 矩阵操作,preTranslate(dx,dy) = Matrix *t(dx,dy); postTranslate(dx,dy) = t(dx,dy)*Matrux 2、Movie:根据api来看,应该代笔的就是电影,有duration 关于流和文件的操作 一、概述canvas绘制背景、轮廓或者模板形状(比如图片),也可做平移、缩放等,但是注意canvas的操作是对这个绘制空间都会起作用。paint具体去描绘要绘制在canvas上面的形状,可设置着色器shader绘制高级图形。二、shadershader包括:Bit map Shader, ComposeShader, LinearGradient, RadialGradient, SweepGradi...