3055 Rgb RGB Wuerfel
Kategorie:Grafik
Klasse:schwer
Eingabe:siehe Spezifikation
Ausgabe:siehe Spezifikation
Abzugebende Files: Rgb.txt, Rgb.java, *.java , 209.txt, 432.txt

Kurzbeschreibung:

Ein Farbwert im RGB-Farbwürfel (Rot, Grün, Blau je 256 Stufen) soll auf einen Farbwürfel mit 147 Farbwerten abgebildet werden. Dazu ist eine Bewertung der 8 Ecken des Teilquaders, in dem der Farbwert liegt, auszugeben.

Allgemeine Hinweise:

Aufgabenstellung:

Lesen Sie drei Farbwerte ein, die den Helligkeiten der Komponenten Rot, Grün und Blau (0..255, 0..255, 0..255) 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 -> 7:7:3 (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. Wenn der Punkt genau auf der Grenze zweier Quader liegt, so wählen Sie jenen, dessen Koordinaten kleiner sind.

Als Ausgabe sollen Sie für jede der 8 Ecken dieses Teilquaders den normierten Abstand liefern, den dieser Eckpunkt (der einer darstellbaren Farbe entspricht) von dem tatsächlichen Punkt hat. Der normierte Abstand ist jener Abstand der, wenn man alle 8 Abstände aufsummiert, 1 ergibt.

Eingabedaten:

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

Ausgabedaten:

Bei korrekten Eingabedaten sind die normierten Abstände für die 8 Eckpunkte des Teilquaders in aufsteigender Reihenfolge sortiert als Float-Zahlen mit 3 Nachkommastellen auszugeben.

Trennen Sie diese Werte jeweils durch ein Leerzeichen und geben Sie am Ende einen Zeilenvorschub aus.

Fehlerbehandlung:

Sämtliche Eingabedatensätze sind immer bis zum definierten Endezeichen 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
109 109 170

73 74 277

Ausgabedaten
0.000 0.073 0.073 0.104 0.173 0.188 0.188 0.202

FALSCHE EINGABE


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

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