Einen einfachen Funktionenplotter in Processing.py, dem Python-Mode von Processing, zu zeichnen, ist ziemlich einfach und in wenigen Zeilen Code erledigt. Zuerst habe ich – zur besseren Orientierung – den Hintergrund mit einem Ratser hinterlegt, wie ich es hier auch schon einmal angestellt hatte und mit translate(width/2, height/2)
den Nullpunkt des Koordinatensystems in die Mitte des Fensters gelegt.
Jetzt ist eigentlich nur noch zu berücksichtigen, daß in einem kartesischen Koordinatensystem, wie wir es aus der Schule kennen, die positiven y-Werte von der Null-Linie aus nach oben gehen und nicht, wie in der Computergraphik (und damit auch in Processing) üblich, von der Null-Linie nach unten. Das habe ich damit behoben, daß ich den Skalierungsfaktor yscale
mit -1
multipliziert und so die Richtung umgekehrt habe.
Der Rest ist Spielerei: Die eigentlichen Funktionen (in diesem Fall Sinus und Cosinus) habe ich in eine eigene Funktion (graphFunction()
) ausgelagert, so daß man – wenn man andere Funktionen zeichnen will – Änderungen im Prinzip nur hier vornehmen muß. Wenn man die Fenstergröße ändert, muß man natürlich auch die Wertepaare [xmin, xmax]
und [ymin, ymax]
anpassen.
Hier der komplette Quellcode:
import math # Range of x-values xmin = -6 xmax = 6 # Range of y-values ymin = -2 ymax = 2 # Calculate the range rangex = xmax - xmin rangey = ymax - ymin def setup(): global xscl, yscl size(600, 200) this.surface.setTitle("Sinus und Cosinus") xscl = width/rangex yscl = -height/rangey def draw(): global xscl, yscl background(255) translate(width/2, height/2) grid(xscl, yscl) graphFunction() def graphFunction(): x = xmin while x <= xmax: stroke(255, 0, 0) line(x*xscl, math.sin(x)*yscl, (x + 0.1)*xscl, math.sin(x + 0.1)*yscl) stroke(255, 0, 255) line(x*xscl, math.cos(x)*yscl, (x + 0.1)*xscl, math.cos(x + 0.1)*yscl) x += 0.1 def grid(xscl, yscl): strokeWeight(1) stroke(0, 255, 255) # Cyan for i in range(xmin, xmax + 1): line(i*xscl, ymin*yscl, i*xscl, ymax*yscl) for i in range(ymin, ymax + 1): line(xmin*xscl, i*yscl, xmax*xscl, i*yscl) stroke(0) line(0, ymin*yscl, 0, ymax*yscl) line(xmin*xscl, 0, xmax*xscl, 0)
Das letztens hier im Blog Kritzelheft vorgestellte Buch »Math Adventures with Python« von Peter Farrell motiviert mich mehr und mehr. Ihr dürft also in der nächsten Zeit noch mehr darüber hier erwarten – sei es in Processing.py, sei es mit Pythons Turtlegraphik oder sei es mit der Matplotlib. Still reading and digging!
Über …
Der Schockwellenreiter ist seit dem 24. April 2000 das Weblog digitale Kritzelheft von Jörg Kantel (Neuköllner, EDV-Leiter, Autor, Netzaktivist und Hundesportler — Reihenfolge rein zufällig). Hier steht, was mir gefällt. Wem es nicht gefällt, der braucht ja nicht mitzulesen. Wer aber mitliest, ist herzlich willkommen und eingeladen, mitzudiskutieren!
Alle eigenen Inhalte des Schockwellenreiters stehen unter einer Creative-Commons-Lizenz, jedoch können fremde Inhalte (speziell Videos, Photos und sonstige Bilder) unter einer anderen Lizenz stehen.
Der Besuch dieser Webseite wird aktuell von der Piwik Webanalyse erfaßt. Hier können Sie der Erfassung widersprechen.
Diese Seite verwendet keine Cookies. Warum auch? Was allerdings die iframes
von Amazon, YouTube und Co. machen, entzieht sich meiner Kenntnis.
Werbung