// Last edited on 2023-12-23 18:26:54 by stolfi // ============================Variaveis========================================== #declare raio = 0.4; #declare tamanho_terminal = raio*2; #declare raio_terminal = raio / 2; // ============================CORES E TEXTURAS========================================== background{ color rgb < 0.75, 0.80, 0.85 > } #declare tx_plastico = texture{ pigment{ color rgb < 0.80, 0.80, 1.00 > } finish{ diffuse 0.8 ambient 0.2 } } #declare tx_fosca = texture{ pigment{ color rgb < 1.00, 0.80, 0.10 > } finish{ diffuse 0.9 ambient 0.1 } } #declare tx_xadrez = texture{ pigment{ checker color rgb < 0.10, 0.32, 0.60 >, color rgb < 1.00, 0.97, 0.90 > } finish{ diffuse 0.9 ambient 0.1 } scale 2.0 } // =======================Componentes da Cena============================================== #declare bolinha = sphere{ < 0,0,0 >, 0.60 } #declare bolota = sphere{ < 0,0,0 >, 1.50 } #declare bola = sphere{ < 0.00, 0.00, 0.00 >, raio texture{ tx_plastico } } #declare pino = cylinder{ < -2.00, +2.00, -1.00 >, < +2.00, -2.00, +1.00 >, 0.75 texture{ tx_fosca } } #declare furo = cylinder{ < 0, 0, 0 >, < 0, 3, 0 >, 0.15*raio texture{ tx_fosca } } #declare MyCone = cone { <1, -1, 0>, 1.0 // , center & radius of one end <1, 1, 0>, 0.25 // , center & radius of the other end } #declare caixa = box{<0,0,0>, <3,+3,3> texture {tx_fosca}} #declare caixa2 = box{<0,0,0>, <3,3,3> texture {tx_fosca}} #declare chao = box{ <-20,-20,-1>, <+20,+20,0> } // ============================Macros========================================== #macro interpola1 (tx, t0, v0, t1, v1) #local ss = (tx - t0) / (t1 - t0); #local vv = (1 - ss) * v0 + ss * v1; vv #end #macro teste_interpola_1 (p0, p1, n, raio) union { #declare k = 0; #while (k <= n) #local canto = interpola1(k, 0, p0, n-1, p1); sphere { canto, raio texture { tx_fosca } } #declare k = k + 1; #end } #end #macro interpola3(tprincipal, ta, tb, v0, v1, v2, v3) #local v01 = interpola1(tprincipal, ta, v0, tb, v1); #local v12 = interpola1(tprincipal, ta, v1, tb, v2); #local v23 = interpola1(tprincipal, ta, v2, tb, v3); #local v012 = interpola1(tprincipal, ta, v01, tb, v12); #local v123 = interpola1(tprincipal, ta, v12, tb, v23); #local v0123 = interpola1(tprincipal, ta, v012, tb, v123); v123; #end #include "bezpoly.inc" #macro teste_interpola_3 (p0, p1, p2, p3, n, raio) union { bezpoly(p0, p1, p2, p3, 0.2*raio) #declare k = 0; #declare ta = 0; #declare tb = n - 1; #while (k <= n) #local canto = interpola3(k, ta, tb, p0, p1, p2, p3); sphere { canto, raio texture {tx_fosca} } #declare k = k + 1; #end } #end #macro interpola3_multi(tempo, pinicio, n, p1, p2, pfim) //Consideração: p1 e p2 - arrays de pontos //definir em que parte da curva estará #local k = int(tempo); //#debug concat("** k=", str(k,0,0), "\n") #if(k=0) #local q0 = pinicio; #local q1 = p1[0]; #local q2 = p2[0]; #local q3 = (p2[0] + p1[1])/2.0; #end #if(k=n) #local q0 = (p2[0] + p1[1])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = pfim; #end #if((k0)) #local q0 = (p2[k-1] + p1[k])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = (p2[k] + p1[k])/2.0; #end #if(k>n) #local k = n; #local q0 = (p2[0] + p1[1])/2.0; #local q1 = p1[k]; #local q2 = p2[k]; #local q3 = pfim; #end //#debug concat("!! k=", str(k,0,0), "\n") #local pt = interpola3(tempo, k, k+1, q0, q1, q2, q3); //#local pt = interpola3(k, ta, tb, p0, p1, p2, p3); //#local pt = <1,2,3>; pt #end #macro teste_interpola3_multi() //#debug concat("** k=oi", "\n") #local n = 4; // Prof. #local p1 = array[n]; #local pinic = <6,1,3>; #local p1[0] = <0,0,0>; #local p1[1] = <-1,-1,-1>; #local p1[2] = <2,1,-2>; #local p1[3] = <2,0,3>; // Prof. #local p2 = array[n]; #local p2[0] = <3,3,3>; #local p2[1] = <-4,2,-4>; #local p2[2] = <5,2,5>; #local p2[3] = <2,-1,2>; // Prof. #local pfim = <7,+7,7>; union { #declare k = 0; #while (k < 10*n) //#local canto = interpola3(k, ta, tb, p0, p1, p2, p3); #local canto = interpola3_multi(k/10,pinic , n, p1, p2, pfim); sphere { canto, raio texture {tx_fosca} } #declare k = k + 1; #end } #end #local org = array[6]; #local org[0] = 0; #local org[1] = 2; #local org[2] = 2; #local org[3] = 3; #local org[4] = 1; #local org[5] = 3; #local dest = array[6]; #local dest[0] = 2; #local dest[1] = 0; #local dest[2] = 1; #local dest[3] = 0; #local dest[4] = 3; #local dest[5] = 3; #macro gera_grafo(nv, ne, org, dst, D, na, nb) #local k = 0; #local pa = array[nv]; #while (k; #declare raio_cena = 7.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 5*raio_cena; #declare intens_luz = 1.20; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)