当前位置:  开发笔记 > 前端 > 正文

Android Matrix,getValues()返回什么?

如何解决《AndroidMatrix,getValues()返回什么?》经验,为你挑选了2个好方法。

我无法计算下面代码的返回值pMeasure = PathMeasure,m = Matrix,distCount是沿路径的距离

pMeasure.getMatrix(distCount, m, 0x01 | 0x02); 
m.getValues(float[] values)

float [2]&float [5]分别是位置x和y,但我无法弄清楚其余部分

任何帮助再一次赞赏.



1> Andrejs Cain..:

取自Matrix类文档:

public static final int MPERSP_0
常量值:6(0x00000006)

public static final int MPERSP_1
常量值:7(0x00000007)

public static final int MPERSP_2
常量值:8(0x00000008)

public static final int MSCALE_X
常量值:0(0x00000000)

public static final int MSCALE_Y
常量值:4(0x00000004)

public static final int MSKEW_X
常量值:1(0x00000001)

public static final int MSKEW_Y
常量值:3(0x00000003)

public static final int MTRANS_X
常量值:2(0x00000002)

public static final int MTRANS_Y
常量值:5(0x00000005)


Honesly,我不知道..我敢打赌这些值是保留的,它们存在的原因可能就是完成矩阵.在这里您可以找到关于此主题的更多信息:http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html
Android使用skia,我检查了机器人矩阵类的源代码,在它的C++核心中,它简单地将Matrix与SkMatrix粘合在一起.矩阵是3x3行主要.因此,MSCALE_X/Y实际上并不是规模.只要不涉及旋转,它就是规模.如果矩阵编码旋转,则需要进行额外的数学运算以计算比例.MPERSP用于计算"z"坐标,默认情况下z = 1.如果z!= 1则x = x/z; Y = Y/Z Z = Z/Z = 1.一般来说,你不需要担心它.它就像用于3D的opengl 4x4一样,除了在Android上它的3x3用于2D

2> over_optimis..:

Android Matrix使用skia及其行主要意义索引如下

0  1  2  
3  4  5
6  7  8

我对比OpenGL使用这样的索引

0  3  6
1  4  7
2  5  8

关于矩阵位置,"含义"是相同的.

a  b  tx
c  d  ty
0  0   1

a,b,c,d同时编码刻度和旋转.tx/ty编码翻译.如果你做m.getValues(vals); 那么vals [2] == tx,vals [5] == ty,剩下的就是直截了当.提取翻译的最佳方法是制作一个向量

float[] point = {0, 0};

然后映射它,看看它到底在哪里,这就是你的翻译(这正是(tx,ty).在极少数情况下它不是

获得比例尺第二点

float[] point2 = {1, 0};

现在取差值rel =(point-point2)并获得该向量的长度,这就是你的比例.要提取旋转,请将rel标准化,并且很容易获得标准角度.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有