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 ⇑