09-transformationen transformationen. 09-transformationen2 als transformationen werden affine...

22
09-Transformationen Transformationen

Upload: wiebe-land

Post on 05-Apr-2015

111 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen

Transformationen

Page 2: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 2

Als Transformationen werden affine Transformationen im Rn betrachtet.Alle derartigen Transformationen lassen sich darstellen als:y = A x + b wobei A die quadratische Transformationsmatrix und b der Verschiebungsvektor ist.

Wenn b=0 ist, so handelt es sich um eine lineare Transformation.Die Anwendung zweier affiner Transformationen ergibt:y= A2 (A1 x + b1) + b2 = A2A1 x + A2b1 + b2 = A x + b mitA = A2A1 und b = A2b1 + b2

Für lineare Transformationen entfallen die Verschiebungsanteile.Die linearen Anteile ergeben sich immer durch Multiplikation der Transformationmatrizen.

Die mehrfache Anwendung von linearen Transformationen wird durch Matrixmultiplikationen relisiert.Die mehrfache Anwendung von Verschiebungen führt auf kompliziertere Matrix-Vektor-Operationen.

Page 3: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 3

Homogene KoordinatenBeispiel R1

1

w

R10 1x

0.5

R10 10.5

Page 4: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 4

Jeder Punkt x im Rn wir identifiziert mit der Geraden, die durch die Punkte (tx,t) im Rn+1 gebildet wird. Jeder Punkt (x,w) mit x∈Rn und w≠0 repräsentiert genau einen Punkt aus Rn nämlich x/w.

Affine Transformationen stellen sich in affinen Koordinaten folgendermaßen dar:

11011

xbAbAxy

Alle affinen Transformationen im Rn lassen sich durch Übergang zu den homogenen Koordinaten als lineare Transformationen darstellen. Mehrfachanwendungen von affinen Transformationen lassen sich als Matrixmultiplikationen darstellen.

Kosten: Es muss mit größeren Matrizen gerechnet werden.Die letzte Zeile der Matrix ist trivial und wird deshalb nicht gespeichert.

Page 5: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 5

Elementare TransformationenAlle affinen Transformationen lassen sich durch einige wenige elementare Transformationen durch Kombination erzeugen.

Jede affine Transformation ist die Kombination aus einer linearen Transformation und einer Verschiebung:

110

0

101101

xAbIxbAy

10

bIAT

Page 6: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 6

DrehungIm R2 gibt es genau eine Drehung um den Koordinatenursprung mit dem Winkel α:

100

0cossin

0sincos

RA

Im R3 gibt es drei Drehungen um die Achsen mit dem Winkel α:

1000

0cossin0

0sincos0

0001

R

xA

1000

0cos0sin

0010

0sin0cos

RyA

1000

0100

00cossin

00sincos

RzA

Drehungen erhalten sowohl die Winkel, die Längen als auch die Abstände zum Koordinatenursprung.

Page 7: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 7

SkalierungenSkalierungen sind Multiplikationen der einzelnen Koordinaten mit konstanten Faktoren.

Es gibt im Rn genau n Skalierungen.

100

010

00xSx

s

A

100

00

001

ySy sA

1000

0100

0010

000x

Sx

s

A

1000

0100

000

0001

ySy

sA

1000

000

0010

0001

z

Sz sA

Page 8: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 8

ScherungenIm zweidimensionalen Fall ergeben Rotation und Skalierungen genau drei Transformationen. Die lineare Transformationsmatrix enthält aber vier Parameter. Man benötigt also noch eine elementare Transformation, um alle Transformationen beschreiben zu können. Dieses kann z.B. eine Scherung sein.

Im dreidimensionalen Fall ergeben drei Rotationen und drei Skalierungen sechs Transformationen. Es fehlen also noch drei Scherungen um alle Parameter festzulegen.

Scherungen verändern die Längen und Winkel. Parallelität bleibt jedoch erhalten.

100

010

01 xyXxy

s

A

100

01

001

yxXyx sA

Page 9: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 9

Die Hintereinanderausführung von Transformationen ist nicht kommutativ!Die Reihenfolge der Transformationen ist wichtig!Beispiel Rotation um einen gegebenen Punkt (x0,y0) um einen Winkel α.

1

100

10

01

100

0cossin

0sincos

100

10

01

1 0

0

0

0 xy

x

y

xy

1

100

cossincossin

sincossincos

1 000

000 xyxy

yxxy

Page 10: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

0

Die Klasse AffineTransformDie Klasse AffineTransform dient der Beschreibung affiner Transformationen in java.

Die Klasse ist in AWT enthalten und wird hauptsächlich in Graphics2D verwendet.

java.awt.geom.AffineTransformDie Klasse ermöglicht:

•Die Erzeugung von affinen Transformationen

•Die Verkettung von affinen Transformationen

•Die Invertierung von affinen Transformationen

•Die Anwendung von affinen Transformationen auf Shape-Objekte

Page 11: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

1

KonstruktorenAffineTransform()erzeugt die Identische Abbildung

AffineTransform(AffineTransform Tx)erzeugt eine Kopie der affinen Transformation Tx

AffineTransform(double[] flatmatrix)erzeugt aus dem Vektor flatmatrix eine affine Transformation mit der zugehörigen Matrix.

•flatmatrix.length<6 lineare Transformation mit der Matrix

•flatmatrix.length>=6 affine Transformation mit der Matrix

AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)erzeugt eine affine Transformation mit der Matrix

Die letzten beiden gibt es auch mit float-Variablen

100

031

020

flatmatrixflatmatrix

flatmatrixflatmatrix

100

531

420

flatmatrixflatmatrixflatmatrix

flatmatrixflatmatrixflatmatrix

100

121110

020100

mmm

mmm

100

010

001

Page 12: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

