Vicsek con trasformazione

Qualunque sia l’immagine iniziale, la trasformazione produce il frattale di Vicsek.

  • Mouse (tasto): aumenta la ricorsione
  • Mouse (Ctrl+tasto): diminuisce la ricorsione
  • Applicazione Java
final int numMax = 5;

int num = 2;
int dim, dim3, dim32;

boolean scende=false;

PImage immagine,
       immagine2;

void setup()
{
   size(500, 500);
   smooth();

   dim   = width;
   dim3  = dim/3;
   dim32 = 2*dim3;
   immagine = loadImage("buttons.gif");       

   noLoop();
}

void keyPressed()
{
   scende=true;
}
void keyReleased()
{
   scende=false;
}
void mousePressed()
{
   if(scende && num > 0)
	  num--;
   else if(!scende && num < numMax)  
	  num++;
   redraw();
}

void draw()
{
   background(255);
   image(immagine, 0, 0, dim, dim);

   for (int i=0; i < num; i++)
   {
	  loadPixels();
	  immagine2=createImage(dim, dim, RGB);
	  arraycopy(pixels, immagine2.pixels);

	  background(255);
	  blend(immagine2, 0, 0, dim, dim, 0    , 0    , dim3, dim3, BLEND);           
	  blend(immagine2, 0, 0, dim, dim, dim32, 0    , dim3, dim3, BLEND);
	  blend(immagine2, 0, 0, dim, dim, dim3 , dim3 , dim3, dim3, BLEND);           
	  blend(immagine2, 0, 0, dim, dim, 0    , dim32, dim3, dim3, BLEND);           
	  blend(immagine2, 0, 0, dim, dim, dim32, dim32, dim3, dim3, BLEND);
   }
}