Maximiliano Olea: Fases de vuelo

De Casiopea
Maximiliano Olea: Fases de vuelo. Tarea 7


TítuloMaximiliano Olea: Fases de vuelo. Tarea 7
Palabras Clavetarea 7
AsignaturaTaller Inicial 1ª y 2ª Etapa,
Del CursoImagen Escrita 2012,
CarrerasArquitectura
Alumno(s)Maximiliano Olea
ProfesorHerbert Spencer

/* La idea de esta tarea es mostrar las diferentes "fases de vuelo"
 de los insectos a través del movimiento de sus "alas", que son formadas por
 a lo más 3 vértices. Además las fases se pueden ir acercando o alejando.
 Plantilla del trabajo basado en el ejemplo de profesor H. Spencer
 */
Insect[] ins; 
float margin = 70;

void setup() {

  size(700, 700);
  int ynum = 11;
  int xnum = 9;
  ins = new Insect[ynum * xnum];
  float ysp = (height - (2 * margin)) / ((float)ynum - 1);
  float xsp = (width - (2 * margin)) / ((float)xnum - 1);
  int c = 0; // counter
  for (float y = margin; y <= height - margin; y+= ysp) {
    for (float x = margin; x <= width - margin; x += xsp) {
      ins[c] = new Insect(x, y);
      c++;
    }
  } 
  smooth();
}

void draw() {

  background(#62B4FA);
  for (int i = 0; i < ins.length; i++) {
    ins[i].render();
  }
}

class Insect {

  float x, y;
  float[][] v; // vertices
  int vn; // número aleatorio de vértices
  float tam; // tamaño
  float w, h; // width, height
  Insect(float x, float y) {
    this.x = x;
    this.y = y;
    vn = round(random(1, 3));/* 
     aquí el número de vértices se reduce a hacer aparecer 
     las "alas" de los insectos */
    v = new float[vn][21];
    tam = 42;
    init();
  }
  void init() {
    w = tam/2;
    h = tam;
    for (int i = 0; i < vn; i++) {
      v[i][0] = random(w);
      v[i][1] = random(-h/2, h/2);
    }
  }
  void trace() {
    noFill();
    stroke(0);
    strokeWeight(.40);
    beginShape();
    vertex(v[0][0], v[0][1]);
    for (int i = 0; i < vn; i++) {
      curveVertex(v[i][0], v[i][1]);
    }
    vertex(v[vn-1][0], v[vn-1][1]);
    endShape();
  }
  void render() {
    pushMatrix();
    {
      translate(x, y);
      trace();
      scale(-1, 1);
      trace();
    }
    popMatrix();
  }
}

void keyPressed() { // al presionar se muestras las "distintas fases de vuelo"

  if (key == ' ') {
    for (int i = 0; i < ins.length; i++) {
      ins[i].init();
    }
  }
  if (key == 'c') {  // los insectos se alejan volando
    for (int i = 0; i < ins.length; i++) {
      ins[i].tam++;
      ins[i].init();
    }
  }
  if (key == 'l') { // los insectos se acercan volando hacia el espectado
    for (int i = 0; i < ins.length; i++) {
      ins[i].tam--;
      ins[i].init();
    }
  }
}