Zu den internen Details, bzw. auf was ich Wert gelegt habe. Man
sollte dabei beachten, dass dieses Programm nicht geschrieben wurde
um möglichst viel Geld zu machen, sondern um diverse Mechanismen
der Java Sprache zu testen ....
Das Programm arbeitet mit mehreren Engines. Jede dieser Engine
arbeitet quasi selbstständig. Von daher arbeitet jede Engine auch
als Thread. Die Kommunikation der einzelnen Threads wird via wait
und diversen Status Integern gelöst.
RenderEngine
Die Gruppe der RenderEngines ist verantwortlich fuer die Berechnungen.
Da quasi jedes Fraktal seine Schoenheit aus den Iterationen rauszieht,
berechnet die RenderEngine auch nur die Iterationen eines Fraktals.
Mehr nicht. Die Basisklasse hat bereits schon alle funktionalitaeten,
einzig eine Funktion Namens
calc muss ueberschrieben werden.
Welche RenderEngines zur Zeit verfuegbar sind, bitte in der
History schauen.
ColorEngine
Die Gruppe der ColorEngines holt sich die Iterationsdaten von den
RenderEngines ab. Es berechnet auf Grund der Iteration ein
entsprechenden Farbwert. Als Resultat bekommt man ein Pixel. Dieser
Pixel wird in einem Java Image Object abgelegt.
DisplayEngine
Die DisplayEngine holt sich die Imagedaten aus der ColorEngine ab und
stellt die im Fenster dar. Dazu bedient es sich eines JComponent mit
ueberschriebener paint Funktion.
Allgemeiner Ablauf
Wenn man nun ein Bild haben will, wird zu erst eine RenderEngine
gestartet und zwar als Thread. Danach wird eine ColorEngine erstellt
und eine Referenz auf die RenderEngine wird uebergeben. Danach
wird auch die ColorEngine in den Hintergrund geworfen. Zum Schluss
wird die DisplayEngine mit der Angabe der ColorEngine als Thread
gestartet. Erst dann macht sich ein Fenster auf.
Das schoene daran ist, das waehrend der Berechnung man mit der
Anwendung arbeiten kann, und das jede einzelne Engine vollkommen
austauschbar ist, auch die DisplayEngine.