Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Lektion 5 – Rekursive Funktionen und Fraktale

21. Oktober 2011

Um mir den Code verständlicher zu machen, habe ich bei dieser Aufgabe zuerst alles durchkommentiert. Dann habe ich einzelne Parameter abgeändert und die Resultate studiert. Als nächstes habe ich ein JPG von einem Ahornblatt genommen und in Illustrator vektorisiert. Dieses habe ich dann als SVG gespeichert und über PShape in das Dokument importiert. Ich habe damit die runden Blätter ersetzt. Über PShape kann man keine PNG-Dateien importieren. Habe zuerst versucht, das JPG in Illustrator zu kopieren und dann als SVG zu speichern, was nicht funktioniert hat. Ich musste das JPG in Pfade umwandeln. Die Matrix-Funktionen sind mir jetzt verständlicher.

Hintergrund wird nicht mehr gelöscht

Hintergrund wird nicht mehr gelöscht

Ahorn-Bläter

//PShape loadMaple;

void setup()          // Grundeinstellung des Dokuments
{
  size(600,600);      // Fenstergroesse

  randomSeed(millis());  // seed random ??

  smooth();           // aktiviere antialiasing
  strokeWeight(7);    // linienbreite
  stroke(0,0,0,150);  // Der Alpha(Transparenz)-Wert aller Linien (Äste) wird definiert. 0,0,0 = Schwarz

  noLoop();           // Der Code läuft nicht einfach durch, sondern wird über mousePressed ausgeführt

  //loadMaple = loadShape("maple.svg");

}

void draw()
{
  background(255);    // Hintergrundfarbe

  pushMatrix();                        // Speichern momentaner Stand des Grids und Definition von neuen Werten
    translate(width *.5,height - 20);  // Das Grid wird in die Mitte gesetzt und um 20 nach unten ??
    wurzel(6);                         // die Funktion Wurzel wird aufgerufen und der Parameter 7 wird weitergegeben
  popMatrix();                         // Der Zustand des Grids wird zurückgesetzt
}

void mousePressed()    // auf Mausklick wird etwas ausgelöst
{
   redraw();          // draw wird erneut ausgeführt und damit auch die Funktion "Wurzel"
}

void keyPressed()
{
  switch(key)
  {
  case 's':
    saveFrame("screenshot-##.png");
    println("Saved screenshot-##.png");
    break;
  }
}

// funktion
void wurzel(int tiefe)  // Funktionsdefinition mit der Variable "tiefe". Tiefe wird von der "draw" Funktion weitergegeben. Tiefe = wie oft läuft die Funktion durch.
{
   if(tiefe <=0)    // teste ob das ende erreicht worden ist
   {
     // zeichne Blueten
     pushStyle();          // Momentaner Style-Stand wird gespeichert. Neue Styles werden definiert. Mittels popStyle werden die Styles wieder zurückgesetzt.
       int clr = (int)random(100,255);    // Definition der Variable 'clr'. Wert der Variable ist ein zufälliger Wert zwischen 100 und 255 (Rottöne)
       stroke(clr,0,0,190);               // Die Variable 'clr' wird weitergegeben. Ein Transparenzwert von 190 wird gesetzt.
       fill(clr,0,0,190);                 // Füllung der Blätter wird definiert
       //shape(loadMaple, -30, -15, 50, 50);
       ellipse(0,0,50,50);                // Blätter. 0,0 = Startpunkte, 50,50 = Endpunkte
     popStyle();            // Zurücksetzen der mit pushStyle gesetzten Stylestände

     return;                //??
   }

  // zeichne zweige
  int x;    // Definition Variabel ohne Wert ??
  int y;     // Definition Variabel ohne Wert ??
  int count = (int)random(1,8);    // Definition Variabel "count" mit zufälligem Wert zwischen 1 und 8.
  for(int i = 0; i < count;i++)    // Beginn "For"-Schlaufe.
  {
    x = (int)random(-100,100);    // zufällig gewählter Wert für die x-Position der Linie (des Asts)
    y = -(int)random(10,150);     // zufällig gewählter Wert für die y-Position

    line(0,0,x,y);                // Eine Linie wird vom Nullpunkt ausgezeichnet zu einem zufällig gewählten Endpunkt (siehe oben)

    pushMatrix();                // scho wieder dä
      translate(x,y);            // Die Matrix verschiebt sich um den zufällig generierten Wert
      scale(random(.3,0.95));    // Zufällig generierter Wert zwischen .3 und .95 , mit dem die ??? verkleinert werden
      wurzel(tiefe-1);           // Rekursives Aufrufen der Funktion i.e. die Funktion ruft sich selber auf.
    popMatrix();                // Der Zustand des Grids wird zurückgesetzt
  }
}