Extrahieren Sie die Rotation, skalieren Sie die Werte aus der 2D-Transformationsmatrix
wie kann ich extrahieren, rotation, Skalierung und translation Werte von 2d-Transformationsmatrix? ich meine ein 2d-transformation
matrix = [1, 0, 0, 1, 0, 0]
matrix.rotate(45 /180 * PI)
matrix.scale(3, 4)
matrix.translate(50, 100)
matrix.rotate(30 /180 * PI)
matrix.scale(-2, 4)
nun meine matrix-Werte [a, b, c, d, tx, ty]
lets vergessen Sie die oben genannten Prozesse und stellen wir uns vor wir haben nur die Werte a, b, c, d, tx, ty
wie finde ich insgesamt Drehung und Skalierung Werte über a, b, c, d, tx, ty
sorry für mein Englisch
Dank für Ihre Reservierung
BEARBEITEN
Ich denke, es sollte eine Antwort irgendwo...
ich habe gerade versucht in Flash Builder (AS3), wie dies
var m:Matrix = new Matrix;
m.rotate(.25 * Math.PI);
m.scale(4, 5);
m.translate(100, 50);
m.rotate(.33 * Math.PI);
m.scale(-3, 2.5);
var shape:Shape = new Shape;
shape.transform.matrix = m;
trace(shape.x, shape.y, shape.scaleX, shape.scaleY, shape.rotation);
und die Ausgabe ist:
x = -23.6
y = 278.8
scaleX = 11.627334873920528
scaleY = -13.54222263865791
rotation = 65.56274134518259 (in degrees)
InformationsquelleAutor der Frage Tolgahan Albayrak | 2010-12-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht alle Werte von a,b,c,d,tx,ty, erzielen Sie eine gültige rotation. Ich nehme an, die oben erwähnten Werte sind Teil einer 3x3 homogene rotationsmatrix in 2D
verändert sich die Koordinaten
[x, y, 1]
in:[dx, dy]=[tx, ty]
sx = sqrt(a² + c²)
undsy = sqrt(b² + d²)
t = atan(c/d)
odert = atan(-b/a)
als auch sollten Sie die gleichen sein werden.Sonst werden Sie nicht haben, eine gültige rotation matrix.
Den oben genannten transformation erweitert sich zu:
wenn der Auftrag rotation, gefolgt von der Skala und dann die übersetzung.
InformationsquelleAutor der Antwort ja72
Ich lief in dieses problem, heute und fand die einfachste Lösung zur Transformation eines Punktes mit der matrix. Auf diese Weise können Sie extrahieren Sie die übersetzung zuerst, dann die Drehung und Skalierung.
Funktioniert dies nur, wenn x und y sind immer skaliert die gleiche (einheitliche Skalierung).
Angesichts Ihrer matrix m, die durchgemacht hat eine Reihe von Transformationen,
Dort gehen Sie!
InformationsquelleAutor der Antwort bugshake
Wenn bei der Skalierung würde Sie skaliert werden, um denselben Betrag in x-und in y, dann ist die Determinante der matrix, d.h. ad-bc, die Ihnen sagt, der Bereich Multiplikator würde sagen, die lineare änderung der Skala zu - es wäre die Quadratwurzel der Determinante. atan( b/a ) oder besser atan2( b,a ) würden Sie sagen, die Winkel, die Sie gedreht haben, durch.
Jedoch, als Ihre Skalierung ist nicht uniform, es ist in der Regel nicht gehen, um in einer Weise zu verdichten, um Ihre Serie von Rotationen und Skalierung auf einer einzelnen Drehung gefolgt von einer einzigen nicht-uniforme Skalierung in x und y.
InformationsquelleAutor der Antwort James Crook