//Description: // Crystalline pseudo-fractal // Forms of both Cantor's Dust and Koch's Snowflake // Uses Tsutomu Higo's recursive pipes macro //Author: Ben Scheele //Date: 8-31-2003 global_settings{ max_trace_level 7 } camera { ultra_wide_angle location <-.5,-.285,.55> up image_height right image_width look_at <-.5,-.285> angle 100 } #declare l = .45; light_source{ <50,80,50> rgb <.8,0,.9>*l rotate 60*z } light_source{ <-50,-80,50> rgb <0,.75,1>*l rotate 60*z } light_source{ <-.5,-.3,.5> rgb <1,.5>*l } light_source{ <-.5,-.3,1> rgb .7*l } light_source{ <-.5,-.3,-1> rgb 2.5*l } sky_sphere { pigment { radial frequency 6 phase .5 triangle_wave color_map { [ 0.0 rgb <.8,.9,1>*.85 ] [ 0.4+.4 rgb <.7,.7,1>*.8 ] [ 1.0 rgb <.5,.45,.75>*1.1 ] } rotate -100*x } } #declare b = 60; #declare Nx = 4; #declare Data = array [Nx][2] {{0,0},{-b,0},{b,0},{0,0}} #declare final = 0; #declare lm = 6; //recursion level #declare rad = sqrt(3)/2-.25; #declare tr = rad*1.5; #declare Unit = box{ -tr/sqrt(3)*(.3*z+10*x+(-1+2*4/25)*y), tr/sqrt(3)*(.3*z+x+(2-1*4/25)*y) rotate 90*2/5*x rotate 90*3/5*y rotate 90*2/5*z } #declare J = 0; #while( J <= lm ) #declare Unit = #declare Sc = 1; #declare Xp = 0; #declare Yp = 0; #declare Zp = 0; union{ #declare I = 0; #while (I < Nx) object { Unit rotate translate } #declare Xp = Sc*(Xp+sin(Data[I][0]*pi/180)*sin(Data[I][1]*pi/180)); #declare Yp = Sc*(Yp+cos(Data[I][0]*pi/180)); #declare Zp = Sc*(Zp+sin(Data[I][0]*pi/180)*cos(Data[I][1]*pi/180)); #declare I = I + 1; #end #declare Sc = 1/sqrt(Xp*Xp+Yp*Yp+Zp*Zp); scale Sc } #declare n = J; #declare endn = lm; #declare w = n/endn; #declare tr = tr*Sc; #declare Unit2 = object { Unit translate -tr*x*2 #if( n = endn ) pigment{ rgb 1.3 transmit .7 } #else pigment{ rgb <.4+.6*w,.4+.4*w,.5+.5*w> transmit .6*(1-.25*w) } #end finish { specular 0.5 roughness 0.001 brilliance .04 phong .2 diffuse .8 reflection{ .2, .8 metallic .3 } conserve_energy } interior { ior 1.333 caustics 1.5 fade_distance 2-w fade_power 1.5 } rotate <90,-90> } object{ Unit2 } object{ Unit2 rotate 120*z translate -x } object{ Unit2 rotate -120*z translate .5*<-1,-sqrt(3)> } #declare J = J + 1; #end