2010-07-08 11 views
6

Wciąż nie pracuje na zwróconych wartości poniżej kodu pMeasure = PathMeasure m = Matrix distCount jest odległością wzdłuż ścieżkiAndroid Matrix, co zwraca getValues ​​()?

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

przepływ [2] & przepływ [5] Pozycja X & y odpowiednio, ale nie mogę wymyślić reszty

jakiejkolwiek pomocy po raz kolejny docenione.

Zrobione z Matrix class documentation

Odpowiedz

12

:

public static final int MPERSP_0
Stała Wartość: 6 (0x00000006)

public static final int MPERSP_1
Stała Wartość: 7 (0x00000007)

publiczny statyczny końcowy int MPERSP_2
Stała wartość: 8 (0x00000008)

public static final int MSCALE_X
Stała Wartość: 0 (0x00000000)

public static final int MSCALE_Y
Stała Wartość: 4 (0x00000004)

public static final int MSKEW_X
Stała Wartość: 1 (0x00000001)

public static final int MSKEW_Y
Stała Wartość: 3 (0x00000003)

static końcowy Int MTRANS_X
Stała wartość 2 (0x00000002)

static końcowy Int MTRANS_Y
Stała wartość 5 (0x00000005)

+0

Dziękuję, ale co oznacza perspektywa w tym zakresie? – Matt

+3

Honesly, nie wiem .. Założę się, że te wartości są zastrzeżone, a powodem ich obecności jest być może uzupełnienie macierzy. Tutaj znajdziesz więcej informacji na ten temat: http://mobiledevelop.blogspot.com/2009/02/android-canvas-translation-discussion.html –

+2

Android używa skia i sprawdziłem kod źródłowy dla klasy matrix Android, w jej Rdzeń C++, po prostu klei Matrix, z SkMatrix. Macierz ma rozmiar 3x3. Z tego powodu MSCALE_X/Y nie jest tak naprawdę skalą. Dopóki nie ma rotacji, jest to skala. Jeśli macierz koduje obrót, musisz wykonać dodatkową matematykę, aby obliczyć skalę. MPERSP służy do obliczania współrzędnej "z", domyślnie z = 1. Jeśli z! = 1 to x = x/z; y = y/z; z = z/z = 1. Ogólnie nie musisz się martwić o to. To jest jak opengl 4x4 dla 3D, z wyjątkiem Androida 3x3 dla 2D –

6

Android matrycy używa skia i jego wiersz głównym czyli indeksy są następujące

0 1 2 
3 4 5 
6 7 8 

I kontrastują OpenGL korzysta indeksy jak tak

0 3 6 
1 4 7 
2 5 8 

"Znaczenia" są identyczne pod względem położenia matrycy.

a b tx 
c d ty 
0 0 1 

a, b, c, d skali kodowania & obrót w tym samym czasie. tx/ty kodować tłumaczenie. Jeśli wykonujesz m.getValues ​​(vals); następnie vals [2] == tx, vals [5] == ty, a reszta jest prosta. Najlepszym sposobem, aby wyodrębnić tłumaczenie jest, aby wektorze

float[] point = {0, 0}; 

Następnie na mapę i zobaczyć, gdzie kończy się i jest to Twoje tłumaczenie (co jest dokładnie (tx, ty).W rzadkich przypadkach jej nie

dostać skali mapy drugi punkt

float[] point2 = {1, 0}; 

Teraz weź różnicę rel = (point - punkt2) i uzyskać długość tego wektora i że twoja waga. Aby wyodrębnić obrót, należy znormalizować rel i łatwo jest uzyskać jego standardowy kąt.