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.

Übung 10.3: alles dreht und bewegt sich

2. Dezember 2010

Als Grundlage für die neue Aufgabe, habe ich meine ursprüngliche Permutation benutzt und weiterentwicklet. Als erstes habe ich versucht die Permutation zu animieren, indem ich die einzelnen Zeichen automatisch um die eigene Achse drehen liess. Erster Versuch: fehlgeschlagen. 2. Versuch: die Zeichen drehen zu lassen, indem man mit der Maus darüber fährt. Geglückt! Gut, nächster Schritt. Die Zeichen sollten sich vergrössern bzw. verkleinern, wenn man ebenfalls mit der Maus darüber fährt. Ja, funktioniert gleichfalls. Und nun der letzte Teil: Drehung und Skalierung in einem, plus: Skalierung abhängig machen von der Mausposition. Das heisst: je weiter weg das Zeichen von Maus-Cursor ist, desto grösser ist es. Also falls sich der Cursor in der Mitte der Zeichnung befindet, sind die Zeichen am Rand am grössten, ist der Cursor oben links in der Ecke, ist das Zeichen diagonal in der rechten unteren Ecke am grössten. Und tadaa, schon hat man seine Permutation animiert. 🙂
 


int     anzahl = 7;
int     rand = 50;
float   xStep;
float   yStep;
float   drehen; 
float   zoom;
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++)
        {
          drawPermutationObj(permutationsIndexList[permutationsIndex], x, y);
          print(str(permutationsIndexList[permutationsIndex]) + "\t");

          ++permutationsIndex;

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

}

void drawPermutationObj(int type, int x, int y)
{
  pushMatrix();
  drehen = map(mouseX+mouseY, 0, width+height, 0, TWO_PI*2); 
  //zoom = map(mouseX+mouseY, 0, width+height, 0, 1.1); 
  
  PVector PosObject = new PVector(x, y, 0); 
  PVector PosMouse = new PVector(map(mouseX, 0, width, 0, 6), map(mouseY, 0, height, 0, 6)); 
  
  float distance = PosObject.dist(PosMouse);
  
  float zoom = map(distance, 0, sqrt(72), 0, 1.5); 
  
  
  pushStyle();
  switch(type)
  {
  case 0:
    rotate(drehen);  
    scale(zoom);
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255); 
    ellipse(0,0,72,72);
    fill(0); 
    ellipse(-3,0,65,65); 
    fill(255); 
    ellipse(-14,0,40,40);
    fill(0); 
    ellipse(-17,0,32,32);
    fill(255); 
    stroke(255);
    ellipse(-11,0,20,20);
    break;

  case 1:
    rotate(drehen);  
    scale(zoom);
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255);
    ellipse(2,0,69,69);
    fill(0); 
    ellipse(-5,0,58,58); 
    fill(255); 
    ellipse(-11,0,45,45);
    fill(0); 
    ellipse(-13,0,38,38);
    fill(255); 
    stroke(255);
    ellipse(-5,0,26,26);
    break;

  case 2:
    rotate(drehen);  
    scale(zoom);
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255);
    ellipse(4,0,65,65);
    fill(0); 
    ellipse(-5,0,56,56); 
    fill(255); 
    ellipse(-8,0,50,50);
    fill(0); 
    ellipse(-11,0,41,41);
    fill(255); 
    stroke(255);
    ellipse(-4,0,30,30);
    break;

  case 3:
    rotate(drehen); 
    scale(zoom); 
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255);
    ellipse(5,0,62,62);
    fill(0); 
    ellipse(-4,0,56,56); 
    fill(255); 
    ellipse(-6,0,55,55);
    fill(0); 
    ellipse(-9,0,46,46);
    fill(255); 
    stroke(255);
    ellipse(-3,0,38,38);
    break;  

  case 4:
    rotate(drehen);
    scale(zoom);  
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255);
    ellipse(5,0,62,62);
    fill(255); 
    stroke(255);
    ellipse(-4,0,57,57);
    fill(0); 
    ellipse(-7,0,52,52);
    fill(255); 
    stroke(255);
    ellipse(-2,0,43,43);
    break;

  case 5:
    rotate(drehen); 
    scale(zoom); 
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255);
    ellipse(5,0,62,62);
    fill(255); 
    stroke(255);
    ellipse(-4,0,61,61);
    fill(0); 
    ellipse(-6,0,58,58);
    fill(255); 
    stroke(255);
    ellipse(-1,0,51,51);
    break;

  case 6:
    rotate(drehen); 
    scale(zoom); 
    stroke(0);
    fill(0);
    ellipse(0,0,75,75);
    fill(255); 
    stroke(255);
    ellipse(0,0,66,66);
    fill(0); 
    ellipse(-4,0,60,60);
    fill(255); 
    stroke(255);
    ellipse(0,0,58,58);
    break;

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

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