1200 farb1 Farbkonvertierung 2
Kategorie:Grafik
Klasse:schwer
Eingabe:short
Ausgabe:short
Abzugebende Files: farb1.txt, farb1.java

Kurzbeschreibung:

Ein Farbwert im RGB-Farbwürfel (Rot, Grün, Blau je 256 Stufen) soll auf einen von 256 Farbwerten abgebildet werden.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie drei Farbwerte ein, die den Helligkeiten der Komponenten Rot, Grün und Blau im RGB-Farbraum entsprechen (bekannt als "True Color").

Stellen Sie sich den RGB-Farbraum als dreidimensionalen Würfel vor (jeweils 0..255, 0..255, 0..255), wobei jede Koordinatenachse einer der Farbkomponenten entspricht. Um eine Farbe aus diesem Farbraum in einen kleineren Farbraum zu konvertieren, muß der RGB-Farbwürfel in Quader unterteilt werden.

Ihr Programm soll die eingelesen Farbwerte in einen 8-Bit-Farbwert umwandeln, wobei das Reduktionverhältnis der Helligkeiten 256:256:256 -> 8:8:4 (Rot:Grün:Blau) sein soll. Dabei sollen die Farbgrenzen gerundet werden. Um bei einer Farbe (z.B. Rot) auf 8 Abstufungen zu kommen muessen Sie 255 : 7 dividieren. Bei Blau 255 : 3.

Bei dieser Umwandlung wird festgestellt, in welchem Teilquader der eingelesene Farbwert liegt. Als Ergebnis sollen die RGB-Koordinaten des nächstgelegenen und des entferntesten Eckpunktes dieses Quaders ausgegeben werden. Falls ein Farbpunkt genau einem Eckpunkt entspricht soll dieser Farbwert zweimal ausgegeben werden (Der naechste und weiteste sind ident). Wenn der Punkt genau auf der Grenze zweier Quader liegt, so wählen Sie jenen, dessen Koordinaten kleiner sind.

Eingabedaten:

Lesen Sie die drei Komponenten in der Reihenfolge Rot, Grün, Blau als Zahlen vom Typ SHORT ein. Diese müssen jeweils im Bereich 0-255 (inklusive) liegen.

Ausgabedaten:

Bei korrekten Eingabedaten soll Ihr Programm zuerst die Koordinaten des nächstgelegenen Eckpunktes und dann die Koordinaten des entferntesten Eckpunktes des Teilquaders ausgeben. Die Reihenfolge ist (R G B).

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
100 100 100

120 130 140

Ausgabedaten
109 109 85 73 73 170

109 146 170 146 109 85

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

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