// Cube et tétračdre de Sierpinski #include "colors.inc" #include "sable.inc" light_source { <6,15,-8> color rgb <0.95,0.95,1> } light_source { <-6,10,-6> color rgb <1,1,1> } light_source { <-1.,1.6,-0.2>*10 color rgb <1,0.8,0>*0.4 } background { SkyBlue*1.2 } camera {orthographic location <1.5,3,-0.35>*0.5 look_at <1.2,0.8,1.6> } plane{ z, 4.5 pigment { SkyBlue } finish {ambient 0.65 diffuse 0.3 roughness 0.0001 } rotate y*15 } plane{ y,0 texture { sable2 scale 0.2} finish {ambient 0.8 diffuse 0.2 roughness 0.0001 } } # declare rap=1/3; //------------------------ le cube --------------------- #macro sierpinski(a,b,c,D,n) #if (n=0) box{,} #else #local DL=D*rap; sierpinski(a,b,c,DL,n-1) sierpinski(a+D-DL,b,c,DL,n-1) sierpinski(a,b,c+D-DL,DL,n-1) sierpinski(a+D-DL,b,c+D-DL,DL,n-1) sierpinski(a+D-DL,b+D-DL,c+D-DL,DL,n-1) sierpinski(a,b+D-DL,c+D-DL,DL,n-1) sierpinski(a,b+D-DL,c,DL,n-1) sierpinski(a+D-DL,b+D-DL,c,DL,n-1) sierpinski(a+DL,b,c,DL,n-1) sierpinski(a+DL,b+2*DL,c,DL,n-1) sierpinski(a+DL,b,c+2*DL,DL,n-1) sierpinski(a+DL,b+2*DL,c+2*DL,DL,n-1) sierpinski(a,b+DL,c,DL,n-1) sierpinski(a+2*DL,b+DL,c,DL,n-1) sierpinski(a,b+DL,c+2*DL,DL,n-1) sierpinski(a+2*DL,b+DL,c+2*DL,DL,n-1) sierpinski(a,b,c+DL,DL,n-1) sierpinski(a+2*DL,b,c+DL,DL,n-1) sierpinski(a,b+2*DL,c+DL,DL,n-1) sierpinski(a+2*DL,b+2*DL,c+DL,DL,n-1)/* */ #end #end //-------------------- le prisme --------------------- #macro sierprisme(x1,y1,x2,y2,x3,y3,base1,haut,n) #if (n=0) prism { linear_spline base1, base1+haut, 4 ,,,} #else #local h=haut*rap; sierprisme(x1,y1,x1+(x2-x1)*rap,y1+(y2-y1)*rap,x1+(x3-x1)*rap,y1+(y3-y1)*rap,base1,h,n-1) sierprisme(x2+(x1-x2)*rap,y2+(y1-y2)*rap,x2,y2,x2+(x3-x2)*rap,y2+(y3-y2)*rap,base1,h,n-1) sierprisme(x3+(x1-x3)*rap,y3+(y1-y3)*rap,x3+(x2-x3)*rap,y3+(y2-y3)*rap,x3,y3,base1,h,n-1) sierprisme(x1+(x3-x1)*rap,y1+(y2-y1)*rap, x3+(x2-x3)*2*rap,y3+(y2-y3)*2*rap, x3+(x2-x3)*rap,y3+(y2-y3)*rap, base1,h,n-1) sierprisme(x1+(x2-x1)*rap,y1+(y2-y1)*rap,x1+(x2-x1)*2*rap,y1+(y2-y1)*2*rap,x1+(x3-x1)*rap,y1+(y2-y1)*rap, base1,h,n-1) sierprisme( x1+(x3-x1)*rap,y1+(y3-y1)*rap, x1+(x3-x1)*rap,y1+(y2-y1)*rap,x1+(x3-x1)*2*rap,y1+(y3-y1)*2*rap,base1,h,n-1) sierprisme(x1,y1,x1+(x2-x1)*rap,y1+(y2-y1)*rap,x1+(x3-x1)*rap,y1+(y3-y1)*rap,base1+h,h,n-1) sierprisme(x2+(x1-x2)*rap,y2+(y1-y2)*rap,x2,y2,x2+(x3-x2)*rap,y2+(y3-y2)*rap,base1+h,h,n-1) sierprisme(x3+(x1-x3)*rap,y3+(y1-y3)*rap,x3+(x2-x3)*rap,y3+(y2-y3)*rap,x3,y3,base1+h,h,n-1) sierprisme(x1,y1,x1+(x2-x1)*rap,y1+(y2-y1)*rap,x1+(x3-x1)*rap,y1+(y3-y1)*rap,base1+2*h,h,n-1) sierprisme(x2+(x1-x2)*rap,y2+(y1-y2)*rap,x2,y2,x2+(x3-x2)*rap,y2+(y3-y2)*rap,base1+2*h,h,n-1) sierprisme(x3+(x1-x3)*rap,y3+(y1-y3)*rap,x3+(x2-x3)*rap,y3+(y2-y3)*rap,x3,y3,base1+2*h,h,n-1) sierprisme(x1+(x3-x1)*rap,y1+(y2-y1)*rap, x3+(x2-x3)*2*rap,y3+(y2-y3)*2*rap, x3+(x2-x3)*rap,y3+(y2-y3)*rap, base1+2*h,h,n-1) sierprisme(x1+(x2-x1)*rap,y1+(y2-y1)*rap,x1+(x2-x1)*2*rap,y1+(y2-y1)*2*rap,x1+(x3-x1)*rap,y1+(y2-y1)*rap, base1+2*h,h,n-1) sierprisme( x1+(x3-x1)*rap,y1+(y3-y1)*rap, x1+(x3-x1)*rap,y1+(y2-y1)*rap,x1+(x3-x1)*2*rap,y1+(y3-y1)*2*rap,base1+2*h,h,n-1) #end #end //------------------------------------------------------- // n est le nombre d'itérations #declare n=2; union { // union 1 union{ // union 2 sierpinski (1.3,0,0,1,n) texture{ pigment { dents color_map { [ 0.1 rgb <0.95,1,0.95>*0.95] [ 0.1 rgb <0.7,1,0.6>] [ 0.4 rgb <0.3,0.8,0.5> ] [ 0.5 rgb <0.2,0.7,0.7>] } // color_map scale 0.002 } //fin pigment } // fin texture finish {ambient 0.2 diffuse 0.5 specular 0.4 roughness 0.1 } } // fin union 2 union{ // union 3 sierprisme (0,0,0,1,1,0,0,1,n) pigment { brick color Gray*1.2, color Red brick_size <2,0.795,1> mortar 0.2 scale 0.02 } finish {ambient 0.2 diffuse 0.7 specular 0.4 roughness 0.1 } } // fin union 3 rotate <0,205,0> translate <2.6,0,2> } // fin union 1