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:

image

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

In Python hatte ich die Kurve zuletzt gezeichnet. Dort findet Ihr auch Anregungen für weitere Experimente und mehr Hintergrundinformationen.




Sie sind hier: StartProgrammierungCreative CodingProcessing → schmetterlingskurve.txt


Suche

Werkzeuge