// CE1 / Automaton on a Torus '08.03 // by Tsutomu HIGO URL:http://www.asahi-net.or.jp/~nj2t-hg/ #version 3.6; global_settings { assumed_gamma 2.2 max_trace_level 5 } light_source {<30, 70, -120> color <1.2, 1.2, 1.2>} camera { location <0, -20, -80> angle 120 look_at <-24, -15, -10> } #declare R1 = seed(8); #declare Nmay = 500; #declare Nmax = 96; #declare Rs=Nmax/pi; #declare Rl=Nmay*1.732/2/2/pi; #declare Cp = array[2*Nmax][2] #declare Nx = 0; #while (Nx < 2*Nmax) #declare Cp[Nx][0] = int(4.9999999*rand(R1)); #switch (Cp[Nx][0]) #case (0) #declare Cp[Nx][0] = 2; #break #case (1) #declare Cp[Nx][0] = 2; #break #case (2) #declare Cp[Nx][0] = 0; #break #case (3) #declare Cp[Nx][0] = 1; #break #case (4) #declare Cp[Nx][0] = 2; #break #end #declare Nx = Nx+1; #end union { #declare Ny = 1; #while (Ny < Nmay/3*2.3) #declare Nx = 0; #while (Nx < 2*Nmax) #declare Cp[Nx][1] = mod(Cp[Nx][0]+Cp[mod(Nx+1, 2*Nmax)][0], 5); #switch (Cp[Nx][1]) #case (0) #declare Cp[Nx][1] = 2; #break #case (1) #declare Cp[Nx][1] = 2; #break #case (2) #declare Cp[Nx][1] = 0; #break #case (3) #declare Cp[Nx][1] = 1; #break #case (4) #declare Cp[Nx][1] = 2; #break #end #if(Cp[Nx][1] = 0) sphere {, 0.5 pigment {color rgb <1, 0.8, 0.8>} finish { reflection 0.7 phong 1 brilliance 1 ambient 0.2 } rotate y*180/Nmax*(Nx+0.5*Ny) translate x*Rl rotate z*360/Nmay*Ny } #end #declare Nx = Nx+1; #end #declare Nx = 0; #while (Nx < 2*Nmax) #declare Cp[Nx][0] = Cp[Nx][1]; #declare Nx = Nx+1; #end #declare Ny = Ny+1; #end rotate x*90 rotate z*30 } background {color rgb <0, 0, 0.1>}