/*========================================================= Esperimenti sul broccolo romano Metodi e Modelli Matematici Gian Marco Todesco, gennaio 2008 http://archinet.uniroma3.it/mate/metodi/2007 =========================================================*/ #include "colors.inc" #include "textures.inc" #version 3.5; global_settings { assumed_gamma 1 } camera { location <0,2,-7> right image_width/image_height*x look_at 0.2*y angle 80 } light_source {<2,4,-7>, color 1} light_source {<-3,3,-1>, color 1} #declare Cone_H = 4; #declare Cone_R = Cone_H*0.9; #macro Broccolo(Size) #if(Size < 0.05) cone {-y*Cone_H,Cone_R,0,0 pigment {LimeGreen}} #else union { #local Exp_A = 0.1; #local Exp_B = ln(Cone_R/Exp_A); #local N = 55; #local I = 0; #while(I; #local E0 = vnormalize(); #local E1 = vnormalize(<-Sn,0,Cs>); #local E2 = vcross(E0,E1); object { #local ChildHeight = sqrt(R*R+H*H)*R/(-H); #local Factor = 0.5*ChildHeight / Cone_H; Broccolo(Size * Factor) scale Factor matrix < E2.x,E2.y,E2.z, E0.x,E0.y,E0.z, E1.x,E1.y,E1.z, P.x,P.y,P.z> } #local I=I+1; #end // fine ciclo while } // fine union #end // fine if(livello=0) #end // fine macro object { Broccolo(1) translate y*Cone_H rotate -30*y }