1152 |
polygon |
Polygon Punkt Test |
Kategorie: | Grafik |
Klasse: | schwer |
Eingabe: | Integer |
Ausgabe: | Integer |
|
Abzugebende Files: polygon.txt, polygon.java |
Kurzbeschreibung:
Ein Punkt und ein Polygon (geschlossener Streckenzug) werden eingelesen; es wird festgestellt, ob der Punkt innerhalb oder außerhalb des Polygons liegt.
Allgemeine Hinweise:
-
Ihr Programm darf nur genau jene Ausgabedaten liefern, die in der Spezifikation
verlangt werden. Die Ausgaben Ihres Programmes werden automatisch mit
Referenzdaten verglichen; etwaige Abweichungen führen zu Punkteabzügen!
-
Testen Sie Ihr Programm vor der Abgabe mit der mitgelieferten Eingabedatei.
Geben Sie Ihre Lösung erst ab, wenn die Ausgaben Ihres Programmes mit der
ebenfalls mitgelieferten Ausgabedatei übereinstimmen! Testen Sie Ihr
Programm auch mit anderen Eingabedaten.
-
Verwenden Sie nur das von uns mitgelieferten Package eprog
für Ihre Ein/Ausgaben. Programme, die Packages oder Klassen ausserhalb der verwendeten Übungsumgebung (Java2, Standard Edition, Version 1.3.1_1) verwenden, können von uns
nicht getestet werden und werden mit 0 Punkten bewertet!
-
Schreiben Sie Ihr Programm möglichst allgemein und kommentieren Sie es gut.
Erstellen Sie weiters eine übersichtliche und verständliche Dokumentation.
Damit erhöhen Sie Ihre Chancen, daß andere Studenten in den nächsten Runden
Ihr Programm wählen und Ihnen damit zu Zusatzpunkten verhelfen!
Aufgabenstellung:
Lesen Sie die Koordinaten des Startpunktes ein. Weiters werden die Koordinaten
der Stützpunkte eines Polygons eingelesen. Jeder Punkt ist mit seinem Vorgänger und seinem Nachfolger durch eine Strecke verbunden; der erste Punkt und
der letzte Punkt sind ebenfalls verbunden.
Ihr Programm soll feststellen, ob der Startpunkt innerhalb oder außerhalb des
Polygons liegt. Dazu berechnen Sie vom Startpunkt ausgehend einen Strahl
(Hälfte einer Gerade), der nach rechts geht (oder in jede beliebige andere
Richtung). Stellen Sie fest, wieviele Strecken des Polygons er schneidet,
bevor er auf Nimmerwiedersehen in der Unendlichkeit verschwindet. Ist die
Anzahl der geschnittenen Strecken ungerade, so liegt der Punkt innerhalb des
Polygons, ansonsten außerhalb.
Wenn der Startpunkt auf einer Strecke (also der Umrandung des Polygons) liegt
oder sogar mit einem Stützpunkt identisch ist, dann ist er als außerhalb des
Polygons liegend zu betrachten.
Beachten Sie, daß Spezialfälle auftreten, wenn der Strahl "zufällig" durch
einen Stützpunkt läuft oder gar eine der Strecken auf dem Strahl liegt.
Eingabedaten:
Lesen Sie zuerst die Koordinaten des Startpunktes ein (zuerst x, dann y).
Danach werden die Stützpunkte des Polygons eingelesen. Es sollen genau 8 Paare
von Koordinaten (x und y) eingelesen werden (Startpunkt und 7 Stützpunkte).
Die Eingabedaten sind unzulässig, wenn sich zwei (oder mehr) Strecken des
Polygons schneiden.
Alle diese Daten sind vom Typ INTEGER.
Ausgabedaten:
Bei korrekten Eingabesätzen soll Ihr Programm 1 ausgeben, falls der Startpunkt
innerhalb des Polygons liegt, ansonsten 0.
Geben Sie danach einen Zeilenvorschub aus.
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.
Sind die Datentypen bei allen Eingaben richtig, die
eingegebenen Daten aber inhaltlich nicht korrekt oder erfüllen nicht die
Bedingungen, so soll Ihr Programm "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.
Beispiele:
Eingabedaten
|
3 3 1 1 3 2 5 1 7 4 5 3 5 5 3 5
3 3 1 1 4 3 5 1 7 4 4 3 5 5 3 5
|
Ausgabedaten
|
1
FALSCHE EINGABE
|
Bemerkung: 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 polygon < polygon.i1 > polygon.out1
Das erzeugte File polygon.out1 können Sie dann mit dem mitgelieferten Outputfile polygon.o1 vergleichen.