// Last edited on DATE TIME by USER // Processed by remove-cam-lights #include "eixos.inc" #include "camlight.inc" #include "retalho.inc" background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_branco = texture{ pigment{ color rgb < 1, 1, 1 > } } #declare tx_preto = texture{ pigment{ color rgb < 0, 0, 0 > } } #declare tx_azul = texture{ pigment{ color rgb < 0, 0, 1 > } } #declare tx_verde = texture{ pigment{ color rgb < 0.10, 0.62, 0.10 >} finish{ diffuse 0.9 ambient 0.5 } } #declare N_Esferas = 50; #declare altura = 2; #declare roleta = seed(123); #macro interpola (f0, v0, f1, v1, f) #local ss = (f-f0)/(f1-f0); #local rr = 1-ss; (rr*v0 + ss*v1) #end #macro interpola4 (t0, v0, v1, v2, v3, t1, tt) #local v01 = interpola(t0, v0, t1, v1, tt); #local v12 = interpola(t0, v1, t1, v2, tt); #local v23 = interpola(t0, v2, t1, v3, tt); #local v012 = interpola(t0, v01, t1, v12, tt); #local v123 = interpola(t0, v12, t1, v23, tt); #local v0123 = interpola(t0, v012, t1, v123, tt); v0123 #end #macro grafico (x0, y0, y1, y2, y3, x3, N) #if (x0 < x3) #local xmin = x0; #local xmax = x3; #else #local xmin = x3; #local xmax = x0; #end #local var = xmin; #local intervalo = (xmax-xmin)/N; union { #while (var < xmax) #local yt = interpola4 (xmin, y0, y1, y2, y3, xmax, var); object { sphere{ yt, 0.1 } } #local var = var + intervalo; #end } #end #macro graficos_create4 () #declare y1a = ; #declare y2a = ; #declare y1b = ; #declare y2b = ; #declare y1c = ; #declare y2c = ; #declare y1d = ; #declare y2d = ; union { object {grafico(0, (y2d+y1a)/2, y1a, y2a, (y2a+y1b)/2, 1, N_Esferas) texture {tx_azul}} object {grafico(1, (y2a+y1b)/2, y1b, y2b, (y2b+y1c)/2, 2, N_Esferas) texture {tx_branco}} object {grafico(2, (y2b+y1c)/2, y1c, y2c, (y2c+y1d)/2, 3, N_Esferas) texture {tx_preto}} object {grafico(3, (y2c+y1d)/2, y1d, y2d, (y2d+y1a)/2, 4, N_Esferas) texture {tx_verde}} } #end #macro gera_pontos_curva() #declare y1a = ; #declare y2a = ; #declare y1b = ; #declare y2b = ; #declare y1c = ; #declare y2c = ; #declare y1d = ; #declare y2d = ; #end #macro ponto_grafico (x0, y0, y1, y2, y3, x3, clk) #if (x0 < x3) #local xmin = x0; #local xmax = x3; #else #local xmin = x3; #local xmax = x0; #end #local var = xmin*(1-clk) + xmax*clk; interpola4 (xmin, y0, y1, y2, y3, xmax, var) #end #macro planos () #local p11 = <0,0,(rand(roleta)-1)*altura>; #local p12 = <1,0,(rand(roleta)-1)*altura>; #local p13 = <2,0,(rand(roleta)-1)*altura>; #local p14 = <3,0,(rand(roleta)-1)*altura>; #local p21 = <0,1,(rand(roleta)-1)*altura>; #local p22 = <1,1,(rand(roleta)-1)*altura>; #local p23 = <2,1,(rand(roleta)-1)*altura>; #local p24 = <3,1,(rand(roleta)-1)*altura>; #local p31 = <0,2,(rand(roleta)-1)*altura>; #local p32 = <1,2,(rand(roleta)-1)*altura>; #local p33 = <2,2,(rand(roleta)-1)*altura>; #local p34 = <3,2,(rand(roleta)-1)*altura>; #local p11_2 = <0,4,(rand(roleta)-1)*altura>; #local p12_2 = <1,4,(rand(roleta)-1)*altura>; #local p13_2 = <2,4,(rand(roleta)-1)*altura>; #local p14_2 = <3,4,(rand(roleta)-1)*altura>; #local p21_2 = <0,5,(rand(roleta)-1)*altura>; #local p22_2 = <1,5,(rand(roleta)-1)*altura>; #local p23_2 = <2,5,(rand(roleta)-1)*altura>; #local p24_2 = <3,5,(rand(roleta)-1)*altura>; #local p31_2 = <0,6,(rand(roleta)-1)*altura>; #local p32_2 = <1,6,(rand(roleta)-1)*altura>; #local p33_2 = <2,6,(rand(roleta)-1)*altura>; #local p34_2 = <3,6,(rand(roleta)-1)*altura>; #local p1 = (p31+p11_2)/2; #local p2 = (p32+p12_2)/2; #local p3 = (p33+p13_2)/2; #local p4 = (p34+p14_2)/2; #local rad = 0.01; union { object {retalho (p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,p1,p2,p3,p4,rad,tx_branco,tx_verde) } object {retalho (p1,p2,p3,p4,p11_2,p12_2,p13_2,p14_2,p21_2,p22_2,p23_2,p24_2,p31_2,p32_2,p33_2,p34_2, rad,tx_preto,tx_azul) } } #end #macro planos_seguem_grafico(clk, dt) #local p11 = posicao(clk); #local p12 = posicao(clk) + <1,0,0>; #local p13 = posicao(clk) + <2,0,0>; #local p14 = posicao(clk) + <3,0,0>; #local p21 = posicao(clk-dt); #local p22 = posicao(clk-dt) + <1,0,0>; #local p23 = posicao(clk-dt) + <2,0,0>; #local p24 = posicao(clk-dt) + <3,0,0>; #local p31 = posicao(clk-2*dt); #local p32 = posicao(clk-2*dt) + <1,0,0>; #local p33 = posicao(clk-2*dt) + <2,0,0>; #local p34 = posicao(clk-2*dt) + <3,0,0>; #local p11_2 = posicao(clk-4*dt); #local p12_2 = posicao(clk-4*dt) + <1,0,0>; #local p13_2 = posicao(clk-4*dt) + <2,0,0>; #local p14_2 = posicao(clk-4*dt) + <3,0,0>; #local p21_2 = posicao(clk-5*dt); #local p22_2 = posicao(clk-5*dt) + <1,0,0>; #local p23_2 = posicao(clk-5*dt) + <2,0,0>; #local p24_2 = posicao(clk-5*dt) + <3,0,0>; #local p31_2 = posicao(clk-6*dt) + <0,0,0>; #local p32_2 = posicao(clk-6*dt) + <1,0,0>; #local p33_2 = posicao(clk-6*dt) + <2,0,0>; #local p34_2 = posicao(clk-6*dt) + <3,0,0>; #local p1 = (p31+p11_2)/2; #local p2 = (p32+p12_2)/2; #local p3 = (p33+p13_2)/2; #local p4 = (p34+p14_2)/2; #local rad = 0.01; union { object {retalho (p11,p12,p13,p14,p21,p22,p23,p24,p31,p32,p33,p34,p1,p2,p3,p4,rad,tx_branco,tx_verde) } object {retalho (p1,p2,p3,p4,p11_2,p12_2,p13_2,p14_2,p21_2,p22_2,p23_2,p24_2,p31_2,p32_2,p33_2,p34_2, rad,tx_preto,tx_azul) } } #end #macro posicao(tempo) #if (tempo < 0) #local tempo2 = tempo + 1; #else #local tempo2 = tempo; #end #if (tempo2 >= 0 & tempo2 < 0.25) ponto_grafico(0, (y2d+y1a)/2, y1a, y2a, (y2a+y1b)/2, 1, tempo2*4) #end #if (tempo2 >= 0.25 & tempo2 < 0.5) ponto_grafico(1, (y2a+y1b)/2, y1b, y2b, (y2b+y1c)/2, 2, (tempo2-0.25)*4) #end #if (tempo2 >= 0.5 & tempo2 < 0.75) #local assq = tempo; #local assq2 = tempo; #local r1 = ponto_grafico(2, (y2b+y1c)/2, y1c, y2c, (y2c+y1d)/2, 3, (tempo2-0.5)*4); r1 #end #if (tempo2 >= 0.75 & tempo2 <= 1) ponto_grafico(3, (y2c+y1d)/2, y1d, y2d, (y2d+y1a)/2, 4, (tempo2-0.75)*4) #end #end union { object { eixos (5)} object {graficos_create4()} object { sphere { posicao(clock), 0.3 } } } #declare centro_cena = < 2.00, 3.00, 2.00 >; #declare raio_cena = 10.0; #declare dir_camera = < 1000.001, 0000.001, 000.00 >; #declare dist_camera = 160.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , y, intens_luz)