3048 Clippen Clippen von Strecken
Kategorie:Grafik
Klasse:mittel
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Clippen.txt, Clippen.java, *.java , 421.txt, 473.txt

Kurzbeschreibung:

Das durch Schneiden eines Dreiecks mit einem rechteckigen Fenster entstehende Vieleck soll ermittelt werden.

Allgemeine Hinweise:

Aufgabenstellung:

In grafischen Programmen tritt oft die Anforderung auf, den sichtbaren Teil eines geometrischen Objektes in einem Fenster darzustellen. Unter Clipping versteht man das "Abschneiden" eines zu zeichnenden Objektes am Rand eines Fensters, wenn das Objekt nicht gänzlich in das Fenster paßt. In diesem Programm sollen Sie die Lage eines Dreiecks bezüglich eines Ausgabefensters feststellen und gegebenenfalls die Dreieckskanten clippen.

Lesen Sie die Größe eine (rechteckigen) Fensters und die Eckpunkte eines Dreiecks ein. Sie sollen feststellen, ob das Dreieck gänzlich innerhalb oder außerhalb des Fensters liegt, oder ob sich das Dreieck zum Teil innerhalb und zum Teil außerhalb des Fensters befindet. Wenn das Dreieck außerhalb des Fensters liegt, dann ist zu unterscheiden, ob das Dreieck das Fenster umschließt oder nicht.

Im letzten Fall sollen Sie die Dreiecksseiten mit den Fensterkanten schneiden, um so ein Vieleck zu erhalten, das in das Fenster paßt. Als Ausgabe sollen dann die Eckpunkte dieses Vielecks angegeben werden.

Das Fenster ist durch x-Achse, y-Achse sowie zwei zu den Achsen parallele Geraden definiert.

Beachten Sie, daß in jedem Fall (Innerhalb, Außerhalb, Clippen, Umschließen) der Grenzfall auftreten kann, daß Eckpunkte des Dreiecks auf dem Fensterrahmen liegen oder umgekehrt.

Eingabedaten:

Lesen Sie zuerst die Höhe des Fensters (c) und die Breite des Fensters (d) als Zahlen vom Typ Integer ein; negative Werte sind nicht möglich. Die Eckpunkte des Fensters sind demnach {(0,0),(0,c),(d,c),(d,0)}. Die Werte von c und d dürfen 30 nicht übersteigen.

Danach werden die Eckpunkte des Dreiecks in der Reihenfolge x1, y1, x2, y2, x3, y3 als Float-Zahlen eingelesen. Die Koordinaten müssen im Bereich [-30,30] (inklusive) liegen. Wenn die drei Punkte kein Dreieck bilden, dann ist die Eingabe unzulässig.

Ausgabedaten:

Bei korrekten Eingabesätzen soll Ihr Programm folgende Ausgabe liefern:

Wenn das Dreieck gänzlich außerhalb des Fensters liegt, dieses aber nicht umschließt, dann geben Sie "A" aus.

Wenn das Dreieck "geclippt" wird, dann geben Sie die Eckpunkte des entstehenden Vielecks in folgender Reihenfolge aus: jeweils x und y, sortiert nach x aufsteigend, innerhalb gleicher x nach y aufsteigend.

Wenn das Dreieck das Fenster umschließt, dann geben Sie die Fenstereckpunkte in der gleichen Reihenfolge wie beim Clipping aus.

Wenn das Dreieck gänzlich innerhalb des Fensters liegt, dann geben Sie die Eckpunkte des Dreiecks in der Reihenfolge wie beim Clipping aus.

Geben Sie bei den letztgenannten drei Fällen die Koordinaten als Float-Zahlen mit 3 Nachkommastellen aus, die Sie durch ein Leerzeichen trennen.

In allen Fällen soll zum Schluß ein Zeilenvorschub ausgegeben werden.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer vollständig einzulesen. 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
2 3 0 0 1.5 2 3 0

2 3 4 4 3 2 6 1.5

Ausgabedaten
0.000 0.000 1.500 2.000 3.000 0.000

A


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 Clippen < Clippen.i1 > Clippen.out1

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