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

2. Dezember 2010

In dieser Aufgabe ging es darum, die Permutation durch eine Mausfunktion zu erweitern. Dies meint, dass wir mit der Maus unsere Permutation verändern können. Ich habe meinen Code nun so verändert: Mausposition in X- Richtung = Vergrösserung und Verkleinerung der geraden Zeichen (0,2,4,6) Mausposition in Y- Richtung = Vergrösserung und Verkleinerung der ungeraden Zeichen (1,3,5) Mausklick LINKS = Drehung der geraden Zeichen wird schneller Mausklick RECHTS = Drehung der geraden Zeichen wird gestoppt Bild 1: Bild 2: Bild 3: Und hier der geänderte Code:

int     anzahl = 7;
int     rand = 50;
float   mauswert = 0;
float   mausscale;
float   mausscaleh;
boolean transformwert = true;
float drehung;
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;
  
  if (mouseX > 300) {  // festlegen der Mausposition ob es kleiner oder grösser wird (X-Richtung)
             mausscale +=0.01;
          }else{ 
             mausscale -=0.01;
          }
    if (mouseY > 300) {  // festlegen der Mausposition ob es kleiner oder grösser wird (Y-Richtung)
             mausscaleh +=0.01;
          }else{ 
             mausscaleh -=0.01;
          }
  if (mausscaleh>1.3){   //Scalebeschränkung in der vertikalen Richtung
      mausscaleh = 1.3;
  }
  
  if (mausscaleh<0.2){  //Scalebeschränkung in der vertikalen Richtung
      mausscaleh = 0.2;
  }  
 
  if (mausscale>1.3){  //Scalebeschränkung in der horizontalen Richtung
      mausscale = 1.3;
  }
  
  if (mausscale<0.2){  //Scalebeschränkung in der horizontalen Richtung
      mausscale = 0.2;
  }  
           println(mausscale);
  
  pushMatrix();
    translate(rand,rand);
    
    for(int y=0; y<anzahl;y++)
    {
      pushMatrix();
        for(int x=0; x<anzahl;x++)
        {
          if(transformwert){
            drehung +=0.0001;
          } else {
            drehung -=0.0001;
          }
                
          drawPermutationObj(permutationsIndexList[permutationsIndex],drehung,mausscale,mausscaleh);
          //print(str(permutationsIndexList[permutationsIndex]) + "\t");

          ++permutationsIndex;

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

}

void drawPermutationObj(int type, float c, float massstabv, float massstabh)
{

  pushStyle();
  switch(type)
  {
  case 0:
    pushMatrix();
    scale(massstabv);
    rotate(PI*c*mauswert);
    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();
    scale(massstabh);
    rotate(c*4);
    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();
    scale(massstabv);
    rotate(PI*c*mauswert);
    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();
    scale(massstabh);
    rotate(c*4);
    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();
    scale(massstabv);
    rotate(PI*c*mauswert);
    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();
    scale(massstabh);
    rotate(c*6);
    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();
    scale(massstabv);
    rotate(PI*c*mauswert);
    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;
  }
  popStyle();
}

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

void mousePressed() 
{
  if (mousePressed && (mouseButton == LEFT)){ // wenn linke Maustaste gedrückt wird, dann mauswert plus 0.5
  mauswert = mauswert + 1;
  }
  else if (mousePressed && (mouseButton == RIGHT)) { // wenn rechte Maustaste gedrückt wird, dann stoppt es
  mauswert = 0;
  }

  if (mauswert > 50) {
    mauswert = 0;
  }
  println(mauswert);
}

/*void mouseMoved() {
  mausscale = mausscale + 0.1;
  if (mauswert > 1) {
    mauswert = 0;
  }
  println(mausscale);
}*/