2010-07-08 4 views
6

Ich habe Probleme mit den zurückgegebenen Werte des folgenden Codes Ausarbeiten pMeasure = PathMeasure, m = Matrix ist DISTCOUNT der Abstand entlang der BahnAndroid Matrix, was bringt getValues ​​() zurück?

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

float [2] & float [5] sind Position x & y jeweils, aber ich kann nicht den Rest herausfinden

jede Hilfe noch einmal geschätzt.

Antwort

12

vom Matrix class documentation wurde:

public static final int MPERSP_0
Konstanter Wert: 6 (0x00000006)

public static final int MPERSP_1
Konstanter Wert: 7 (0x00000007)

public static final int MPERSP_2
Konstanter Wert: 8 (0x00000008)

public static final int MSCALE_X
Konstante Wert: 0 (0x00000000)

public static final int MSCALE_Y
Konstante Wert: 4 (0x00000004)

public static final int MSKEW_X
Konstanter Wert: 1 (0x00000001)

public static final int MSKEW_Y
Konstante Wert: 3 (0x00000003)

public static final int MTRANS_X
Konstante Wert: 2 (0x00000002)

public static final int MTRANS_Y
Konstante Wert: 5 (0x00000005)

+0

Vielen Dank aber was bedeutet Perspektive in dieser Hinsicht? – Matt

+3

Honeysly, ich weiß nicht .. Ich wette, diese Werte sind reserviert, und der Grund, warum sie vorhanden sind, ist vielleicht die Matrix zu vervollständigen. Hier finden Sie weitere Informationen zu diesem Thema: http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html –

+2

Android verwendet skia und ich überprüfte den Quellcode für androids Matrix-Klasse, in seiner C++ - Kern, es klebt Matrix einfach mit SkMatrix. Die Matrix ist 3x3 Reihenmajor. Aus diesem Grund ist MSCALE_X/Y nicht wirklich skalierbar. Solange keine Rotationen beteiligt sind, ist es Skalierung. Wenn die Matrix eine Rotation codiert, müssen Sie zusätzliche Berechnungen durchführen, um die Skalierung zu berechnen. MPERSP wird verwendet, um die "z" -Koordinate zu berechnen, standardmäßig ist z = 1. Wenn z! = 1, dann ist x = x/z; y = y/z; z = z/z = 1. Im Allgemeinen müssen Sie sich nicht darum kümmern z. Es ist wie OpenGL 4x4 für 3D, außer auf Android 3x3 für 2D –

6

Android Matrix verwendet skia und seine Reihe-Dur die Indizes Bedeutung sind wie folgt

0 1 2 
3 4 5 
6 7 8 

ich OpenGL verwendet Indizes wie so

Kontrast
0 3 6 
1 4 7 
2 5 8 

Die "Bedeutungen" sind in Bezug auf die Matrixposition identisch.

a b tx 
c d ty 
0 0 1 

a, b, c, d kodieren Skala & Drehung bei gleichzeitig. tx/ty Übersetzung codieren. Wenn du m.getValues ​​(vals) machst; dann vals [2] == tx, vals [5] == ty, und der Rest ist geradlinig. Der beste Weg, Übersetzung zu extrahieren ist ein Vektor es

float[] point = {0, 0}; 

Dann Karte zu machen und sehen, wo es endet, und das ist die Übersetzung (das ist genau das (tx, ty).In seltenen Fällen ist es nicht

maßstabs Karte einen zweiten Punkt

float[] point2 = {1, 0}; 

Nun nehmen Sie den Unterschied rel = (Punkt - point2) zu erhalten und die Länge dieses Vektors erhalten, und das ist die Waage. Um die Rotation zu extrahieren, normalisieren Sie rel und es ist einfach, den Standardwinkel zu erhalten.

Verwandte Themen