// Last edited on DATE TIME by USER // Processed by remove-cam-lights #include "colors.inc" #include "textures.inc" #include "eixos.inc" #include "retalho.inc" background{ color Quartz } #declare tx_plastico = texture{ pigment{ color rgb < 0.10, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico2 = texture{ pigment{ color Scarlet } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #declare tx_plastico3 = texture{ pigment{ color Green } finish{ diffuse 0.8 ambient 0.1 specular 0.5 roughness 0.005 } } #macro interpola_step(t0, v0, t1, v1, tt) #local ss = (tt-t0)/(t1-t0); #local rr = 1-ss; (rr*v0 + ss*v1) #end #macro interpola_besie(t0, v0, v1, v2, v3, t3, tt) #local v01 = interpola_step(t0,v0,t3,v1,tt); #local v12 = interpola_step(t0,v1,t3,v2,tt); #local v23 = interpola_step(t0,v2,t3,v3,tt); #local v012 = interpola_step(t0,v01,t3,v12,tt); #local v123 = interpola_step(t0,v12,t3,v23,tt); interpola_step(t0,v012,t3,v123,tt); #end #macro Grafico(x0, y0, y1, y2, y3, x3, N) #local nn = 0; #local dx = (x3 - x0)/N; #local xx = x0; #local yy = 0; union{ #while(nn < N) #local yy = interpola_besie(x0,y0,y1,y2,y3,x3,xx); #if (nn = N-1) sphere{ yy 0.10 pigment { Blue } } #else sphere{ yy 0.05 pigment { Red } } #end #local xx = xx + dx; #local nn = nn + 1; #end } #end #macro Grafico4(x00, y00, y01, y02, y03, y10, y11, y12, y13, y20, y21, y22, y23, y30, y31, y32, y33, x33, N) #local d01 = (y02 + y11)/2; #local d12 = (y12 + y21)/2; #local d23 = (y22 + y31)/2; #local dx = (x33 - x00)/4; Grafico(x00, y00, y01, y02, d01, x00 + dx, N) Grafico(x00 + dx, d01, y11, y12, d12, x00 + 2*dx, N) Grafico(x00 + 2*dx, d12, y21, y22, d23, x00 + 3*dx, N) Grafico(x00 + 3*dx, d23, y31, y32, y33, x00 + 4*dx, N) #end #declare c11 = <5,0,0>; #declare c12 = <1,-1,1>; #declare c13 = <9,-2,2>; #declare c14 = <5,-3,3>; #declare c21 = <0,4,1>; #declare c22 = <0,-2,2>; #declare c23 = <0,4,3>; #declare c24 = <0,6,4>; #declare c31 = <3,-3,-4>; #declare c32 = <0,0,1>; #declare c33 = <-1,-1,0>; #declare c34 = <-4,-5,-3>; #declare c41 = <5,3,-3>; #declare c42 = <1,2,-2>; #declare c43 = <9,1,-1>; #declare c44 = <5,0,0>; #declare p11 = <-4,-4,1>; #declare p12 = <-4,-3,1>; #declare p13 = <-4,-2,1>; #declare p14 = <-4,-1,1>; #declare p21 = <-2,-4,2>; #declare p22 = <-2,-3,2>; #declare p23 = <-2,-2,2>; #declare p24 = <-2,-1,2>; #declare p31 = <0,-4,-2>; #declare p32 = <0,-3,-2>; #declare p33 = <0,-2,-2>; #declare p34 = <0,-1,-2>; #declare r21 = <2,-4,0>; #declare r22 = <2,-3,0>; #declare r23 = <2,-2,0>; #declare r24 = <2,-1,0>; #declare r31 = <6,-4,2>; #declare r32 = <6,-3,2>; #declare r33 = <6,-2,2>; #declare r34 = <6,-1,2>; #declare s21 = <8,-4,0>; #declare s22 = <8,-3,0>; #declare s23 = <8,-2,0>; #declare s24 = <8,-1,0>; #declare s31 = <10,-4,2>; #declare s32 = <10,-3,2>; #declare s33 = <10,-2,2>; #declare s34 = <10,-1,2>; #declare s41 = <12,-4,0>; #declare s42 = <12,-3,0>; #declare s43 = <12,-2,0>; #declare s44 = <12,-1,0>; #macro TresRetalhos(p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,r21,r22,r23,r24,r31,r32,r33,r34,s21,s22,s23,s24,s31,s32,s33,s34,s41,s42,s43,s44) #local junta1 = (p31 + r21)/2; #local junta2 = (p32 + r22)/2; #local junta3 = (p33 + r23)/2; #local junta4 = (p34 + r24)/2; #local junta11 = (r31 + s21)/2; #local junta12 = (r32 + s22)/2; #local junta13 = (r33 + s23)/2; #local junta14 = (r34 + s24)/2; retalho(p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,junta1,junta2,junta3,junta4,0.000000001,tx_plastico2,tx_plastico2) retalho(junta1,junta2,junta3,junta4,r21,r22,r23,r24,r31,r32,r33,r34,junta11,junta12,junta13,junta14,0.000000001,tx_plastico,tx_plastico) retalho(junta11,junta12,junta13,junta14,s21,s22,s23,s24,s31,s32,s33,s34,s41,s42,s43,s44,0.000000001,tx_plastico3,tx_plastico3) #end #macro pos(x0, y0, y1, y2, y3, x3, N, tt) #local yy1 = interpola_besie(x0,y0,y1,y2,y3,x3,tt); #local yy2 = interpola_besie(x0,y0,y1,y2,y3,x3,tt+0.01); #local yy3 = interpola_besie(x0,y0,y1,y2,y3,x3,tt+0.02); #local yy4 = interpola_besie(x0,y0,y1,y2,y3,x3,tt+0.03); TresRetalhos(yy1,yy2,yy3,yy4,yy1+<2,0,1>,yy2+<2,0,1>,yy3+<2,0,1>,yy4+<2,0,1>,yy1+<4,0,2>,yy2+<4,0,2>,yy3+<4,0,2>,yy4+<4,0,2>,yy1+<6,0,1>,yy2+<6,0,1>,yy3+<6,0,1>,yy4+<6,0,1>,yy1+<8,0,2>,yy2+<8,0,2>,yy3+<8,0,2>,yy4+<8,0,2>,yy1+<10,0,1>,yy2+<10,0,1>,yy3+<10,0,1>,yy4+<10,0,1>,yy1+<12,0,2>,yy2+<12,0,2>,yy3+<12,0,2>,yy4+<12,0,2>,yy1+<14,0,1>,yy2+<14,0,1>,yy3+<14,0,1>,yy4+<14,0,1>) #end #macro posicao(x00, y00, y01, y02, y03, y10, y11, y12, y13, y20, y21, y22, y23, y30, y31, y32, y33, x33, N, tt) #local d01 = (y02 + y11)/2; #local d12 = (y12 + y21)/2; #local d23 = (y22 + y31)/2; #local dx = (x33 - x00)/4; #if(tt < 0.25) pos(x00, y00, y01, y02, d01, x00 + dx, N, tt) #else #if(tt < 0.50) pos(x00 + dx, d01, y11, y12, d12, x00 + 2*dx, N, tt) #else #if(tt < 0.75) pos(x00 + 2*dx, d12, y21, y22, d23, x00 + 3*dx, N, tt) #else pos(x00 + 3*dx, d23, y31, y32, y33, x00 + 4*dx, N, tt) #end #end #end #end union{ object{ eixos(3.0) } union{ Grafico4(0,c11,c12,c13,c14,c21,c22,c23,c24,c31,c32,c33,c34,c41,c42,c43,c44,24,100) posicao(0,c11,c12,c13,c14,c21,c22,c23,c24,c31,c32,c33,c34,c41,c42,c43,c44,1,100,clock) translate<-4,0,4> } } #include "camlight.inc" #declare centro_cena = < 0.00, 0.00, 5.00 >; #declare raio_cena = 10.0; #declare dir_camera = <6.00, 10.01, 8.00 >; #declare dist_camera = 10.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)