/* tp07 Filipe Ramos de Castro RA032849 */ #include "eixos.inc" #include "camlight.inc" #macro interpola(ta, va, tb, vb, tt) #local s = (tt - ta) / (tb - ta); ((1 - s)*va+s*vb) #end #declare ycam = interpola(0, -2.0, 1, 2.0, clock); #declare centro_cena = < 0.00, ycam, 0.00 >; #declare raio_cena = 10.0; #declare dir_camera = < 14.00, 7.00, 4.00 >; #declare dist_camera = 16.0; #declare intens_luz = 1.00; camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz) background{ color rgb < 1, 1, 1 > } #macro pe() cylinder{ <0, 0, 0>, <0, 0.7, 0>, 0.07 texture{ pigment{ color rgb <1, 0, 1> } finish{ ambient 0.3 } } } #end #macro anteperna(teta) union{ sphere { <0, 0, -0.75>, 0.15 } cylinder{ <0, 0, 0>, <0, 0, -0.7>, 0.1 texture{ pigment{ color rgb <0, 0, 1> } finish{ ambient 0.3 } } } object{ pe() rotate teta*x translate <0, 0.07, -0.75> } } #end #macro perna(teta, beta) union{ sphere{ <0, 0, -0.75>, 0.15 } cylinder{ <0, 0, 0.1>, <0, 0, -0.7>, 0.1 texture{ pigment{ color rgb <0, 1, 0> } finish{ ambient 0.3 } } } object{ anteperna(teta) rotate beta*x translate -0.7*z } } #end #macro saltopede(h, teta, beta, alfa) union{ sphere{ <0, 0, 0>, 0.5 texture{ pigment{ color rgb <1, 0, 0> } finish{ ambient 0.3 } } } object{ perna(teta, beta) rotate alfa*x translate -0.5*z } translate h*z } #end #macro armacao(fase) // fase = 0 -> inicio de movimento // fase = 1 -> fim de movimento // variaveis de tempo #declare t0 = 0.000; #declare t1 = 0.500; #declare t2 = 1.000; //angulo entre pe e anteperna #declare teta0 = 45; #declare teta1 = 60; #declare teta2 = 0; //angulo entre anteperna e perna #declare beta0 = -90; #declare beta1 = -130; #declare beta2 = -10; //angulo entre perna e corpo #declare alfa0 = 45; #declare alfa1 = 70; #declare alfa2 = 8; //altura medida em relacao ao centro do corpo #declare altura0 = 0; #declare altura1 = -0.37; #declare altura2 = 0.5; #if((fase >= t0) & (fase <= t1)) #declare teta = interpola(t0, teta0, t1, teta1, fase); #declare beta = interpola(t0, beta0, t1, beta1, fase); #declare alfa = interpola(t0, alfa0, t1, alfa1, fase); #declare altura = interpola(t0, altura0, t1, altura1, fase); #end #if((fase >= t1) & (fase <= t2)) #declare teta = interpola(t1, teta1, t2, teta2, fase); #declare beta = interpola(t1, beta1, t2, beta2, fase); #declare alfa = interpola(t1, alfa1, t2, alfa2, fase); #declare altura = interpola(t1, altura1, t2, altura2, fase); #end object{ saltopede(altura, teta, beta, alfa) } #end #macro voo(h, fase) // variaveis de tempo #declare t0 = 0.000; #declare t1 = 0.250; #declare t2 = 0.500; #declare t3 = 0.750; #declare t4 = 1.000; //angulo entre pe e anteperna #declare teta0 = 0; #declare teta1 = -30; //angulo entre anteperna e perna #declare beta0 = -10; #declare beta1 = 0; //angulo entre perna e corpo #declare alfa0 = 8; #declare alfa1 = 0; #declare altura0 = h/3; #declare altura1 = 2*h/3; #declare altura2 = h; #declare altura3 = 2*h/3; #declare altura4 = h/3; #if((fase >= t0) & (fase <= t1)) #declare teta = interpola(t0, teta0, t1, teta1, fase); #declare beta = interpola(t0, beta0, t1, beta1, fase); #declare alfa = interpola(t0, alfa0, t1, alfa1, fase); #declare altura = interpola(t0, altura0, t1, altura1, fase); #end #if((fase >= t1) & (fase <= t2)) #declare teta = teta1; #declare beta = beta1; #declare alfa = alfa1; #declare altura = interpola(t1, altura1, t2, altura2, fase); #end #if((fase >= t2) & (fase <= t3)) #declare teta = teta1; #declare beta = beta1; #declare alfa = alfa1; #declare altura = interpola(t2, altura2, t3, altura3, fase); #end #if((fase >= t3) & (fase <= t4)) #declare teta = interpola(t3, teta1, t4, teta0, fase); #declare beta = interpola(t3, beta1, t4, beta0, fase); #declare alfa = interpola(t3, alfa1, t4, alfa0, fase); #declare altura = interpola(t3, altura3, t4, altura4, fase); #end object{ saltopede(altura, teta, beta, alfa) } #end #macro voo_geral(h, p, q, fase) #local r = interpola(0, p, 1, q, fase); object { voo(h, fase) translate r } #end #macro armacao_geral(p, fase) object{ armacao(fase) translate p } #end #macro quadro(tt) #local t0 = 0.000; #local t1 = 0.200; #local t2 = 0.500; #local t3 = 0.700; #local t4 = 1.000; #local A = <0, -2, 0 >; #local B = <0, 0, 2 >; #local C = <0, 2, 0 >; #if((tt >= t0) & (tt <= t1)) #local fase = interpola(t0, 0, t1, 1, tt); object{ armacao_geral(A, fase) } #end #if((tt >= t1) & (tt <= t2)) #local fase = interpola(t1, 0, t2, 1, tt); object{ voo_geral(2, A, B, fase) } #end #if((tt >= t2) & (tt <= t3)) #local fase = interpola(t2, 0, t3, 1, tt); object{ armacao_geral(B, fase) } #end #if((tt >= t3) & (tt <= t4)) #local fase = interpola(t3, 0, t4, 1, tt); object{ voo_geral(2, B, C, fase) } #end #end union{ //object{ eixos(5.00) translate -1.3*z} object{ box{ <-20,-20,-1>, <+20,+20,0> } translate <0, 0, -1.7> texture{ pigment{ color rgb <0.9, 0.9, 0.9> } finish{ ambient 0.6 } } } object{ quadro(clock) } rotate 25*z rotate -15*y rotate 7*x scale 2 }