4106 Bounding Bounding Box Berechnen
Kategorie:Graphik
Klasse:mittel
Eingabe:Siehe Spezifikation
Ausgabe:Siehe Spezifikation
Abzugebende Files: Bounding.txt, Main.java, Bounding/*.java , 1272.txt, 1412.txt

Kurzbeschreibung:

Schreiben Sie eine Klasse BoundingBox, die einfache geometrische Objekte einliest, diese auf Zusammenhang überprüft und die Gesamtfläche der zusammenhängenden Objekte bzw. die Fläche eines umschreibendes Rechteckes ausgibt und untereinander vergleicht.

Allgemeine Hinweise:

Aufgabenstellung:

Ein String, der nur Eckpunkte oder Längenangaben von Rechtecken enthält soll eingelesen werden.

Rechtecke können durch die Angabe von 2 Koordinatenpunkte (x1,y1) und (x2,y2) in der Form (x1,y1;x2,y2) eingeben werden, wobei die 2 Punkte den linken unteren bzw. rechten oberen Eckpunkt des Rechteckes darstellt. Die Seiten des Rechteckes seien achsenparallel und für die Punkte muß folgende Bedingung gelten: x1<x2, y1<y2.

Rechtecke können aber auch durch den linken unteren Eckpunkt und die Angabe der beiden Seiten a und b definiert werden, wobei die Seite a wiederum parallel der x-Achse und die Seite b parallel der y-Achse verläuft. Die Eingabe hat dann die Form (x1,y1,a,b).

Bei einem Quadrat reicht allerdings die Eingabe einer einzigen Seite in der Form (x1,y1,a), x1 und y1 sind dabei die Koordinaten des linken unteren Eckpunktes.

Implementieren Sie eine Methode, welche die Rechtecke zuerst auf Zusammenhang überprüft und dann die Gesamtfläche dieser zusammenhängenden Rechtecke ausgibt. Als Zusammenhang gilt wenn sich 2 Rechtecke an einer Seite oder Ecke von 2 Rechtecken berühren oder gar überdecken. Wenn sich 2 Rechtecke überdecken, so darf die Fläche nur einmal gezählt werden.

Zusammenhängende Rechtecke werden im folgenden Text nur mehr Objekt bezeichnet. Implementieren Sie weiters die Methode boundingbox, welche um ein Objekt ein achsenparalleles Rechteck erstellt und dessen Flächeninhalt berechnet.

Schreiben Sie eine Routine welche zwei Objekte miteinander vergleicht. Der Vergleich zweier Objekte sei definiert durch a<b gdw. die Fläche des zusammenhängenden Rechtecke des Objekts a< als die Fläche des zusammenhängenden Rechtecke des Objekts b.

a<<b sei definiert wenn die die Fläche der boundingbox des Objekts a < als die Fläche der boundingbox des Objekts b. Dies gilt sinngemäß auch für die weiteren Operationen >,>>,= und ==.

Zuletzt implementieren sie noch ein Methode toString, welche von einem Objekt die Anzahl der zusammenhängenden Rechtecke, die Fläche des Objekts und die Fläche der boundingbox ausgibt.

Eingabedaten:

Lesen Sie einen einzelnen String ein, der aus folgenden Zeichen bestehen darf: Ziffern, Klammern, den Operatoren "<<,<,>>,>,=,==", dem negativen Vorzeichen "-" sowie Komma und Strichpunkt zum Trennen der einzelnen Werte.

Dieser enth&aeuml;lt entweder nur eine Reihe von Rechtecke die zu einer Gruppe zusammengehören sollen, oder 2 Gruppen getrennt durch einen der zuvor definierten Vergleichsoperatoren.

Sämtliche Zahlenangaben müssen ganzzahlig und vom Typ Short sein, ferner müssen Seitenlängen positiv und größer 0 sein.

Ausgabedaten:

Bei korrekten Eingabesätzen soll Ihr Programm das Resultat einer Berechnungen der Form: Anzahl der zusammenhägenden Rechtecke, die Fläche des Objekts und die Fläche der boundingbox durch ein Leerzeichen getrennt ausgeben. Falls die eingebenen Rechtecke einer Gruppe nicht zusammenhängen so geben Sie "0" aus.

Bei Vergleichsoperatoren geben Sie das entweder "TRUE" oder "FALSE" aus.

Schließen Sie die Ausgabe mit einem Zeilenvorschub ab.

Fehlerbehandlung:

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 numerischen Datentyp, so soll einmal das Zeichen "?", gefolgt von einem Zeilenvorschub, ausgegeben werden.

Wenn dann der Eingabestring nicht den Bedingungen genügt, so soll Ihr Programm die Fehlermeldung "FALSCHE EINGABE", gefolgt von einem Zeilenvorschub, ausgeben.

Beispiele:

Eingabedaten
(0,3;2,5)(1,2,2)(3,0,4,2)

(1,0;2,2)(0,2;2,3)==(0,1,2)(1,0,1,2)

Ausgabedaten
3 15 25

TRUE


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 Main < Bounding.i1 > Bounding.out1

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