Schmetterlingskurve
Das Berechnen und Zeichnen der Schmetterlingskurve war vor ewigen Zeiten immer (m)ein Test für die Leistungsfähigkeit »moderner« Personalcomputer. Auf meinem 8 MHz Atari ST mit Modula-2 (kennt jemand diese seinerzeit recht populäre Programmiersprache überhaupt noch?) benötigte das Teil damals etwa 10 Minuten, um fertig gerechnet auf dem Monitor zu glänzen. Ansonsten ist es einfach eine schöne Kurve, dessen Gleichung in Polarkoordinaten folgendermaßen geschrieben wird:
- rho = ecos(theta) - 2 cos(4 theta) + sin(theta/12)5
In Processing auf einem heutigen Rechner ist das Berechnen und Zeichnen der Kurve nur noch eine Sache von Sekundenbruchteilen und sieht dann (wenn man mit smooth() auch noch Anit-Aliasing einschaltet) ungefähr so aus:
Ist das nicht ein wunderschöner Schmetterling, den wir da mit nur ganz wenigen Programmzeilen hingezaubert haben?
Ich habe die Kurve diesmal nicht gezeichnet, um die Geschwindigkeit meines Rechners zu testen (der ist hinreichend schnell), sondern um festzstellen, welche mathematischen Funktionen Processing kann. Und - obwohl ich es nirgendwo dokumentiert gefunden habe - es sieht so aus, als ob Processing die gesamte mathematische Bibliothek von Java importiert und dem Nutzer transparent zur Verfügung stellt. Ein Blick in die Java-Dokumentation zeigt einem also, was möglich ist.
Quellcode
Der Quellcode für diese Kurve ist von erfrischender Kürze:
// Schmetterlingskurve
int xOld = 0;
int yOld = 0;
void setup() {
size(500, 500);
background(0);
stroke(255);
smooth();
float theta = 0.0;
while (theta < 75.39) {
float r = exp(cos(theta)) - 2*cos(4*theta) + pow(sin(theta/12), 5);
// Polarkoordinaten:
float x = r*cos(theta);
float y = r*sin(theta);
// Skalieren auf Fenstergröße:
int xx = (int)(x*width/10) + width/2;
int yy = (int)(y*height/10) + height/2;
if (theta == 0.0) { point(xx, yy); } // Startpunkt
else { line(xOld, yOld, xx, yy); }
xOld = xx;
yOld = yy;
theta = theta + 0.02;
}
}
Literatur
- Temple Fay: The Butterfly Curve, American Math Monthly, 96(5), 1989; 442 - 443
- Clifford A. Pickover: Mit den Augen des Computers. Phantastische Welten aus dem Geist der Maschine, München (Markt & Technik) 1992
- Stan Wagon: Mathematica in Aktion, Heidelberg (Spektrum Akademischer Verlag) 1993
In Python hatte ich die Kurve zuletzt gezeichnet. Dort findet Ihr auch Anregungen für weitere Experimente und mehr Hintergrundinformationen.
Sie sind hier: Start → Programmierung → Creative Coding → Processing → schmetterlingskurve.txt