Toolbox Interactiondesign


Strukturen Verläufe

Strukturen Verläufe – Arina Fix

Arina Fix, Generative Gestaltung Goes Analog bei Prof. Dr. Christine Goutrié

Experimente

Immer wichtig zu bedenken ist, dass das Digitale nicht 1:1 auf das Analoge übertragen werden kann. Wie kann ich z.B. einen Farbverlauf, den ich am Bildschirm einfach darstellen kann, ausfräsen? Hier gibt es zwei unterschiedliche Möglichkeiten. Entweder man bereitet Strukturen und Muster so auf, dass durch zum Beispiel Größenänderungen eine Verlaufswahrnehmung entsteht oder ich arbeite direkt mit Material und Fräse und versuche den Verlauf durch Abtragen zu erzielen.

Im unteren Bespiel wird dies gut deutlich. Durch die Größenunterschiede der Kreise nehmen wir mit dem Auge einen Verlauf wahr. Diesen Verlauf kann ich nun ins Analoge übertragen indem ich (wie in der zweiten Bildabfolge sichtbar) die Konturen der Kreise ausfräse oder die weißen Kreise auf die Tiefe der Bohrung übertrage. Je größer also der Kreis, desto tiefer geht der Bohrer ins Material.

 

Programmcode

// Verlauf mit Maus
// Arina Fix

int anzX= 20;
int anzY= 20;
float breiteX;
float breiteY;


void setup() {

  size(600, 600);
  background(0);
  stroke(255);
  //noStroke();
  smooth();
}

void draw() {
  
  pdfExport(true);
  
  int abst= width/anzX;
  background(0);
  fill(255);
  for (int i=0; i<=width; i+=abst) {
    for (int j=0; j<=width; j+= abst) {
      breiteX=map(dist(mouseX, mouseY, i, j), 0, 400, 1, 50);
      breiteY=map(dist(mouseX, mouseY, i, j), 0, 400, 0, 50);
      ellipse(i, j, breiteX, breiteY);
    }
  }
  pdfExport(true);
}

Um den Verlauf in Abhängigkeit von der Mausposition zu bestimmen wird hier die map()-Funktion genutzt. Der Abstand des aktuell angesprochenen Kreises zur Position der Maus wird verglichen und dessen Göße damit bestimmt.

WEITERE  EXPERIMENTE

EXPERIMENTE MIT METALL

Durch Rotieren und Wiederholen von einfachen geometrischen Formen, in diesem Fall einem Quadrat, können sehr interessante und ästhetischen Strukturen entstehen. Die enstehen Muster wurden anschließend in Metall gekratzt.

PROGRAMMCODE

// Verlauf Linie
// Arina Fix

int anzX= 20;
int anzY= 10;
float anzX1= 40;
int rand = 10;
float sizeX=20;
float sizeY=20;
int r=1;


PrintWriter output;
int fraesBreite = 100;
int zTiefe = 0;


void setup() {

  size(420, 420);
  background(0);
  stroke(255);
  //noStroke();
  smooth();
  
  output = createWriter("verlauf_lines.ngc");
  output.println("%");
  output.println("G 54");
}



void draw() {
  pdfExport(true);
  
  rectMode(CENTER);
  int abst= (width-2*rand)/anzX;
  float abst1= (height-2*rand)/anzY;
  
  background(0);
  noFill();

  for (int i=rand; i<=width; i+=abst) {
     float sizeX1=sizeX;
    for (float j=rand; j<=height; j+= abst) {
      if(sizeX1==0){
          sizeX1=-1;
      }
      line(i, j, i+sizeX1, j-sizeX1);
          XY_G0_Code(i, j);
          output.println("G1 Z"+ zTiefe +" F300");
          XY_G1_Code(i+sizeX1, j-sizeX1);
          output.println("G0 Z3");
      sizeX1-=1;
    }
 //sizeX=random(0,15);
 if(sizeX1>-31 && r==1){
      sizeX= sizeX-1;
      if(sizeX1==20){
        r=0;
      }
 }
noLoop();
pdfExport(true);
}
}

void XY_G0_Code (float X, float Y) {

  X=map(X, 0, width, 0, fraesBreite);
  Y=map(Y, 0, height, 0, fraesBreite);

  output.println("G0 X"+ X +" Y"+Y);
}

void XY_G1_Code(float X, float Y) {
  //mappt die x,y werte zwischen 0 und fraesBreite
  X=map(X, 0, width, 0, fraesBreite);
  Y=map(Y, 0, width, 0, fraesBreite);

  //schreibt X und Y in den output
  output.println("G1 X"+ X +" Y"+Y);
}


void mousePressed(){
     output.println("M 02");
     output.println("%");
     output.flush();
     output.close();
     exit();
   
}
// Rotation Rechteck
// Arina Fix

int anzX = 4;
int anzY = 4;
int anzRectS= 5;
float fraesBreite = 100;
PrintWriter output;
float zTiefe = -0.1;
 
void setup(){

  size(600,600,P3D);
  background(0);
  stroke(255);
  noFill();
  //g-code
  output = createWriter("rotation_rect.ngc");
  output.println("%");
  output.println("G 54");

}

