giovedì 21 gennaio 2010

Esagonia


Genera un esagono di esagoni e li colora a seconda dell'input video proveniente dalla webcam.

Sia la lunghezza del lato dei singoli esagoni (l) che il numero degli esagoni che compongono il lato del grande pattern esagonale (n) sono  facilmente modificabili.

Questa accanto è un'immagine processata con questo algoritmo, ritrae un temibile draghetto di plastica. L'immagine è scalata del 50%, ma la dimensione originale può essere visualizzata cliccando sopra l'immagine stessa.










Questo è lo stesso input non processato, notate le fauci.




















Infine ecco il codice:
import processing.video.*;
Capture videoin;


void setup()
{
  size(600, 633);
  colorMode(RGB, 255);
  background(0, 0, 0);
  stroke(0, 0, 0);
  strokeWeight(2);
  smooth();
//  println(Capture.list());
  videoin = new Capture(this, width, height, "nome_della_tua_webcam", 30);
}


void captureEvent(Capture videoin)
{
  videoin.read();
}


void draw()
{
  pattern(32, 6);
}


void esagono(int x, int y, int l)
{
  beginShape();
  vertex(x + (l / 2), y);
  vertex(x + (l / 2) + l, y);
  vertex(x + (l * 2), y + sqrt(sq(l) - sq(l / 2)));
  vertex(x + (l / 2) + l, y + (sqrt(sq(l) - sq(l / 2)) * 2));
  vertex(x + (l / 2), y + (sqrt(sq(l) - sq(l / 2)) * 2));
  vertex(x, y + sqrt(sq(l) - sq(l / 2)));
  vertex(x + (l / 2), y);
  endShape();
}


void pattern(int n, int l)
{
  int x = (width / 2) - l; int y = 0; int b = int(sin(radians(60)) * l);
  for (int e = 0; e < n; e++)  
  {
    int ix = x; int iy = y;
    for (int i = 0; i < (n + e); i++)
    {
      color colore = videoin.get((ix + l), (iy + b));
      fill(colore);
      esagono(ix, iy, l);
      ix = ix + (l + (l / 2));
      iy = iy + b;
    }
    x = x - (l + (l / 2));
    y = y + b;
  }
  
  int c = (n - 1) * 2;
  x = x + (l + (l / 2));
  y = y + b;
  for (int a = 0; a < c; a++)
  {
    int ix = x; int iy = y;
    for (int o = 0; o < c; o++)
    {
      color colore = videoin.get((ix + l), (iy + b));
      fill(colore);
      esagono(ix, iy, l);
      ix = ix + (l + (l / 2));
      iy = iy + b;
    }
    c = c - 1;
    y = y + (b * 2);
  }
}

1 commento:

  1. bellissimo! sgrana l'immagine in pixel esagonali ...woowoow questa è arte digitale aliena! i pixel esagonali oohh kebello!

    RispondiElimina