SVG: Kreisradius nach Matrixtransformation?

Don't feel confident with your English? This is the place to ask in your native tongue. Spanish, German... Not sure what else we speak here, but give it a go.
Post Reply
Wik
Average Program
Posts: 72
Joined: Tue Aug 10, 2010 1:32 pm

SVG: Kreisradius nach Matrixtransformation?

Post by Wik »

Hei Leute!

Sorry, falls das Thema nicht ganz herpaszt... hat aber Armagetron-Bezug.

Angenommen, ich zeichne einen Kreis in einem SVG-Editor (Inkscape in meinem Fall) und dreh/skalier (oder andersherum) denselben, wie kann ich aus der Transformationsmatrix den resultierenden Kreisradius ermitteln?

Beispiel:
Originalkreis (r=50), skaliert auf 50% (r=25), gedreht um 25 Grad (r=25) ergibt: matrix(0.4531, -0.2113, 0.2113, 0.4531, -33.9164, 689.2676)

Der Zahlenverhau soll jetzt 25 ergeben... irgendwie. Existiert dafür eine Formel, resp. geht das überhaupt?
User avatar
Z-Man
God & Project Admin
Posts: 11585
Joined: Sun Jan 23, 2005 6:01 pm
Location: Cologne
Contact:

Re: SVG: Kreisradius nach Matrixtransformation?

Post by Z-Man »

Für eine allgemeine Matrix geht das nicht; die macht aus einem Kreis meistens eine Ellipse. Wenn man aber weiß, dass es sich nur um eine Verschiebung/Rotation/Skalierung handelt, bleibt ein Kreis ein Kreis und der Skalierungsfaktor für einen Kreisradius ist einfach
sqrt(m_11*m_11 + m_12*m_12), wobei m_11 und m_12 die beiden Matrixelemente der ersten Zeile sind. Oder Spalte. Ist für die Formel egal. In der von dir verwendeten Matrixnotation wohl einfach die beiden ersten Zahlen.
Wik
Average Program
Posts: 72
Joined: Tue Aug 10, 2010 1:32 pm

Re: SVG: Kreisradius nach Matrixtransformation?

Post by Wik »

Wenn man aber weiß, dass es sich nur um [...] handelt
Ich weisz nicht, was drinsteckt. Kann alles sein, auch gleichzeitig: Scherung, Rotation...

SVG benutzt eine Punkttransformation matrix(a b c d e f) der Art

Code: Select all

|a c e|   |x_alt|   |x_neu|
|b d f| * |y_alt| = |y_neu|
|0 0 1|   |  1  |   |  1  |
oder anders:

a * x_alt + c * y_alt + e = x_neu
b * x_alt + d * y_alt + f = y_neu

für quasi alles auszer Verschiebungen. Die Parameter e und f sind für mein Problem unwichtig (SVG transform matrix).

Zur Verfügung hab ich die ursprüngliche Mitte (x,y), den ursprünglichen Radius, die Mittenposition nach der Transformation und die Matrix selbst. Ich brauch aber den transformierten Radius.
Ich hab im Netz nach Matrizeninvertierung gesucht, aber ob dieser Ansatz richtig ist...?

Mir wär schon sehr geholfen, wenn man herausfinden könnte, *ob* eine Scherung/Skalierung in den Zahlen steckt, und wenn ja, mit welchen Werten.
Last edited by Wik on Sat Sep 21, 2013 2:48 pm, edited 1 time in total.
Wik
Average Program
Posts: 72
Joined: Tue Aug 10, 2010 1:32 pm

Re: SVG: Kreisradius nach Matrixtransformation?

Post by Wik »

Problem gelöst. Hab die Seitenmittelpunkte der Bounding Box ermittelt und dann mit Pythagoras... jetzt, scheint's, läuft alles wie gewollt. Danke für den Denkanstosz.
Post Reply