Matrix Android utiliza skia y su fila-mayor es decir, los índices son los siguientes
0 1 2
3 4 5
6 7 8
contrasto OpenGL utiliza índices como tan
0 3 6
1 4 7
2 5 8
Los "significados" son idénticos en cuanto a la posición de la matriz.
a b tx
c d ty
0 0 1
a, b, c, d escala codificar & rotación al mismo tiempo. tx/ty codificar traducción. Si haces m.getValues (vals); entonces vals [2] == tx, vals [5] == ty, y el resto es sencillo. La mejor manera de extraer traducción es hacer un vector
float[] point = {0, 0};
Entonces Localizar en un mapa y ver dónde termina y que es su traducción (que es exactamente (tx, ty).En circunstancias poco comunes que no es
para obtener un mapa a escala de un segundo punto
float[] point2 = {1, 0};
Ahora toma la diferencia rel = (punto - punto2) y obtener la longitud de ese vector y que es su escala. Para extraer la rotación, normalice Rel y es sencillo obtener su ángulo estándar.
Gracias, pero ¿qué significa la perspectiva en este sentido? – Matt
Honesly, no sé. Apuesto a que estos valores son reservados, y la razón por la que están presentes tal vez es completar la matriz. Aquí encontrará más información sobre este tema: http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html –
Android usa skia y revisé el código fuente de la clase matrix de androides, en su C++ core, simplemente pega a Matrix, con SkMatrix. La matriz es 3x3 fila principal. Debido a esto MSCALE_X/Y no es realmente escala. Siempre que no haya rotaciones, es escala. Si la matriz codifica una rotación, necesita hacer cálculos adicionales para calcular la escala. MPERSP se usa para calcular la coordenada "z", por defecto z = 1. Si z! = 1 entonces x = x/z; y = y/z; z = z/z = 1. En general, no necesita preocuparse por eso z. Es como OpenGL 4x4 para 3D, excepto en Android es 3x3 para 2D –