Android Matrix,getValues()返回什么?

Mat*_*att 7 android path matrix

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

pMeasure.getMatrix(distCount, m, 0x01 | 0x02); 
m.getValues(float[] values)
Run Code Online (Sandbox Code Playgroud)

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

任何帮助再一次赞赏.

And*_*ovs 13

取自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 (4认同)
  • 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 (3认同)

ove*_*tic 7

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

0  1  2  
3  4  5
6  7  8
Run Code Online (Sandbox Code Playgroud)

我对比OpenGL使用这样的索引

0  3  6
1  4  7
2  5  8
Run Code Online (Sandbox Code Playgroud)

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

a  b  tx
c  d  ty
0  0   1
Run Code Online (Sandbox Code Playgroud)

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

float[] point = {0, 0};
Run Code Online (Sandbox Code Playgroud)

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

获得比例尺第二点

float[] point2 = {1, 0};
Run Code Online (Sandbox Code Playgroud)

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