View the code ⇓

Vega: Variation on a theme by Victor Vasarely

int NUM=10; float R, h1, h2, t, z=0.82;
float[][] X = new float[NUM+1][NUM+1]; 
float[][] Y = new float[NUM+1][NUM+1]; 

void setup() 
{size(600,600); frameRate(30); smooth(); noStroke();
colorMode(HSB,360,100,100); h1=20; h2=240;  t=0;}

void draw() 
{ int i,j; float r,f,m=width/2; t+=1/30.0; h1=(h1+0.17)%360;
  h2=(h2+0.19)%360; R=NUM*z*(1+cos(t))/2; 
  f=R/log(R+1)*m/NUM;
  for(i=0;i<=NUM;i++){
    for(j=0;j<<=NUM;j++){
      r=sqrt(i*i+j*j);
      if(r<R){
        X[i][j]=f*log(sqrt(i*i+j*j)+1)*i/r;
        Y[i][j]=f*log(sqrt(i*i+j*j)+1)*j/r;
      }else{X[i][j]=i*m/NUM; Y[i][j]=j*m/NUM;}}
  } 
  X[0][0]=0; Y[0][0]=0.0; 
 for(i=1;i<=NUM;i++){
  for(j=1;j<<=NUM;j++){
   fill(h1+(h2-h1)*((i+j)%2),80,100-90/NUM/2*(i+j));
   quad(m+X[i-1][j-1], m+Y[i-1][j-1], m+X[i][j-1],m+Y[i][j-1],
     m+X[i][j],m+Y[i][j], m+X[i-1][j],m+Y[i-1][j]);
   quad(m-X[i-1][j-1], m-Y[i-1][j-1], m-X[i][j-1],m-Y[i][j-1],
     m-X[i][j],m-Y[i][j], m-X[i-1][j],m-Y[i-1][j]);
   fill(h1+(h2-h1)*((i+j+1)%2),80,100-90/NUM/2*(i+j));
   quad(m-X[i-1][j-1], m+Y[i-1][j-1], m-X[i][j-1],m+Y[i][j-1],
     m-X[i][j],m+Y[i][j], m-X[i-1][j],m+Y[i-1][j]);
   quad(m+X[i-1][j-1], m-Y[i-1][j-1], m+X[i][j-1],m-Y[i][j-1],
     m+X[i][j],m-Y[i][j], m+X[i-1][j],m-Y[i-1][j]);
   }
 }
}

Return to top ⇑