background{ color rgb < 0.75, 0.80, 0.85 > } #include "eixos.inc" #include "grau_1.inc" #include "grau_2.inc" #include "grau_3.inc" #include "grau_4.inc" #local tx = texture{ pigment{ color rgb < 0.128, 0.128, 0.128 > } finish{ diffuse 0.9 ambient 0.1 } } #macro interpola1(ti, t0, v0, t1, v1) #local ss = (ti - t0)/(t1 - t0); #local vv = ((1 - ss) * v0) + (ss * v1); vv #end #macro interpola3(ti, ta, tb, v0, v1, v2, v3) #local v01 = interpola1(ti, ta, v0, tb, v1); #local v02 = interpola1(ti, ta, v1, tb, v2); #local v03 = interpola1(ti, ta, v2, tb, v3); #local v012 = interpola1(ti, ta, v01, tb, v02); #local v123 = interpola1(ti, ta, v02, tb, v03); #local v0123 = interpola1(ti, ta, v012, tb, v123); v0123 #end #macro interpola3_multi(ti, n, pini, p1, p2, pfin) #local k = int(ti); #if (k = 0) #local q0 = pini; #else #local q0 = (p2[k-1]+p1[k])/2; #end #local q1 = p1[k]; #local q2 = p2[k]; #if (k != n - 1) #local q3 = (p2[k]+p1[k+1])/2; #else #local q3 = pfin; #end #local pt = interpola3(ti, k, k+1, q0, q1, q2, q3); pt #end #macro conecta(na, nb, pini, tini, pfin, tfin) #local s = seed(321); #local raio = 0.2; #local p1 = array[na]; #local p2 = array[na]; #local p1[0] = tini; #for(i,1,na-1) #local wi = rand(s)*D; #local xi = rand(s)*D; #local yi = rand(s)*D; #local pos = ; #local p1[i] = pos; #end #local p2[na-1] = tfin; #for(i,0,na-2) #local wi = rand(s)*D; #local xi = rand(s)*D; #local yi = rand(s)*D; #local pos = ; #local p2[i] = pos; #end #local ti = 0; #while (ti < na) #local centro = interpola3_multi(ti, na, pini, p1, p2, pfin); sphere{ centro, raio texture{ tx } } #local ti = ti + na/nb; #end #end #macro pega_graus(nv, ne, org, dest) #local deg = array[nv]; #for(i,0,ne-1) #local vo = org[i]; #local vd = dest[i]; #ifdef (deg[vo]) #local deg[vo] = deg[vo] + 1; #else #local deg[vo] = 1; #end #ifdef (deg[vd]) #local deg[vd] = deg[vd] + 1; #else #local deg[vd] = 1; #end #end deg #end #macro gera_arestas(ne, org, dst, v_pos) #for (i, 0, ne-1) #local v1 = org[i]; #local v2 = dst[i]; #local v1_pos = v_pos[v1]; #local v2_pos = v_pos[v2]; conecta(2, 100, v1_pos, v1_pos, v2_pos, v2_pos) #end #end #macro gera_grafo(nv, ne, org, dst, D, na, nb) #local s = seed(1324); #local deg = pega_graus(nv, ne, org, dst); #local v_pos = array[nv]; #for(i,0,nv-1) #local wi = rand(s)*D; #local xi = rand(s)*D; #local yi = rand(s)*D; #local pos = ; #switch (deg[i]) #case (1) object { grau_1() translate pos scale 1} #break #case (2) object { grau_2() translate pos scale 1 } #break #case (3) object { grau_3() translate pos scale 1 } #break #else object { grau_4() translate pos scale 1 } #end #local v_pos[i] = pos; #end gera_arestas(ne, org, dst, v_pos) #end #declare nv = 4; #declare ne = 6; #declare org = array[6] {0, 2, 2, 3, 1, 3}; #declare dst = array[6] {2, 0, 1, 0, 3, 3}; #declare D = 10; #declare na = 0; #declare nb = 0; gera_grafo(nv, ne, org, dst, D, na, nb) #include "camlight.inc" #declare centro_cena = < 0.00, 1.00, 1.00 >; #declare raio_cena = 20.0; #declare dir_camera = < 35.00, 20.00, 10.00 >; #declare dist_camera = 50*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)