/*========================================================= Esercizio sulle macro ricorsive: triangolo di Sierpinski Metodi e Modelli Matematici Gian Marco Todesco, ottobre 2007 http://archinet.uniroma3.it/mate/metodi/2007 =========================================================*/ #include "colors.inc" #include "textures.inc" camera { location <0, 0, -4> right x*image_width/image_height look_at 0 angle 35 } light_source { <-10, 30, -30> color 1 } light_source { < 10, 30, -30> color 1 } // // disegna un triangolo rosso con bordo dorato di vertici A,B,C // #macro TriangoloConBordo(A,B,C) // vertici e spigoli union { #local R = 0.0037; sphere {A,R} sphere {B,R} sphere {C,R} cylinder {A,B,R} cylinder {B,C,R} cylinder {C,A,R} texture {Gold_Metal} } // triangolo triangle { A,B,C pigment {Red} } #end // // procedura ricorsiva: // disegna un triangolo di Sierpinski di livello N e vertici A,B,C // #macro TriangoloDiSierpinski(N, A,B,C) #if(N=0) // se N = 0 disegno un triangolo semplice TriangoloConBordo(A,B,C) #else // se N > 0 disegno tre Sierpinski di livello N-1 // calcolo i punti medi dei lati #local AB = (A+B)/2; #local BC = (B+C)/2; #local AC = (C+A)/2; // chiamata ricorsiva TriangoloDiSierpinski(N-1, A,AB,AC) TriangoloDiSierpinski(N-1, B,AB,BC) TriangoloDiSierpinski(N-1, C,AC,BC) #end #end // invoco la macro partendo dai vertici di un triangolo equilatero // esteso su quasi tutto il campo visivo #declare H = sqrt(3); TriangoloDiSierpinski(4, <-1,-H/2,0>,<1,-H/2,0>,<0,H/2,0>)