//includes #include "eixos.inc" #include "camlight.inc" #include "retalho.inc" // ====================================================================== // CORES E TEXTURAS 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 } } //Constantes #declare N_Esferas = 50; #declare altura = 2; //roleta para numeros aleatorios #declare roleta = seed(123); // ====================================================================== // DESCRIÇÃO DA CENA // Funcoes: #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 /* //Gera N graficos #macro geraPontosMedios () #local i = 0; #while (i<=N_Graficos) #declare pontosMediosX[i] = i*10/N_Graficos; #declare pontosMediosY[i] = rand(roleta)*10; #local i = i+1; #end #end #macro geraGraficos() #local j = 0; union{ #while (j, 0.1 } texture {tx_branco} } #local j = j+1; #end object { sphere{ , 0.1 } texture {tx_branco} } } #end */ //Grafico #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 () #local y1a = ; #local y2a = ; #local y1b = ; #local y2b = ; #local y1c = ; #local y2c = ; #local y1d = ; #local 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 planos () //Primeiro plano #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>; //Segundo plano #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>; //Pontos comuns #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 // Aqui está a cena, finalmente: union { object { eixos (5)} object {planos() rotate <0,25,0>} object {graficos_create4() translate <-1,-1,-1> } } #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)