2

Fabrikmethodenpublic static AffineTransform getRotateInstance (double theta)erzeugt eine Rotations-Transformation

public static AffineTransform getRotateInstance (double theta, double x, double y) erzeugt eine Rotations-Transformation um den Punkt (x,y)

public static AffineTransform getTranslateInstance (double tx, double ty)erzeugt eine Translations-Transformation mit der Verschiebung (tx,ty)

public static AffineTransform getScaleInstance (double sx, double sy)erzeugt eine Skalierungs-Transformation mit den Faktoren (sx,sy)

100

0cossin

0sincos

thetatheta

thetatheta

100

cossincossin

sincossincos

thetaythetaxythetatheta

thetaythetaxxthetatheta

100

10

01

ty

tx

100

00

00

sy

sx

Page 13: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

3

public static AffineTransform getShearInstance (double shx, double shy) erzeugt eine Scherungs-Transformation mit den Faktoren (shx,shy)

100

01

01

shy

shx

Page 14: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

4

Abfragemethodenpublic int getType()bestimmt den Typ der Transformation:TYPE_IDENTITY : Identische TransformationTYPE_GENERAL_TRANSFORM : allgemeine TransformationTYPE_TRANSLATION : enthält Translationsanteil (m02≠0 oder m12≠0)TYPE_UNIFORM_SCALE : gleichmäßig Skalierung (m00==m11≠1)TYPE_GENERAL_SCALE : ungleichmäßige Skalierung (m00≠1, m11≠1, m00≠m11)TYPE_QUADRANT_ROTATION : Rotation um Vielfache von 90°TYPE_GENERAL_ROTATION : allgemeine Rotationmehrfache Typen werden durch oder - Operation gebildet

public double getDeterminant()berechnet die Determinante der Transformationsmatrix= m00*m11-m01*m10

Page 15: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

5

public void getMatrix(double[] flatmatrix)bestimmt die Transformationsmatrix:flatmatrix.length<6 flatmatrix={m00, m10, m01, m11}flatmatrix.length>=6 flatmatrix={m00, m10, m01, m11, m02, m12}

public double getScaleX()liefert m00

public double getScaleY()liefert m11

public double getShareX()liefert m01

public double getShareY()liefert m10

public double getTranslateX()liefert m02

public double getTranslateY()liefert m12

Page 16: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

6

Verkettung von Transformationenpublic void concatenate(AffineTransform Tx)verkettet die aktuelle Transformation mit Tx[this] = [this] * [Tx]

public void preConcatenate(AffineTransform Tx)verkettet die aktuelle Transformation mit Tx[this] = [Tx] * [this]

public void translate(double tx, double ty)entspricht concatenate(AffineTransform.getTranslateInstance(tx,ty))

public void rotate(double theta)entspricht concatenate(AffineTransform.getRotateInstance(theta))

public void rotate(double theta, double x, double y)entspricht concatenate(AffineTransform.getRotateInstance (theta, x, y))

Page 17: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

7

public void scale(double sx, double sy)entspricht concatenate(AffineTransform.getScaleInstance (sx, sy))

public void share(double shx, double shy)entspricht concatenate(AffineTransform.getShareInstance (shx, shy))

Page 18: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

8

Überschreiben der Transformationpublic void setToIdentity()ersetzt die Transformation durch die Identität

public void setToTranslation(double tx, double ty)ersetzt die Transformation durch die Translation AffineTransform.getTranslateInstance(tx,ty)

public void setToRotation(double theta)ersetzt die Transformation durch die Rotation AffineTransform.getRotateInstance(theta)

public void setToRotation(double theta, double x, double y)ersetzt die Transformation durch die Rotation AffineTransform.getRotateInstance(theta, x, y)

public void setToScale(double sx, double sy)ersetzt die Transformation durch die Rotation AffineTransform.getScaleInstance(sx, sy)

public void setToShear(double shx, double shy) ersetzt die Transformation durch die Rotation AffineTransform.getScaleInstance(sx, sy)

Page 19: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 1

9

public AffineTransform createInverse() throws NoninvertibleTransformExceptionberechnet die inverse Transformation

Page 20: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 2

0

Transformation von Objektenpublic Point2D transform(Point2D ptSrc, Point2D ptDst)Transformiert den Punkt ptSrc mit der aktuellen Transformation. Das Ergebnis wird auf das Objekt ptDst gespeichert und als Wert der Methode zurückgegeben. Ist ptDst==null wird ein neues Objekt erzeugt.

public void transform(Point2D[] ptSrc, int srcOff, Point2D[] ptDst, int dstOff, int numPts)Transformiert einen Vektor ptSrc von Punkten und speichert die Resultate im Vektor ptDst.

public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)Die zu transformierenden Punkte werden in dem Vektor srcPtr = {x0, y0, x1, y0, …} gespeichert. Analog die Resultate in dstPts.

Analoge Methoden für double[]double[], float[]double[] und double[]float[].

Page 21: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 2

1

public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformExceptionberechnet den invers transformierten Punkt

public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformExceptionberechnet die invers transformierten Punkte

public Point2D deltaTransform(Point2D ptSrc, Point2D ptDst)berechnet die Transformation des Punktes ptSrc, wobei die Translationskomponente nicht berücksichtigt wird.

public void deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)berechnet die Transformation eines Vektors von Punkten ohne Berücksichtigung der Translationskomponente

Page 22: 09-Transformationen Transformationen. 09-Transformationen2 Als Transformationen werden affine Transformationen im R n betrachtet. Alle derartigen Transformationen

09-Transformationen 2

2

public Shape createTransformedShape(Shape pSrc)Berechnet ein Shape-Objekt als Transformation des Shape-Objektes pSrc. Shape-Objekte sind allgemeine 2D-Objekte in Graphics2D.