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 – Spiralen

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.

Zeichnen mit Spiralen per mouseMoved Funktion

Zeichnen mit Spiralen und mouseMoved

Spiralen mit Linien und schwarzen Punkten am Ende jedes Elements

Hier habe ich versehentlich die Punkte zu gross und leicht verschoben definiert.

Spiralen grün/blau

Sternenmuster

Spiralen mit grünen Punkten

"Unfall" mit verschobenen weissen Ellipsen

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();

}