Brownsche Irrfahrt in Processing

Hinzugefügt am von Steffen Fiedler

Powered by Processing.js

In der Stochastik ist die Irrfahrt (engl. Random Walk) ein Prozess der zufällige Richtungsänderung. Die Schrittweite ist immer gleich (in diesem Beispiel beträgt sie 1 Pixel). Um das Ergebnis visuell spannender zu gestalten, finden 30 Random Walks zeitgleich im Sketchfenster statt. Die Variable NUM gibt diese Zahl vor und bestimmt wie viele Felder die Arrays pos und col besitzen. In pos repräsentiert jedes Feld einen PVector – der Ort wo die Position im 2D Raum mittels x und y abgelegt wird. Hingegen speichern wir in col pro Feld einen RGB-Farbwert für das spätere Zeichnen. Alle Eigenschaften, Position und Farbe, werden zu Beginn im setup() Block definiert.
for (int i=0; i < NUM; i++) {
    pos[i] = new PVector (random (width), random (height));
    col[i] = color (random (90, 250), 170, 178);
}
Innerhalb der for-Schleife wird jedes Feld der beiden Arrays befüllt, wobei dem Index i jeweils eine Position und Farbe zugesprochen wird. Die selbe Schleifen-Struktur verwenden wir anschließend im draw(), um die Positionen zufällig zu bewegen und letztendlich abzubilden. Die Bewegung geht mit dem random() Aufruf für x und y vonstatten; wir fügen der aktuellen Position auf beiden Achsen einen Zufallswert im Bereich von -1 bis 1 hinzu.
pos[i].x += random (-1, 1);
pos[i].y += random (-1, 1);
Diese Zeilen beschreiben die Bewegung. Damit der Punkt die Zeichenfläche nicht verlässt, überprüfen wir die Grenzen (0 → Breite/Höhe) durch vier if Abfragen und Zeichnen den Punkt mittels point().

Der Sketch

// Anzahl der Punkte
int NUM = 30;
// Array zum speichern der Positionen
PVector[] pos = new PVector[NUM];
// Array zum speichern der Farben
color[] col = new color[NUM];

void setup () {
    // Größe und Hintergrundfarbe 
    // des Sketches definieren
    size(550, 200);
    background (79);
    
    // Für jeden Punkt...
    for (int i=0; i < NUM; i++) {
        // Lege Zufallsposition fest
        pos[i] = new PVector (random (width), random (height));
        // Lege Zufallsfarbe fest
        col[i] = color (random (90, 250), 170, 178);
    }
}

void draw () {
    
    // Für jeden Punkt im array 'pos'
    for (int i=0; i < NUM; i++) {
        
        // die Position zufällig modifiziere
        pos[i].x += random (-1, 1);
        pos[i].y += random (-1, 1);
        
        // Überprüfe an allen Seiten des Sketchfensters
        // ob der Punkt dieses gerade verlässt, verhindern!
        
        // Links
        if (pos[i].x < 0)
            pos[i].x = 0;
        // Rechts
        if (pos[i].x > width)
            pos[i].x = width;
        // Oben
        if (pos[i].y < 0)
            pos[i].y = 0;
        // Unten
        if (pos[i].y > height)
            pos[i].y = height;
        
        // Setze die Strich-(Punkt)-Farbe
        // für den entsprechenden Punkt im Array
        stroke (col[i]);
        
        // betreffendes Pixel in der Zeichfläche
        // mit der Strichfarbe füllen
        point (int (pos[i].x), int (pos[i].y));
    }
}