Digital Bauhaus Vorkurs/Projekte/Form und Raum/Code11: Difference between revisions

From Medien Wiki
Line 7: Line 7:
   smooth();
   smooth();
   noStroke();
   noStroke();
   frameRate(25);
   //frameRate(25);
   colorMode(HSB,360,100,100,100);
   colorMode(HSB,360,100,100,100);
    
    
Line 36: Line 36:
void draw() {
void draw() {
   background(0);
   background(0);
    
   //male die Objekte nur wenn sie aktiviert bzw. sichtbar sind
   for (int i=0; i < objekt.length; i++) {
   for (int i=0; i < objekt.length; i++) {
     if (objekt[i].visible) {
     if (objekt[i].visible) {
Line 42: Line 42:
     }
     }
   }
   }
    
   //prüfe ob die Maus über dem Objekt ist
   for (int i=0; i < objekt.length; i++) {
   for (int i=0; i < objekt.length; i++) {
     if ((mouseX >= objekt[i].x-objekt[i].r) && (mouseX <= objekt[i].x+objekt[i].r) && (mouseY >= objekt[i].y-objekt[i].r) && (mouseY <= objekt[i].y+objekt[i].r)) {
     if ((mouseX >= objekt[i].x-objekt[i].r) && (mouseX <= objekt[i].x+objekt[i].r) && (mouseY >= objekt[i].y-objekt[i].r) && (mouseY <= objekt[i].y+objekt[i].r)) {
Line 52: Line 52:
}
}


void mouseDragged() {
void mouseDragged() { //verändere die Position des ausgewählten Objekts
   for (int i=objekt.length-1; i >= 0 ; i--) {
   for (int i=objekt.length-1; i >= 0 ; i--) {
     if (objekt[i].mouseOver) {
     if (objekt[i].mouseOver) {
Line 64: Line 64:
void keyPressed() {
void keyPressed() {
   int k = (int)key-48-1; //Zahlenverschiebung: '1' entspricht objekt[0]
   int k = (int)key-48-1; //Zahlenverschiebung: '1' entspricht objekt[0]
    
   //aktiviere bzw. mache das Objekt mit der jeweiligen Zahl sichtbar
   if ((k >= 0) && (k < objekt.length)) {
   if ((k >= 0) && (k < objekt.length)) {
     if (objekt[k].visible == false) {
     if (objekt[k].visible == false) {
       objekt[k].visible = true;
       objekt[k].visible = true;
     }else if (objekt[k].visible) {
     }else if (objekt[k].visible) { //oder wieder unsichtbar
       objekt[k].visible = false;
       objekt[k].visible = false;
     }
     }
   }
   }
    
   //verändere die Segmentzahl oder Farbe des ausgewählten Objekts
   if (key == CODED) {
   if (key == CODED) {
     for (int i=0; i < objekt.length; i++) {
     for (int i=0; i < objekt.length; i++) {
Line 99: Line 99:
     }
     }
   }
   }
    
   //verändere Radius, Alphawert und Gradzahl bzw. Richtung des Objekts
   for (int i=0; i < objekt.length; i++) {
   for (int i=0; i < objekt.length; i++) {
     if (objekt[i].mouseOver) {
     if (objekt[i].mouseOver) {
Line 134: Line 134:
     }
     }
   }
   }
   
  //erzeuge Zufallswerte bei allen Objekten 
   if (key == ENTER || key == RETURN) {
   if (key == ENTER || key == RETURN) {
     for (int i=0; i < objekt.length; i++) {
     for (int i=0; i < objekt.length; i++) {
Line 160: Line 160:
     }
     }
   }
   }
    
   //aktiviere die Bewegung aller Objekte
   for (int i=0; i < objekt.length; i++) {
   for (int i=0; i < objekt.length; i++) {
     if ((key == '0') && (objekt[i].move == false)) {
     if ((key == '0') && (objekt[i].move == false)) {
Line 170: Line 170:
}
}


void mouseMoved() {
void mouseMoved() { //bewege alle Objekte außer das ausgewählte frei im Raum
   for (int i=0; i < objekt.length; i++) {
   for (int i=0; i < objekt.length; i++) {
     if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) {
     if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) {
       objekt[i].x = objekt[i].x + objekt[i].sx;
       objekt[i].x = objekt[i].x + objekt[i].sx;
       objekt[i].y = objekt[i].y + objekt[i].sy;
       objekt[i].y = objekt[i].y + objekt[i].sy;
 
      //drehe das Objket
       objekt[i].g = objekt[i].g + 1;
       objekt[i].g = objekt[i].g + 1;
       if (objekt[i].g >= 360) {
       if (objekt[i].g >= 360) {
         objekt[i].g = 0;
         objekt[i].g = 0;
       }
       }
   
      //wechsel die Bewegungsrichtung, wenn das Objekt an den Rand stößt
       if (objekt[i].x >= width || objekt[i].x <= 0){
       if (objekt[i].x >= width || objekt[i].x <= 0){
         objekt[i].sx = -objekt[i].sx;
         objekt[i].sx = -objekt[i].sx;

Revision as of 19:47, 23 February 2011

Form und Raum

Segmente[] objekt = new Segmente[9];

void setup() {
  size(800, 800);
  smooth();
  noStroke();
  //frameRate(25);
  colorMode(HSB,360,100,100,100);
  
  for (int i=0; i < objekt.length; i++) {
    objekt[i] = new Segmente();
    
    objekt[i].x = random(100,width-100);
    objekt[i].y = random(100,height-100);
    
    objekt[i].seg = (int)random(6);
    objekt[i].r = 100;
    objekt[i].g = 90; // Richtung nach oben
    
    objekt[i].h = (int)random(360);
    objekt[i].s = 100;
    objekt[i].b = 100;
    objekt[i].a = 100;
    
    objekt[i].mouseOver = false;
    objekt[i].visible = false;
    objekt[i].move = false;
    
    objekt[i].sx = 5;
    objekt[i].sy = 5;
  }
}

void draw() {
  background(0);
  //male die Objekte nur wenn sie aktiviert bzw. sichtbar sind
  for (int i=0; i < objekt.length; i++) {
    if (objekt[i].visible) {
      objekt[i].maleSegmente();
    }
  }
  //prüfe ob die Maus über dem Objekt ist
  for (int i=0; i < objekt.length; i++) {
    if ((mouseX >= objekt[i].x-objekt[i].r) && (mouseX <= objekt[i].x+objekt[i].r) && (mouseY >= objekt[i].y-objekt[i].r) && (mouseY <= objekt[i].y+objekt[i].r)) {
      objekt[i].mouseOver = true;
    }else {
      objekt[i].mouseOver = false;
    }
  }
}

void mouseDragged() { //verändere die Position des ausgewählten Objekts
  for (int i=objekt.length-1; i >= 0 ; i--) {
    if (objekt[i].mouseOver) {
      objekt[i].x = mouseX;
      objekt[i].y = mouseY;
      break;
    }
  }
}

void keyPressed() {
  int k = (int)key-48-1; //Zahlenverschiebung: '1' entspricht objekt[0]
  //aktiviere bzw. mache das Objekt mit der jeweiligen Zahl sichtbar
  if ((k >= 0) && (k < objekt.length)) {
    if (objekt[k].visible == false) {
      objekt[k].visible = true;
    }else if (objekt[k].visible) { //oder wieder unsichtbar
      objekt[k].visible = false;
    }
  }
  //verändere die Segmentzahl oder Farbe des ausgewählten Objekts
  if (key == CODED) {
    for (int i=0; i < objekt.length; i++) {
      if (objekt[i].mouseOver) {
        if (keyCode == UP) {
          if (objekt[i].seg <= 100) {
            objekt[i].seg += 1;
          }
        }
        if (keyCode == DOWN) {
          if (objekt[i].seg >= 1) {
            objekt[i].seg -= 1;
          }
        } 
        if (keyCode == RIGHT) {
          if (objekt[i].h <= 360) {
            objekt[i].h += 1;
          }
        }
        if (keyCode == LEFT) {
          if (objekt[i].h >= 1) {
            objekt[i].h -= 1;
          }
        }
      }
    }
  }
  //verändere Radius, Alphawert und Gradzahl bzw. Richtung des Objekts
  for (int i=0; i < objekt.length; i++) {
    if (objekt[i].mouseOver) {
      if (key == '+') {
        if (objekt[i].r <= 200) {
          objekt[i].r += 1;
        }
      }
      if (key == '-') {
        if (objekt[i].r >= 50) {
          objekt[i].r -= 1;
        }
      } 
      if (key == ',') {
        if (objekt[i].a <= 100) {
          objekt[i].a += 1;
        }
      }
      if (key == '.') {
        if (objekt[i].a >= 10) {
          objekt[i].a -= 1;
        }
      }
      if (key == '/') {
        if (objekt[i].g <= 360) {
          objekt[i].g += 1;
        }
      }
      if (key == '*') {
        if (objekt[i].g >= 1) {
          objekt[i].g -= 1;
        }
      }
    }
  }
  //erzeuge Zufallswerte bei allen Objekten  
  if (key == ENTER || key == RETURN) {
    for (int i=0; i < objekt.length; i++) {
      objekt[i].x = random(width);
      objekt[i].y = random(height);
      
      switch((int)random(4)) {
        case 0:
          objekt[i].seg = (int)random(6);
          break;
        case 1:
          objekt[i].seg = (int)random(6,12); 
         break; 
        case 3:
          objekt[i].seg = (int)random(12,100);
          break;
        default:
          break;
      }
      objekt[i].r = (int)random(50,100);
      objekt[i].g = random(360);
      
      objekt[i].h = (int)random(360);
      objekt[i].a = (int)random(50,100);
    }
  }
  //aktiviere die Bewegung aller Objekte
  for (int i=0; i < objekt.length; i++) {
    if ((key == '0') && (objekt[i].move == false)) {
      objekt[i].move = true;
    }else if ((key == '0') && (objekt[i].move)) {
      objekt[i].move = false;
    }
  }
}

void mouseMoved() { //bewege alle Objekte außer das ausgewählte frei im Raum
  for (int i=0; i < objekt.length; i++) {
    if ((objekt[i].move == true) && (objekt[i].mouseOver == false)) {
      objekt[i].x = objekt[i].x + objekt[i].sx;
      objekt[i].y = objekt[i].y + objekt[i].sy;
      //drehe das Objket
      objekt[i].g = objekt[i].g + 1;
      if (objekt[i].g >= 360) {
        objekt[i].g = 0;
      }
      //wechsel die Bewegungsrichtung, wenn das Objekt an den Rand stößt
      if (objekt[i].x >= width || objekt[i].x <= 0){
        objekt[i].sx = -objekt[i].sx;
      }
      if (objekt[i].y >= height || objekt[i].y <= 0){
        objekt[i].sy = -objekt[i].sy;
      }
    }
  }
}

Segmente

class Segmente {
  
  float x; // X-Position
  float y; // Y-Position
  
  int seg; // Segmentzähler
  int r; // Radius
  float g; // Richtung bzw. Grad
  
  boolean mouseOver; //Maus über dem Objekt
  boolean visible; //Objekt sichtbar
  boolean move; //Objekt bewegt sich
  
  int h,s,b,a; // Farbe HSB und Alpha
  
  float sx,sy; //Geschwindigeit
  
  Segmente() {
    println("Segmente erstellt!");
  }
  
  void maleSegmente() {
    fill(h,s,b,a);
    maleSegmente(seg,r,g,x,y);
  }
  
  void maleSegmente(int seg,int r,float g,float x,float y) {
    float segmentzahl = 3 + (float)seg;
    float angleStep = 360/segmentzahl;
    
    beginShape();
    vertex(x, y); 
    for (float angle=0; angle<=360; angle+=angleStep) {
      float vx = x + cos(radians(angle-g))*r;
      float vy = y + sin(radians(angle-g))*r;
      vertex(vx, vy);
    }
    vertex(x + cos(radians(360-g))*r, y + sin(radians(360-g))*r);
    endShape();
  }
}