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 12c: Erweiterte Permutationen

8. Dezember 2010

Ich habe mich nochmals daran gemacht und versucht die beiden Varianten 12a und 12b zu vereinen. Hierzu habe ich als erstes die Permutation ganz normal dargestellt. Anschliessend habe ich begonnen mit Hilfe eines Vektors die verschiedenen Zeichen festzulegen. Je näher die Zeichen beim Cursor sind, desto heller sind sie. Umso weiter sie entfernt liegen, desto dunkler sind sie. Als ich dies so verwirklichen konnte fügte ich noch einen Scale hinzu. Dieser bewirkt, dass die Zeichen, welche näher beim Cursor sind kleiner dargestellt werden, als diese, die weiter entfernt liegen. Zu guter letzt habe ich noch eine Rotation hinzugefügt. Diese Rotation richtet die einzelnen Zeichen auf meine Mausposition aus. Hier mein Resultat: In einem weiteren Schritt werde ich das Zeichen als Klasse hinterlegen sodass ich das Zeichen nur noch durch Parameter verändern kann.

int     anzahl = 7;
int     rand = 50;
float   xStep;
float   yStep;
int[]   permutationsIndexList = {0, 1, 2, 3, 4, 5, 6,
                                 1, 2, 3, 4, 5, 6, 5,
                                 2, 3, 4, 5, 6, 5, 4,
                                 3, 4, 5, 6, 5, 4, 3,
                                 4, 5, 6, 5, 4, 3, 2,
                                 5, 6, 5, 4, 3, 2, 1,
                                 6, 5, 4, 3, 2, 1, 0};

void setup()
{
  size(600, 600);
  smooth();

  xStep = (width - 2 * rand) / (float)(anzahl-1);
  yStep = (height - 2 * rand) / (float)(anzahl-1);

  //noLoop();
}

void draw()
{
  background(255);

  int     permutationsIndex = 0;

  pushMatrix();
    translate(rand,rand);
    for(int y=0; y<anzahl;y++)
    {
      pushMatrix();
        for(int x=0; x<anzahl;x++)
        {
          int objType = permutationsIndexList[permutationsIndex];
          
          float objScale = 1;
          
          float objStroke = 1;
          
          PVector posObject = new PVector(x, y, 0);
          
          PVector posMouse = new PVector(map(mouseX, 0, width, 0, 6), map(mouseY, 0, height, 0, 6));
          
          PVector _mousePos = new PVector();
          _mousePos.set(mouseX,mouseY,0);
          
          
          PVector _position = new PVector(); // vector set with xy of current element
          _position.set(x*xStep,y*yStep,0);
          
          // Winkel der einzelnen Zeichen für die Rotation
          float angleMouse = atan2(_mousePos.y - _position.y, _mousePos.x - _position.x);
          
          //Distanz vom Objekt zur Maus
          float distance = posObject.dist(posMouse);
          
          // Wert für den Typ des Zeichens
          objType = (int)map(distance, 0, sqrt(72), 0, 6);
          
          // Wert für den Scale
          objScale = map(distance,0, sqrt(72), 0.5, 1.5);
          
          //Wert um die Strichstärke zu berechnen
          objStroke = map(distance,0, sqrt(72), 0, 50);
          
          drawPermutationObj(objType,objScale,objStroke,angleMouse);
          //print(str(permutationsIndexList[permutationsIndex]) + "\t");

          ++permutationsIndex;

          translate(xStep,0.0f);
        }
        println();
      popMatrix();
      translate(0.0f,yStep);
    }
  popMatrix();

}

void drawPermutationObj(int type,float objScale, float objStroke, float angleMouse)
{
  pushStyle();
  pushMatrix();
  scale(objScale);
  rotate(angleMouse);
  switch(type)
  {
case 0:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-35,0,17,17);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(20/2),0,20,20);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(25/2),0,25,25);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(10);
    noFill();
    ellipse(2,0,28,28);
    popStyle();
    popMatrix();
    
    break;

  case 1:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-33,0,19,19);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(3);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(25.5/2),0,25.5,25.5);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(32.5/2),0,32.5,32.5);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(14);
    noFill();
    ellipse(4,0,28,28);
    popStyle();
    popMatrix();
    break;

  case 2:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-30,0,23,23);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(4);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(31/2),0,31,31);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(37/2),0,37,37);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(12);
    noFill();
    ellipse(6,0,28,28);
    popStyle();
    popMatrix();
    break;

  case 3:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-29,0,25.5,25.5);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(5);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(35/2),0,35,35);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(41/2),0,41,41);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(10);
    noFill();
    ellipse(8,0,28,28);
    popStyle();
    popMatrix();
    
    break;  

  case 4:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-28,0,28,28);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(6);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(38/2),0,38,38);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(45/2),0,45,45);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(8);
    noFill();
    ellipse(10,0,28,28);
    popStyle();
    popMatrix();
    break;

  case 5:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-26,0,31,31);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(7);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(40/2),0,39,39);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(49/2),0,47,47);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(6);
    noFill();
    ellipse(12,0,28,28);
    popStyle();
    popMatrix();
    break;

  case 6:
    pushMatrix();
    pushStyle(); //Aussenlinie
    stroke(0);
    strokeWeight(2);
    noFill();
    ellipse(0,0,75,75);
    popStyle();
    
    pushStyle(); // Weisser Unterbruch in Aussenlinie
    noStroke();
    fill(255);
    ellipse(-24,0,34,34);
    popStyle();
    
    pushStyle(); // innere Kreislinie
    stroke(0);
    strokeWeight(8);
    noFill();
    ellipse(0,0,60,60);
    popStyle();
    
    pushStyle(); // linker schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(-30+(44/2),0,44,44);
    popStyle();
    
    pushStyle(); // rechter schwarzer Kreis
    noStroke();
    fill(0);
    ellipse(30-(52/2),0,52,52);
    popStyle();
    
    pushStyle(); // weisse innere Kreislinie
    stroke(255);
    strokeWeight(4);
    noFill();
    ellipse(14,0,28,28);
    popStyle();
    popMatrix();
    break;

  default:
    break;
  }
  popMatrix();
  popStyle();
}

void keyPressed()
{
  switch(key)
  {
  case ' ':
    save("permutation.jpg");
    break;
  }
}