From 705564455852a26d9f9c7348e82d66056bbcaf23 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 04:01:04 +0800 Subject: [PATCH] Update --- CustomView/Advance/[9]Matrix_Basic.md | 29 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index d22e1a1..cc8fed6 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -7,22 +7,37 @@ ## 一、Matrix作用 -如题,本篇的主角是 Matrix。 +如题,本篇的主角是 Matrix,看起来大概是下面这样: + +![](http://latex.codecogs.com/png.latex? +$$ +\\left [ +\\begin{matrix} +MSCALE\\_X & MSKEW\\_X & MTRANS\\_X \\\\ +\\\\ +MSKEW\\_Y & MSCALE\\_Y & MTRANS\\_Y \\\\ +\\\\ +MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 +\\end{1} +\\right ] +$$) 它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix_), -另外,本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 +本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 > ### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 **Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** -我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制。 +我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 -假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点,Matrix在此处的作用就是转换这些数值。 +> +假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 -我们知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 +> +我们也知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 ![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f624vi3eb6j30rs0goab5.jpg) @@ -70,7 +85,7 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** -## 三、Matrix常见误解 +### 常见误解 在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: @@ -83,7 +98,7 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** -## 四、Matrix原理详解 +## 三、Matrix原理详解 Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。