void draw(){
  
  pdfExport(true);
  
  int sizeRectX = 600/anzX;
  int sizeRectY = 600/anzY;
  int sizeRectXS = sizeRectX/2;
  int sizeRectYS = sizeRectY/2;
  
 
 // erster Stern links oben
 pushMatrix();
 for (int z=0; z <= anzRectS; z++) {       
       rotate(2*PI/anzRectS);
       //rect(0,0,sizeRectXS,sizeRectYS);
       line(0,0,sizeRectXS,0);
           XY_G0_Code((screenX(0,0)), (screenY(0,0)));
           output.println("G1 Z"+ zTiefe +" F300");
           XY_G1_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
           output.println("G0 Z3");
       line(sizeRectXS,0,sizeRectXS,sizeRectYS);
           XY_G0_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
           output.println("G1 Z"+ zTiefe +" F300");
           XY_G1_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
           output.println("G0 Z3");
       line(sizeRectXS, sizeRectYS, 0, sizeRectYS);
           XY_G0_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
           output.println("G1 Z"+ zTiefe +" F300");
           XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
           output.println("G0 Z3");
       line(0,0,0,sizeRectYS);
           XY_G0_Code((screenX(0,0)), (screenY(0,0)));
           output.println("G1 Z"+ zTiefe +" F300");
           XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
           output.println("G0 Z3");
 }
 popMatrix();   

 
 // erste Spalte ab dem 2.Zeile
 pushMatrix();

     for(int j =0;j<anzY;j++){
         translate(0, sizeRectY);
         for (int z=1; z <= anzRectS; z++) {       
              rotate(2*PI/anzRectS);
              //rect(0,0,sizeRectXS,sizeRectYS);
              line(0,0,sizeRectXS,0);
                  XY_G0_Code((screenX(0,0)), (screenY(0,0)));
                  output.println("G1 Z"+ zTiefe +" F300");
                  XY_G1_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
                  output.println("G0 Z3");
              line(sizeRectXS,0,sizeRectXS,sizeRectYS);
                  XY_G0_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
                  output.println("G1 Z"+ zTiefe +" F300");
                  XY_G1_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
                  output.println("G0 Z3");
              line(sizeRectXS, sizeRectYS, 0, sizeRectYS);
                  XY_G0_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
                  output.println("G1 Z"+ zTiefe +" F300");
                  XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
                  output.println("G0 Z3");
              line(0,0,0,sizeRectYS);
                  XY_G0_Code((screenX(0,0)), (screenY(0,0)));
                  output.println("G1 Z"+ zTiefe +" F300");
                  XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
                  output.println("G0 Z3");
         }
        
     }
  
  popMatrix();
  
  // erster Stern der 2.Reihe
  for(int k=0; k<anzX; k++){
      translate(sizeRectX,0);
      for (int z=1; z <= anzRectS; z++) {
          rotate(2*PI/anzRectS);
          //rect(0,0,sizeRectXS,sizeRectYS);
          line(0,0,sizeRectXS,0);
               XY_G0_Code((screenX(0,0)), (screenY(0,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
               output.println("G0 Z3");
          line(sizeRectXS,0,sizeRectXS,sizeRectYS);
               XY_G0_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
               output.println("G0 Z3");
          line(sizeRectXS, sizeRectYS,0, sizeRectYS);
               XY_G0_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
               output.println("G0 Z3");
          line(0,0,0,sizeRectYS);
               XY_G0_Code((screenX(0,0)), (screenY(0,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
               output.println("G0 Z3");
      }


  pushMatrix();
  
  // restliche Sterne der Reihe am zweiten Stern
  for(int j =0;j<anzY;j++){
      translate(0, sizeRectY);
      for (int z=1; z <= anzRectS; z++) {       
          rotate(2*PI/anzRectS);
         // rect(0,0,sizeRectXS,sizeRectYS);
         line(0,0,sizeRectXS,0);
               XY_G0_Code((screenX(0,0)), (screenY(0,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
               output.println("G0 Z3");
         line(sizeRectXS,0,sizeRectXS,sizeRectYS);
               XY_G0_Code((screenX(sizeRectXS,0)), (screenY(sizeRectXS,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
               output.println("G0 Z3");
         line(sizeRectXS, sizeRectYS, 0, sizeRectYS);
               XY_G0_Code((screenX(sizeRectXS,sizeRectYS)), (screenY(sizeRectXS,sizeRectYS)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
               output.println("G0 Z3");
         line(0,0,0,sizeRectYS);
               XY_G0_Code((screenX(0,0)), (screenY(0,0)));
               output.println("G1 Z"+ zTiefe +" F300");
               XY_G1_Code((screenX(0,sizeRectYS)), (screenY(0,sizeRectYS)));
               output.println("G0 Z3");
      }
  }
 popMatrix();
   
 }
    noLoop();
    pdfExport(true);
}   



float runden(float zahl) {
  zahl= zahl*1000.0;
  zahl=round(zahl);
  zahl=zahl/1000.0;
  return zahl;
}



void XY_G1_Code(float X, float Y) {
  //mappt die x,y werte zwischen 0 und fraesBreite
  X=map(X, 0, width, 0, fraesBreite);
  Y=map(Y, 0, width, 0, fraesBreite);

  // rundet auf 0.001
  X=runden(X);
  Y=runden(Y);

  //schreibt X und Y in den output
  output.println("G1 X"+ X +" Y"+Y);
}

void XY_G0_Code(float X, float Y) {
  //mappt die x,y werte zwischen 0 und fraesBreite
  X=map(X, 0, width, 0, fraesBreite);
  Y=map(Y, 0, width, 0, fraesBreite);

  // rundet auf 0.001
  X=runden(X);
  Y=runden(Y);

  //schreibt X und Y in den output
  output.println("G0 X"+ X +" Y"+Y);
}


void Z_GCode(float Z) {

  Z=runden(Z);
  output.println("G1 Z"+Z);
}




   void mousePressed(){
     output.println("M 02");
     output.println("%");
     output.flush();
     output.close();
     exit();
   
   }
   
   
   
21.02.2014 | Arina Fix |