21. Oktober 2011
Ausgehend von Lektion 5 habe ich bei dieser Aufgabe mit Spiralen experimentiert. Verschiedene Parameter der Spirale werden zufällig generiert. Der momentane Stand ist, dass die einzelnen Elemente, die die Spirale ausmachen, nicht mehr angezeigt werden. Nur noch Punkte, die am Ende jedes Elements stehen, werden dargestellt. Mit 's' kann wiederum ein Screenshot gespeichert werden und mit 'r' kann die Zeichenfläche wiederhergestellt werden.int y = (int)random(30,50); // Variabeldefinition für die Länge der einzelnen Spiralelemente void setup() { size(900,900); // Fenstergroesse smooth(); // Antialiasing ein strokeWeight(5); // Standardlinienbreite noLoop(); // stopt draw. Wird erst durch Mausklick wieder ausgelöst. background(0); // Hintergrund schwarz ellipseMode(CENTER); // Zeichenmodus für Ellipsen } void draw() // Zeichenfunktion { pushMatrix(); translate(mouseX,mouseY); // Mittelpunkt des Zeichengrids = Mausposition spirale(); // Aufrufen der spirale-Funktion popMatrix(); } void mousePressed() { delay(0); // Delay in Millisekunden. Brauche ich nur wenn mouseMoved aktiv ist statt mousePressed redraw(); // draw() läuft durch } void keyPressed() { switch(key) { case 's': saveFrame("screenshot-##.png"); // Speichern eines Screenshots auf Druck von 's' println("Saved screenshot-##.png"); break; case 'r': background(0); redraw(); // Setzt Bildschirm zurück, in dem der Background wieder gesetzt wird println("Bild zurückgesetzt"); break; } } //Funktionsdefinitionen void drawLine() // Definition der einzelnen Elemente der Spirale { pushStyle(); // Es folgen die Definitionen für die Farbe der Linien. Ursprünglich auf random gesetzt. int clrR = 0; //(int)random(0,255); int clrG = 0; //(int)random(90,200); int clrB = 0; //(int)random(210,255); int clrA = 0; //(int)random(80,200); Die Linien sind momentan unsichtbar. stroke(clrR,clrG,clrB,clrA); // Die definierten Variabeln werden als Werte an stroke weitergegeben line(0,0,0,y); // Die Linie wird gezeichnet popStyle(); } void spirale() // Definition der Spiralfunktion { int winkel = (int)random(30,75); // Zufällige Winkeldefinition für die Spiralelemente int element = (int)random(30,40); // Anzahl der einzelnen Elemente (Linien), die für die Spirale verwendet werden (zufällig) pushMatrix(); for(int i = 0 ; i < element; i++) // i ist der Zähler, wieviel Mal die for-Schlaufe durchläuft. Anfangsstand ist 0 und bei jedem Durchlaufen wird 1 dazugezählt. { rotate(radians(winkel)); // Nachfolgende Elemente werden rotiert um den oben definierten Winkel drawLine(); // Die oben definierte funktion wird abgerufen translate(0,y); // ??? scale(.9); // nachfolgende Elemente werden mal 0.9 gerechnet d.h. verkleinert if(i>=0) // Wenn die Anzahl Durchläufe der for-Schlaufe 0 oder grösser ist, wird am Ende der Linie ein gelber Punkt / eine Ellipse gezeichnet { stroke(255,255,0); fill(255,255,0); ellipse(20,20,10,10); } if(i==2) { drawLine(); // Möglicher Ansatzpunkt für eine rekursive Funktion } } popMatrix(); }