Vicsek con attrattore – Interattivo

final int   quanti = 200;
final color colore = color(0);

float X, Y,
      X1, Y1,
      X2, Y2,
      X3, Y3,
      X4, Y4,
      X5, Y5;

void setup()
{
  size(500, 500);
  frameRate(30);  

  X1=0;       Y1=0; 
  X2=width;   Y2=0;
  X3=0;       Y3=height;
  X4=width;   Y4=height;
  X5=width/2; Y5=height/2;
  
  inizia();
}

void mouseMoved()
{
   inizia();
}

void inizia()
{  
  background(255);
  X5 = mouseX;
  Y5 = mouseY;
}

void draw()
{ 
  for(int i=0; i < quanti; i++)
  {
	switch((int)random(5))
	{
	  case 0: X=(X+2*X1)/3;  Y=(Y+2*Y1)/3; break;
	  case 1: X=(X+2*X2)/3;  Y=(Y+2*Y2)/3; break;
	  case 2: X=(X+2*X3)/3;  Y=(Y+2*Y3)/3; break;
	  case 3: X=(X+2*X4)/3;  Y=(Y+2*Y4)/3; break;
	  case 4: X=(X+2*X5)/3;  Y=(Y+2*Y5)/3; break;
	}
	set(round(X), round(Y), colore);
  }
}