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:

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.