/* ------------------------ */ #include "colors.inc" #include "glass.inc" global_settings { max_trace_level 8 } //Lights, camera, action camera { orthographic location < 0,5,-12> look_at < 0,0, 5> angle 25 //rotate 5*y } light_source { <-3,8,-10> color rgb <1,1,0.9> } light_source { <5,8,-20> color rgb <1,1,0.9> shadowless} light_source { <5,-5, 20> color rgb <1,0.9,0.9> shadowless} // ---------------------------------------- background { Black} // White*0.9 } // //--------------------------------------------- #declare R=1.5; #declare dep=1.5; #declare n=2;// n positif(épi) négatif(hypo) #macro CX(uu,vv) (-1/4*cos(-uu+vv+1/2*n*vv)*n-1/4*n*cos(uu+vv+1/2*n*vv)-1/16*n*cos(uu+3/2*n*vv+dep+vv)-1/16*n*cos(uu+1/2*n*vv+dep-vv) -1/16*n*cos(-uu+3/2*n*vv+dep+vv)-1/16*n*cos(-uu+1/2*n*vv+dep-vv))/n +(R*cos(vv)*n+R*cos(vv)+R*cos(n*vv+vv))/n #end #macro CY(uu,vv) (-1/16*n*sin(uu+3/2*n*vv+dep+vv)+1/16*sin(-uu+1/2*n*vv+dep-vv)*n-1/16*n*sin(-uu+3/2*n*vv+dep+vv)+1/16*n*sin(uu+1/2*n*vv+dep-vv)-1/4*n*sin(uu+vv+1/2*n*vv)-1/4*n*sin(-uu+vv+1/2*n*vv))/n +(R*sin(vv)*n+R*sin(vv)+R*sin(n*vv+vv))/n #end #macro CZ(uu,vv) 1/2*sin(uu)+1/8*sin(uu+n*vv+dep)-1/8*sin(-uu+n*vv+dep) #end //--------------- dM/duu ------------- #macro dCXu(uu,vv) (1/16*sin(uu+3/2*n*vv+dep+vv)-1/16*sin(-uu+3/2*n*vv+dep+vv)+1/4*sin(uu+vv+1/2*n*vv)-1/4*sin(-uu+vv+1/2*n*vv)+1/16*sin(uu+1/2*n*vv+dep-vv)-1/16*sin(-uu+1/2*n*vv+dep-vv)) #end #macro dCYu(uu,vv) (1/16*cos(-uu+3/2*n*vv+dep+vv)-1/16*cos(uu+3/2*n*vv+dep+vv)-1/16*cos(-uu+1/2*n*vv+dep-vv)+1/16*cos(uu+1/2*n*vv+dep-vv)+1/4*cos(-uu+vv+1/2*n*vv)-1/4*cos(uu+vv+1/2*n*vv)) #end #macro dCZu(uu,vv) 1/2*cos(uu)+1/8*cos(-uu+n*vv+dep)+1/8*cos(uu+n*vv+dep) #end //--------------- dM/dvv ------------- #macro dCXv(uu,vv) 1/32*(-2*n*cos(uu+3/2*n*vv+dep+vv)-2*n*cos(-uu+1/2*n*vv+dep-vv)-8*cos(-uu+vv+1/2*n*vv)*n-8*n*cos(uu+vv+1/2*n*vv) -2*n*cos(-uu+3/2*n*vv+dep+vv)-2*n*cos(uu+1/2*n*vv+dep-vv))/n +1/32*(8*n*sin(-uu+vv+1/2*n*vv)+ 8*n*sin(uu+vv+1/2*n*vv)+2*n*sin(uu+3/2*n*vv+dep+vv)-2*n*sin(uu+1/2*n*vv+dep-vv)+2*n*sin(-uu+3/2*n*vv+dep+vv) -2*sin(-uu+1/2*n*vv+dep-vv)*n+n*n*sin(uu+1/2*n*vv+dep-vv)+3*n*n*sin(uu+3/2*n*vv+dep+vv)+n*n*sin(-uu+1/2*n*vv+dep-vv) +3*n*n*sin(-uu+3/2*n*vv+dep+vv)+4*n*n*sin(uu+vv+1/2*n*vv)+4*n*n*sin(-uu+vv+1/2*n*vv))/n +1/32*(-32*R*sin(n*vv+vv)*n-32*R*sin(vv)*n-32*R*sin(vv)-32*R*sin(n*vv+vv))/n #end #macro dCYv(uu,vv) 1/32*(-8*n*sin(-uu+vv+1/2*n*vv)+2*n*sin(uu+1/2*n*vv+dep-vv)-2*n*sin(-uu+3/2*n*vv+dep+vv)-8*n*sin(uu+vv+1/2*n*vv) -2*n*sin(uu+3/2*n*vv+dep+vv)+2*sin(-uu+1/2*n*vv+dep-vv)*n)/n +1/32*(-4*n*n*cos(uu+vv+1/2*n*vv) -2*n*cos(-uu+1/2*n*vv+dep-vv)-2*n*cos(uu+3/2*n*vv+dep+vv)-2*n*cos(uu+1/2*n*vv+dep-vv)-2*n*cos(-uu+3/2*n*vv+dep+vv) -3*n*n*cos(uu+3/2*n*vv+dep+vv)+n*n*cos(uu+1/2*n*vv+dep-vv)-3*n*n*cos(-uu+3/2*n*vv+dep+vv)+n*n*cos(-uu+1/2*n*vv+dep-vv) -4*cos(-uu+vv+1/2*n*vv)*n*n-8*cos(-uu+vv+1/2*n*vv)*n-8*n*cos(uu+vv+1/2*n*vv))/n +1/32*(32*R*cos(vv)*n+32*R*cos(n*vv+vv)*n+ 32*R*cos(vv)+32*R*cos(n*vv+vv))/n #end #macro dCZv(uu,vv) -1/8*n*cos(-uu+n*vv+dep)+1/8*n*cos(uu+n*vv+dep) #end // ---------------------------------------- #macro ruban(umin,umax,vmin,vmax,uiter,viter) union{ // methode math #declare iu = (umax-umin)/uiter ; #declare iv = (vmax-vmin)/viter; #declare uu = umin; #while (uu+iu<=umax) //boucle externe #declare vv = vmin; #while (vv+iv<=vmax) //boucle interne //POINTS #declare x1=CX(uu,vv); #declare y1=CY(uu,vv); #declare z1=CZ(uu,vv) ; #declare n1=vcross(,); #declare uu=uu+iu; #declare x2=CX(uu,vv); #declare y2=CY(uu,vv); #declare z2=CZ(uu,vv); #declare n2=vcross(,); #declare vv=vv+iv ; #declare x3=CX(uu,vv); #declare y3=CY(uu,vv); #declare z3=CZ(uu,vv); #declare n3=vcross(,); #declare uu=uu-iu ; #declare x4=CX(uu,vv); #declare y4=CY(uu,vv); #declare z4=CZ(uu,vv) ; #declare n4=vcross(,); #declare vv=vv-iv; //TRIANGLES object{ smooth_triangle{ ,n1, ,n2, ,n3 } } object{ smooth_triangle{ , n1, , n3 , n4 } } #declare vv = vv+iv; #end // fin boucle interne #declare uu = uu+iu ; #end //fin boucle externe } #end // finde macro //--------------- AFFICHAGE ----------------- #declare nn=abs(n); union{ object{ruban(0,2*pi,pi/abs(n),pi/abs(n)+2*pi/abs(n),30,100) //abs(n) texture{ pigment{Orange*1.3 transmit 0.3} finish { specular 0.5 ambient 0.4 diffuse 0.2 }} } object{ruban(0,2*pi,pi/abs(n)+2*pi/abs(n),pi/abs(n)+4*pi/abs(n),30,100) texture{ pigment{Red*1.4 transmit 0.35} finish { specular 0.8 ambient 0.4 diffuse 0.2 }} } /* object{ruban(0,2*pi,pi/abs(n)+4*pi/abs(n),pi/abs(n)+6*pi/abs(n),30,100) texture{ pigment{Green*1.3 transmit 0.3} finish { specular 0.5 ambient 0.4 diffuse 0.2 }} } object{ruban(0,2*pi,pi/abs(n)+6*pi/abs(n),pi/abs(n)+8*pi/abs(n),30,100) texture{ pigment{Turquoise*1.3 transmit 0.3} finish { specular 0.5 ambient 0.4 diffuse 0.2 }} } */ rotate <70,60,0> translate <0,1.5,0> }