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.

Lesson 10 – Permutations

25. November 2010

A simple rotation permutation with several circles touching each other at their tangents and rotating (through the given 2. parameter). There are 3 different versions of the parameter: Here the code:
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);
  noStroke();

  int     permutationsIndex = 0;

  pushMatrix();
    translate(rand,rand);
    for(int y=0; y<anzahl;y++)
    {
      pushMatrix();
        for(int x=0; x<anzahl;x++)
        { 
          //2. parameter: rotation in radiant (3 possible versions)
          /*-----------------------------------------------------*/
          //float param2 = 2*(x+y)*PI/(anzahl*1.0);
          //float param2 = 2*(x)*PI/(anzahl*1.0);
          float param2 = 2*(y)*PI/(anzahl*1.0);
          drawPermutationObj(permutationsIndexList[permutationsIndex], param2);
          print(str(permutationsIndexList[permutationsIndex]) + "\t");

          ++permutationsIndex;

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

}

void drawPermutationObj(int type, float angle)
{
  float d = 75;  //diameter
  float r = d/2;  //radius
  pushStyle();
  switch(type)
  {
  case 0:
    fill(255);
    stroke(0);  //just to make a border for the very first one..
    ellipse(0,0,d,d);
    fill(0);
    noStroke();  //..then deactivate it
    //calculate the radius at each angle using cosinus & sinus
    ellipse(((r-5) * cos(angle)), ((r-5) * sin(angle)),10,10);    
    ellipse(((r-5) * cos(angle-PI)), ((r-5) * sin(angle-PI)),10,10);
    fill(255);
    ellipse(((r-7) * cos(angle-PI)), ((r-7) * sin(angle-PI)),6,6);
    break;

  case 1:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-10) * cos(angle)), ((r-10) * sin(angle)),20,20);
    ellipse(((r-35) * cos(angle-PI)), ((r-35) * sin(angle-PI)),70,70);
     
    fill(0);
    ellipse(((r-10) * cos(angle-PI)), ((r-10) * sin(angle-PI)),20,20);    
    ellipse(((r-8) * cos(angle)), ((r-8) * sin(angle)),16,16);
    fill(255);
    ellipse(((r-14) * cos(angle-PI)), ((r-14) * sin(angle-PI)),14,14);    

    break;

  case 2:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-15) * cos(angle)), ((r-15) * sin(angle)),30,30);
    ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),60,60);
    fill(0);
    ellipse(((r-15) * cos(angle-PI)), ((r-15) * sin(angle-PI)),30,30);
    ellipse(((r-12) * cos(angle)), ((r-12) * sin(angle)),24,24); 
    fill(255);
    ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),20,20);    
    break;

  case 3:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-20) * cos(angle)), ((r-20) * sin(angle)),40,40);
    ellipse(((r-25) * cos(angle-PI)), ((r-25) * sin(angle-PI)),50,50);
    fill(0);
    ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),40,40);
    ellipse(((r-17) * cos(angle)), ((r-17) * sin(angle)),34,34);
    fill(255);
    ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),30,30);    
    break;  

  case 4:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-25) * cos(angle)), ((r-25) * sin(angle)),50,50);
    ellipse(((r-20) * cos(angle-PI)), ((r-20) * sin(angle-PI)),40,40);
    fill(0);
    ellipse(((r-25) * cos(angle-PI)), ((r-25) * sin(angle-PI)),50,50);
    ellipse(((r-21) * cos(angle)), ((r-21) * sin(angle)),42,42);
    fill(255);
    ellipse(((r-38) * cos(angle-PI)), ((r-38) * sin(angle-PI)),38,38);   
    break;

  case 5:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-30) * cos(angle)), ((r-30) * sin(angle)),60,60);
    ellipse(((r-15) * cos(angle-PI)), ((r-15) * sin(angle-PI)),30,30);
    fill(0);
    ellipse(((r-30) * cos(angle-PI)), ((r-30) * sin(angle-PI)),60,60);
    ellipse(((r-20) * cos(angle)), ((r-20) * sin(angle)),40,40);
    fill(255);    
     ellipse(((r-48) * cos(angle-PI)), ((r-48) * sin(angle-PI)),48,48);
    break;

  case 6:
    fill(0);
    ellipse(0,0,d,d);
    fill(255);
    ellipse(((r-35) * cos(angle)), ((r-35) * sin(angle)),70,70);
    ellipse(((r-10) * cos(angle-PI)), ((r-10) * sin(angle-PI)),20,20);
    fill(0);
    ellipse(((r-35) * cos(angle-PI)), ((r-35) * sin(angle-PI)),70,70);
    ellipse(((r-19) * cos(angle)), ((r-19) * sin(angle)),38,38);
    fill(255);    
    ellipse(((r-56) * cos(angle-PI)), ((r-56) * sin(angle-PI)),56,56);    
    break;

  default:
    break;
  }
  popStyle();
}

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