Drücke „Enter”, um zum Inhalt zu springen.

Veröffentliche Beiträge in “Fraktale”

Alles rund um Fraktale

Komplex

Jan 0
complex_small

4 Monate

Jan 0
4_months_small

Skizzen

Jan 0
121_sketches_small

Kleine Schritte

Jan 0

Heute hatte ich mir vorgenommen, die Berechnung und die Anzeige von einander zu trennen. Dazu habe ich in meiner Fraktalklasse aus einer Methode zwei gemacht. Eine zum Berechnen und eine zum Ausgeben. Die Oberfläche wurde davon kaum tangiert. Beim Ausgeben wird nur die Fraktalklasse nach dem Bild abgefragt. Dass das schon berechnet ist, interessiert dabei ja nicht. Ergebnis: Das Scrollen in der Grafik geht schön flüssig und ohne Ruckeln.

programm_5

Dem Berechnen-Button wurde endlich ein Icon verpasst und Funktionalität hinterlegt. Wenn der Button gedrückt wird, wird das Fraktal neu berechnet. Und schon stehe ich wieder vor einem neuen Problem, dass kein Neues ist: Wenn ich auf den Button berechnen drücke, soll der Text der Statuszeile auf "Rechne..." gesetzt werden und sobald er fertig ist, wieder auf "Fertig...". Das Problem äußert sich dann wie folgt: Es bleibt "Gestartet..." stehen, er rechnet und wenn er fertig ist, blitzt kurz was auf und dann steht "Fertig..." da. Woran liegt das? Stichwort: Eventqueue. Wenn der Button gedrückt wird, geht das Programm in den dafür vorgesehenen Zweig der Eventbearbeitung. Solange der Event abgearbeitet wird, müssen andere Events warten. So auch die Events, die das Neuzeichnen der Statuszeile veranlassen.

Demzufolge ist die nächste Aufgabe: Der Buttonevent muss schnell verlassen werden und den Weg frei geben für die Ausgabe der Statusnachrichten. Realisierung: Mit Betreten des Eventhandler wird ein Thread gestartet, der Setzen des Textes, Berechnen und wiederum Setzen des Textes veranlasst.

Was zu einem wirklichen Problem werden kann, ist das Setzen einer benutzerdefinierten Palette. Momentan adressiere ich die Werte für die Pixel direkt, d.h. ich benutze jeweils einen Wert für jeden der RGB-Kanäle. Realisierungsmöglichkeiten:

  1. Eine Übersetzungstabelle zwischenschalten, die mir die RGB-Werte für einen bestimmten Abbruchwert liefert. Nachteil dabei ist, dass diese Tabelle 16,7 Millionen Einträge hat.
  2. Abbildung über eine Formel: Anhand der Formel kann ich aus dem Abbruchwert den RGB-Wert berechnen. Diese Methode ist allgemein bei Fraktalgeneratoren üblich.

Fraktalprogramm

Jan 0

Heute kam die gestern angekündigte Version mit Scrollbalken dazu. An sich nicht sehr problematisch, aber ich habe noch Korrekturen an den Tabulatoren vorgenommen, sodass ich sämtliche Container erstmal entfernt habe, bis letztendlich nur Toolbar und Statuszeile übrig blieben und habe dann quasi von vorn begonnen. Somit sieht die Version von heute nicht wesentlich anders wie die von gestern aus.

Gleichzeitig kam natürlich das Problem hoch, dass ich zur Zeit noch das Berechnen der Grafik an das Zeichnen des Bildes angeschlossen hab. Sprich: wenn man den Scrollbalken bewegt, wird jedes Mal das Bild neu berechnet. Also hab ich schon mal nachgesehen, wie ich das realisieren werde.

Meine Klasse Fractal hat momentan nur eine Methode drawImage. Diese zeichnet in den übergebenen Grafikkontext. Meine nächste Änderung wird also dahingehend erfolgen, dass diese Klasse die Bilddaten selbst speichert und über getImage die Bilddaten zurückgibt und mit calculateImage das Bild neu berechnet. Parameter werden die Bildgröße und die Farbpalette sein - somit hab ich gleich die Tür offen, um eventuell eine kleine Vorschau zu berechnen.

