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.

Tag 3, Rekurisve

21. September 2012

Programming Basics, Tag 3 Heute hatten wir den Auftrag einen rekursiven Code ab zu ändern. Das System eines solchen Codes ist sehr interessant. Ich hab mit der Tiefe und dem Count herum gespielt, dies brachte mein MacBook Air ziemlich an seine Grenzen 😉 Mein Ziel für diese Übung war es eine Stadt zu bauen, dies gelang mir aber nur annähernd. Hier habe ich den Verlauf mit Screenshots dokumentiert:

Hier der Code:


void setup() //set up festlegen
{
 size(600,600); //def. Fenstergrösse

 randomSeed(millis()); //seed random definieren, rechnet um, wie viel Zeit seit dem Start vergangen ist

 smooth(); //aktiviere antialiasing
 strokeWeight(5); //linienbreite
 stroke(0,0,0,150); //farbe der linie ist schwarz mit 150% transparänz

 noLoop(); //keine automatische wiederholung -> kein Loop
}

void draw()
{
 background(255); //BG wird auf weiss gesetzt

 pushMatrix(); //das aktuelle koordinatensystem wird auf dem stack gespeichert
 translate(width *.5,height - 40); //das koordinatensystem wird auf die hälfte der länge (*0.5) verschoben$
 //und die höhe minus 40 (nach oben) verschoben
 wurzel(4); //hier wird die Funktion wurzel mit dem wert 7 gefüllt und aufgerufen
 popMatrix();
}

void mousePressed() //eine IF abfrage ob ein mouse button is pressed or not
{
 redraw(); //If a mouse button is pressed, then redraw
}

//funktion

void wurzel(int tiefe) //Wurzel ist eine funktion die keinen wert zurück gibt, die tiefe hat nur ganzzahlen
{
 if(tiefe <=0) // teste ob das ende erreicht ist - die tiefe kleiner oder = 0 ist
 {
 //zeichne blueten
 pushStyle(); //speichert die aktuellen style settings
 int clr = (int)random(100,255); //clr ist ein ganzzahl random zwischen der farbe rot - 100 und 255
 stroke(clr,0,0,190); //die linie hat den roten farbrandom und transparenz von 190
 fill(clr,0,0,190); // dito
 //ellipse(0,0,50,50); // dito
 //House hinterseite
 line(-30, 20, -85, 20);
 line(-85, 20, -85, 75);
 line(-85, 75, -30, 75);
 line(-30, 75, -30, 20);
 triangle(-85 , 20, -50, -30,-30,20);
 //verbindungen
 line(-85,20,-65,30);
 line(-85, 75,-65, 85);
 line(-30, 75,-10, 85);
 line(-30, 20, -10, 30);
 //triangle linke seite
 triangle(-85 , 20, -50, -30,-65,30);
 //triangle rechte seite
 triangle(-30 , 20, -50, -30,-10,30);

 //hous vorderseite
 line(-10, 30, -65, 30);
 line(-65, 30, -65, 85);
 line(-65, 85, -10, 85);
 line(-10, 85, -10, 30);
 triangle(-65 , 30, -50, -30,-10,30);

 popStyle(); // restores the prior settings

 return; // beendet die if schleife
 }

 //zeichne strasse

 int x; //x ist eine ganzzahl
 int y; // y ist eine ganzzahl
 int count = (int)random(1,7); // count ist eine ganzzahl darin ist ein ganzzahlrandom zwischen 1 und 8 festgelegt
 for(int i = 0; i < count; i++) //for schleife: i = startwert, muss kleiner als der count wert sein, i wird immer um eins nach oben gezählt
 {
 x = (int)random(-100,100); // x = ganzzahl random (zwischen -100 und 100
 y = -(int)random(10,150); // eine minus ganzzahl die sich per random in den werten zwischen 10 und 150 bewegt
 strokeWeight(random(2,8));
 //line(0,0,x,y); // linie hat die werte x1=0, y1=0, x=wie oben mit random definiert, y=wie oben mit random definiert

 triangle(-85 , 75, x, y,-30,75);

 pushStyle();
 fill(0,0,0,50);
 //House hinterseite
 line(-30, 20, -85, 20);
 line(-85, 20, -85, 75);
 line(-85, 75, -30, 75);
 line(-30, 75, -30, 20);
 triangle(-85 , 20, -50, -30,-30,20);
 //verbindungen
 line(-85,20,-65,30);
 line(-85, 75,-65, 85);
 line(-30, 75,-10, 85);
 line(-30, 20, -10, 30);
 //triangle linke seite
 triangle(-85 , 20, -50, -30,-65,30);
 //triangle rechte seite
 triangle(-30 , 20, -50, -30,-10,30);

 //hous vorderseite
 line(-10, 30, -65, 30);
 line(-65, 30, -65, 85);
 line(-65, 85, -10, 85);
 line(-10, 85, -10, 30);
 triangle(-65 , 30, -50, -30,-10,30);
 popStyle();

 pushMatrix(); //the current coordinate style wird gespeichert
 translate(x,y); // die fläche wird um den wert x,y random verschoben
 scale(random(.10,.95)); // das objekt wird mit einem random zwischen 0.3 und 0.95 verkleinert
 wurzel(tiefe-1); //der wert wurzel wird um minus 1 gezählt
 popMatrix();
 }
}