************************************************************************* * * * DOKUMENTATION ZU Rgb.class (3.Spezifikation) * * * ************************************************************************* Autor: Florian BAUER Mat.Nr: 0125773 E-Mail: flobauer@gmx.at 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. Eingabe: Es werden die drei Farbkomponenten in der Reihenfolge Rot, Grün, Blau als Zahlen vom Typ Integer eingelesen. Diese müssen jeweils im Bereich 0-255 (inklusive) liegen. Ausgabe: Bei korrekten Eingabedaten werden die normierten Abstände für die 8 Eckpunkte des Teilquaders in aufsteigender Reihenfolge sortiert als Float-Zahlen mit 3 Nachkommastellen ausgegeben. Getrennt werden diese Werte jeweils durch ein Leerzeichen. Am Ende wird ein Zeilenvorschub ausgegeben. Fehlerbehandlung: Falscher Datentyp: Ausgabe: "?" Falsche Eingabe lt.Spez. (zb R, G oder B <0 oder >255): Ausgabe: "FALSCHE EINGABE" Methode Main: Die Methode Main wird zur Initialiesierung des Programmes und zum Einlesen der Variablen R G & B verwendet (Farbwerte für Rot, Grün und Blau). Weiters wird die Fehlerbehandlung für falsche Datentypen per try-catch durchgeführt. Methode calc_corners(): Diese Methode berechnet die Koordinaten aller 8 Eckpunkte des Quaders, in dem der gesuchte Punkt liegt. *) Überprüfung ob die Angegebenen Koordinaten (Farbwerte) zwischen 0 und 255 liegen. *) Bestimmung der Grenzen der Farbbereiche: RG[] .... Rot und grün wird lt. Spez in 8 Teile unterteilt B[] .... Blau in 4 Teile. Erklärung: Der Farbwürfel wird hierdurch in mehrere Teilquader unterteilt. Dies ermöglicht die Bestimmung der Lage des Farbpunktes *) Prüfung in welchem dieser Teilquader unser angegebener Punkt liegt *) Berechnung der einzelnen Koordinaten des Eckpuntes NR.1 ( siehe Skizze auf http://stud3.tuwien.ac.at/~e0125773/rgb.htm ) Methode calc_dist() Diese Methode berechnet den normierten Abstand zwischen dem angegebenen Punkt und den 8 Eckpunkten des Teilquaders in dem der Punkt liegt. *) Berechnung der absoluten Abstände vom Punkt zu jeder einzelnen Ecke: Angewendete Formel: Satz von Pythagoras ( siehe Skizze auf http://stud3.tuwien.ac.at/~e0125773/rgb.htm ) Das ganze wird mit allen 8 Eckpunkten durchgeführt. *) Berechnung der Summe aller absoluten Abstände *) Berechung des normierten Abstandes des Punktes zu allen Eckpunkten Formel: Absolutabstand/(Summe aller Abstände) Methode sort() In dieser Methode werden die 8 vorhandenen normierten Abstände sortiert (beginnend mit dem Kleinsten). Hierzu habe ich folgenden Algorythmus angewendet: 2 For Schleifen, die jeweils 8 Mal ausgeführt werden. 1.) Schleife: wenn Wert an Stelle j grösser ist als Wert an Stelle j+1, dann tausche diese beiden 2.) führe die 1. Schleife 8 mal aus, dadurch wird gewährleistet das alle Möglichkeiten bei 8 Werten durchgegangen werden. Weiters wird in dieser Methoder der einfachheit halber die Ausgabe durchgeführt. Da laut Spez. die Werte als float Zahlen mit 3 Nachkommastellen ausgegeben werden müssen, habe ich leider die eher unschöne Variante (printfixed(), print" ", ... ) anwenden müssen. Eine Umwandlung in EINEN String wäre meiner Meinung nach sinnvoller und besser wiederverwendbar, aber eben laut Spez. nicht erlaubt. Falls Fragen bez. des Programmes auftreten, stehe ich gerne unter flobauer@gmx.at zur Verfügung. Florian Bauer