/* Dini's surface Dini's surface of constant negative curvature. Looks like a flower cx := a*cos(uu)*sin(vv) cy := a*sin(uu)*sin(vv) cz := a*(cos(vv)+ln(tan(1/2*vv)))+b*uu dcxu := -a*sin(uu)*sin(vv) dcyu := a*cos(uu)*sin(vv) dczu := b dcxv := a*cos(uu)*cos(vv) dcyv := a*sin(uu)*cos(vv) dczv := a*cos(vv)^2/sin(vv) Example: a=1,b=0.2,u={ 0,4*pi},v={0.001,2} */ #include "colors.inc" #include "metals.inc" camera { orthographic location <-0,10,-30> look_at<0,0,0> angle 13 } light_source { <-10,20,-20> White shadowless } light_source { <10,20,-20> color White shadowless} light_source { <4,-20,-15> color Red*0.7 shadowless} background{ White} // SkyBlue*1.2} // //------------------------------------------- #declare a=1; #declare b=0.2; #macro CX(uu,vv) a*cos(uu)*sin(vv) #end #macro CY(uu,vv) a*sin(uu)*sin(vv) #end #macro CZ(uu,vv) a*(cos(vv)+ln(tan(1/2*vv)))+b*uu #end //--------------- dM/duu ------------- #macro dCXu(uu,vv) -a*sin(uu)*sin(vv) #end #macro dCYu(uu,vv) a*cos(uu)*sin(vv) #end #macro dCZu(uu,vv) b #end //--------------- dM/dvv ------------- #macro dCXv(uu,vv) a*cos(uu)*cos(vv) #end #macro dCYv(uu,vv) a*sin(uu)*cos(vv) #end #macro dCZv(uu,vv) a*pow(cos(vv),2)/sin(vv) #end // ---------------------------------------- #macro surf(umin,umax,vmin,vmax) #declare uiter = 120; #declare viter =80; #declare iu = (umax-umin)/uiter ; #declare iv = (vmax-vmin)/viter; // ---------------------------------------- union{ // methode math #declare uu = umin; #while (uu<=umax) //boucle externe #declare vv = vmin; #while (vv<=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 // macro surf //----------------------------------------- union{ object{ surf(0,4*pi,0.001,pi/2) // partie gauche texture{ T_Gold_3C finish { ambient 0.3 diffuse 0.25 specular 0.5 roughness 0.0001 } } // fin texture } object{ surf(0,4*pi,pi/2,pi-0.05) // partie droite pigment{ Blue transmit 0.5} } rotate <0,90,0> rotate <55,0,0> translate <-0.7,0,0> }