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.
Vielen Dank aber was bedeutet Perspektive in dieser Hinsicht? – Matt
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 –
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 –