Hallo,
ich brauche mal etwas Unterstuetzung bei der Umsetzung einer Funktion, die (speziell fuer SVG) Matrix-Transformationen in die einzelnen Grundkomponenten translate, rotate, scale, skewX, skewY zurueck fuehrt.
Der Weg in Richtung matrix(a,b,c,d,e,f) mit dem Aufbau
|a c e|
|b d f|
|0 0 1|
kann relativ einfach durch nacheinander ausgefuehrte Matrizen-Multiplikation gegangen werden, siehe MatrixCalc.
Nun wurde die (eher akademische) Frage aufgeworfen, wie man das umkehren kann. Mein in zwei Tagen ausgetueftelter Ansatz ausgehend von der Belegung der Einzel-Matrizen ist vielleicht etwas naiv, funktioniert immerhin schon ganz gut, aber noch nicht allgemeingueltig und genau hier stellen sich Fragen wie:
- Ist die angedachte Rueckfuehrung auf Teilkomponenten ueberhaupt eindeutig loesbar?
- Ist mein Algorithmus ein sinnvoller Ansatz bzw. welche Umsetzung waere praktikabler?
Der aktuelle Code laeuft sowohl mit dem ASV 3/6 als auch unter Firefox 1.0+ ("Deer Park Alpha 1").
Aus "matrix(2.101802,0.954189,-1.331028,0.347296,20,30)"
ensteht zurzeit "skewY(0.327000) skewX(56.462975) scale(1.978126,1.015411) rotate(69.677985) translate(20,30)".
BTW: Eine Suche nach "reverse affine matrix transformations" hat zwar viel Input gebracht, aber noch keine wirkliche Loesung.
Danke vorab fuer kreative Hinweise.
MfG, Thomas