Um diese Animation sehen zu können benötigen Sie Java. java.com

Source code: diamondSquareAni

Built with Processing


Beschreibung

Wenn man den Radiobutton 'original' anklickt, sieht man eine grafisch dargestellte Rauschfunktion. Die hat 3 Dimensionen: Breite, Höhe und die Farbtiefe. Wird die checkbox 'Play' aktiviert, berechnet Dein Computer eine Animation dieser Rauschfunktion.

Dieses Rauschen wird mit Hilfe des Diamond-Square Algorithmus berechnet, der eine 3D-Variante des Midpoint Displacement verfahrens ist. Diesen Algorithmus habe ich genommen, weil er viel eleganter ist als z.B. Perlin Noise bei dem jeder Punkt mehrmals berechnet werden muß um dann alle Ergebnisse zu addieren.

Mein Ziel, dieses Rauschen zu animieren, wollte ich am Anfang lösen, indem ich eine Dimension hinzufüge und quasi alle Punkte eines Würfels auslenke um dann die einzelnen Schichten nacheinander anzuzeigen. Aber das war zuviel an Daten und mein PC hat da nicht mitgemacht.

Also nahm ich zwei verschiedene Rauschbilder und berechnete die Zwischenbilder durch lineare Interpolation (berechnen von Zwischenwerten) zwischen den einzelnen Punkten. Als ich beim zweiten Rauschbild angelangt war, berechnete ich ein drittes und interpolierte zwischen dem zweiten und dritten u.s.w.

Der Nachteil dieses Vorgehens war, daß man in der Animation deutlich gesehen hat, wann einer der Keyframes erreicht war und die Berechnung dahinter in eine andere Richtung (zum nächsten Keyframe) weiterging. Also habe ich erst die Cosinus-Interpolation ausprobiert. Damit waren zwar die abrupten 'Richtungswechsel' an den Keyframes ausgeschaltet, aber wenn die Animation bei einem Keyframe angelangt war, bewegte sich überhaupt nichts mehr (anstieg an den Stützpunkten = 0 (siehe)).

Daraufhin hab ich mich für die Kubische Interpolation entschlossen, die berechnungsintensiver ist und zudem 4 Punkte zur interpolation benötigt. (lineare und Cosinus-Interpolation berechnen die Zwischenschritte zwischen 2 Stützpunkten, Kubische Interpolation bezieht einen Stützpunkt davor und einen danach auch noch mit ein)

Als das fertig war, sah es genauso aus, wie ich wollte: die Animation bewegt sich immer an irgendeiner Stelle des Bildes, es gibt keine abrupten Richtungswechsel: es sieht flüssig aus, solange man das Bild nicht zu groß macht ('Play' aktiviert, 'original' ausgewählt).

Danach habe ich noch mit den Farben herumgespielt (einfach einem Bereich von Grauwerten eine neue Farbe zugewiesen) und dann noch die Steuerung mit Hilfe der Bibliothek SpringGUI eingebaut, um zwischen meinen lieblingsfärbungen umschalten und die Animation anhalten zu können.

ToDo

Die Struktur des Programmes ist scheußlich. Es funktioniert zwar, aber ich muß noch ein paar Funktionen auslagern um sie anderswo auch benutzen zu können und übersichtlicher muß der Code auch noch werden. Das aber später.

Creative Commons License