Im Hauptprogramm selbst wird der Listener nur noch die Grafik anfordern, beim ersten Mal natürlich erstmal berechnen. Ansonsten erfolgt das Berechnen nur noch, wenn der Button zum Berechnen betätigt wurde.

Symbol

Jan 0
117_symbol_small

Fraktalprogramm

Jan 0

Ich hab den gestrigen Abend genutzt, mich mal in Sachen Eclipse zu informieren, damit ich das Fraktalprogramm mal anfangen kann. Dazu habe ich erstmal die Eclipse IDE heruntergeladen ( ca. 100 MB ). Also nächstes folgten das aktuelle Java-SDK ( 50 MB ), sowie die API-Dokumentation dazu ( nochmal 50 MB ). Eclipse gestartet und das Tutorial für eine Standalone-SWT-Anwendung durchgearbeitet. Dazu mußte ich noch die SWT-Klassen herunterladen.

Nachdem ich ein wenig herumprobiert hatte und mich auch auf den Seiten von Eclipse informiert habe, lud ich noch den Visual Editor - einen GUI-Editor herunter, der noch ein paar andere Plug-Ins benötigte. Und damit fing der heutige Tag an. Als erstes wollte ich mich ein bißchen in den VE einarbeiten, Eventhandling etc. ansehen. Alles sehr leicht zu bedienen.

Für die Erstellung habe ich folgende Meilensteine gesetzt:

  • Anwendung aufbauen
  • Berechnung für ein einfaches Apfelmännchen einklinken
  • Oberflächenelemente einfügen (Menü, Toolbar, Fußleiste, Tabs)
  • Parameterdialog erstellen
  • Berechnung des Apfelmännchens an den Parameterdialog knüpfen
  • Maus-Events so kontrollieren, dass mittels Ziehen ein Rechteck zum Zoomen gezeichnet wird
  • Abfrage der Maus-Koordinaten zum Zoomen
  • Abstimmung der neuen Koordinaten mit den Parametern zum Fraktal (damit dürfte das Zoomen automatisch realisiert sein)
  • Speichern der Koordinaten (Projektdatei)
  • Speichern des Bildes

Soweit die nächsten Schritte. Fernere und komplexere Ziele sind dann folgende:

  • Farbpalette (laden, speichern, bearbeiten, Standardpalette erstellen)
  • Formeln (Dialog für Parameter dynamisch gestalten, andere Formeln integrieren)
  • alternative Abbruchalgorithmen (Parameterdialog)
  • Formelschnittstelle erstellen
  • alternative Berechnungsalgorithmen

Wird ein weiter Weg werden, aber wenn man die Ergebnisse sieht, spornt einen das nur noch mehr an. Ich informierte mich auf den Seiten von Eclipse, wie ich am besten in einen Container zeichne. Also hab ich mich an das Event gehängt, das ein Neuzeichnen eines Fenster ermöglicht und erstmal das Beispiel nachprogrammiert. Das Zeichnen geht sehr schnell und funktionierte wie erwartet. Also habe ich die Formel zur Berechnung eines Apfelmännchens integriert. Nach etlichen Versuchen, die damit endeten, dass das Programm in einer Endlosschleife stecken blieb oder alle Pixel als zur Menge zugehörig setzte, erzeugte ich mein erstes Apfelmännchen...

Für den nächsten Schritt muss ich was zur Berechnung sagen. Ein Punkt gehört zur Menge des Apfelmännchens, wenn nach n Iterationen ein Schwellwert nicht überschritten wurde. Wer schon mal ein Fraktal berechnet hat, wird gesehen haben, dass außerhalb des Fraktals eine schöne farbige Umgebung gezeichnet wird. Die Umgebung wird dabei folgendermaßen umgesetzt: Mit Überschreiten des Schwellwertes wird mit Hilfe der bis dahin absolvierten Iterationen ein Farbwert bestimmt, mit dem dann das Pixel eingefärbt wird) (Ich stell mir gerade das Färben eines Pixels vor) So habe ich im ersten Versuch die Abbruchwerte direkt auf die systeminterne Palette umgesetzt und folgendes Fraktal erhalten...

WordPress Cookie Hinweis von Real Cookie Banner