//Kuens surface by Tore Nordstrand nfytn@alf.uib.no #version 3.0 global_settings { assumed_gamma 1.0 } #declare umin =-(17/12)*pi //endpoints in the #declare umax = (15/12)*pi //parametric rectangle #declare vmin = 0.05 #declare vmax = pi-0.05 #declare uiter = 30 //number of steps #declare viter = 30 #declare iu = (umax-umin)/uiter //increment per step #declare iv = (vmax-vmin)/viter #declare tri1=texture{pigment{ color rgb <1,0,0>} finish { ambient 0.2 specular 0.7 roughness 0.05 }} #declare tri2=texture{pigment{ color rgbt <0,1,0,0.8>} finish { ambient 0.2 specular 0.7 roughness 0.05 }} union{ #declare uu = umin #while (uu<=umax) //outer loop #declare vv = vmin #while (vv<=vmax) //inner loop //POINTS #declare x1=2*(cos(uu)+uu*sin(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) //Calculate the #declare y1=2*(sin(uu)-uu*cos(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) //four points in #declare z1=log(tan(vv/2))+2*cos(vv)/(1+uu*uu*sin(vv)*sin(vv)) //the rectangle defined #declare uu=uu+iu //by uu,uu+iu,vv,vv+iv #declare x2=2*(cos(uu)+uu*sin(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) //Uses uu and vv because #declare y2=2*(sin(uu)-uu*cos(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) //u and v are built in #declare z2=log(tan(vv/2))+2*cos(vv)/(1+uu*uu*sin(vv)*sin(vv)) //constants. #declare vv=vv+iv #declare x3=2*(cos(uu)+uu*sin(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare y3=2*(sin(uu)-uu*cos(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare z3=log(tan(vv/2))+2*cos(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare uu=uu-iu #declare x4=2*(cos(uu)+uu*sin(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare y4=2*(sin(uu)-uu*cos(uu))*sin(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare z4=log(tan(vv/2))+2*cos(vv)/(1+uu*uu*sin(vv)*sin(vv)) #declare vv=vv-iv //#declare test1=vnormalize(vcross(,)) //#declare test2=vnormalize(vcross(,)) //#declare test3=vlength(test1+test2) //#if (test3 > 0) object{triangle{,,}texture{tri1}} object{triangle{,,}texture{tri2}} //#else // object{triangle{,,}texture{tri1}} // object{triangle{,,}texture{tri2}} //#end #declare vv = vv+iv #end //inner loop #declare uu = uu+iu #end //outer loop rotate <-90,0,0> //This is just changing the rotate <0,90,0> //coordinate system. scale 4 } //Lights, camera, action camera { location < 15, 7,-15> direction 1*z look_at < 0, 0, 0> } light_source { <0, 0,-19> color rgb 1 } light_source { <19, 2, 0> color rgb 1 } object {box{-23,23 inverse}pigment{color rgb 0.8}}