3016 Gdv Punkte spiegeln und drehen
Kategorie:Grafik
Klasse:leicht
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Gdv.txt, Gdv.java, *.java , 2784.txt, 2820.txt

Kurzbeschreibung:

Die Koordinaten eines Punktes in der Ebene und Operationen (Spiegelungen und/oder Drehungen) werden eingelesen, die Koordinaten des so entstehenden Punktes werden ermittelt und ausgegeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie die x- und y-Koordinate eines Punktes ein. Danach werden Operationen eingelesen, die wie folgt aussehen können:

Man kann in der graphischen Datenverarbeitung Punkte mit Hilfe von Transformationsmatrizen spiegeln und drehen.
Seien x und y die Koordinaten des Punktes.
Man erhält die Koordinaten des gesuchten Punktes, indem man diesen (als Vektor angeschrieben) mit der Transformationsmatrix multipliziert.

Diese Transformationsmatrizen sind für 3-dimensionale Koordinatensysteme ausgelegt; die dritte Komponente des Vektors ist für Sie irrelevant.

Drehen des Vektors um den Winkel :

Spiegelung an der x-Achse: (Genauer: Spiegelung an der xz-Ebene)

Spiegelung an der y-Achse: (Genauer: Spiegelung an der yz-Ebene)

Da die Matrizenmultiplikation assoziativ (aber nicht kommutativ!) ist, muß man nicht jede Transformation auf den Punkt ausführen, sondern kann die Matrizen multiplizieren und den Punktvektor mit dem Produkt multiplizieren.

Eingabedaten:

Lesen Sie x und y als INTEGER-Zahlen ein. Diese dürfen nicht kleiner als -50 und nicht größer als 50 sein.

Danach lesen Sie die Operationen als Strings ein, wobei nur 'spx', 'SPX', 'spy', 'SPY', 'd', 'D' und '0' zulässig sind.

Wenn die Operation 'D' ist, so wird der Drehungswinkel als INTEGER-Zahl eingelesen.

Die Operation '0' beendet die Eingabe vorzeitig; ansonsten ist der Datensatz nach 4 Operationen beendet (keine weitere Operation einlesen!).

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm die Koordinaten des ermittelten Punktes in der Reihenfolge x,y als Float-Zahlen mit 3 Nachkommastellen und durch ein Leerzeichen getrennt ausgeben, anschließend einen Zeilenvorschub.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen einzulesen (bis zur Operation 0 oder 4 Operationen). Generell wird bei fehlerhaften Eingabedatensätzen nur eine einzige Fehlermeldung erzeugt, weitere Berechnungen werden nicht mehr durchgeführt.

Enthält der Eingabedatensatz einen ungültigen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Waren die Datentypen bei allen Eingaben richtig, die eingegebenen Daten dann aber inhaltlich nicht korrekt, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
1 2 SPX 0

3 4 SPY 0

Ausgabedaten
1.000 -2.000

-3.000 4.000


Testen:

Diese Beispiele dienen nur zur Verdeutlichung der Spezifikation und müssen nicht korrekt formatiert sein. Die korrekte Formatierung entnehmen Sie bitte dem mitgelieferten Outputfile. Zum Testen Ihrer Lösung können Sie aus den mitgelieferten Eingabedaten wie folgt eine Ausgabedatei erzeugen:

java Gdv < Gdv.i1 > Gdv.out1

Das erzeugte File Gdv.out1 können Sie dann mit dem mitgelieferten Outputfile Gdv.o1 vergleichen.