// Last edited on DATE TIME by USER
// Processed by remove-cam-lights
#include "textures.inc"
#include "eixos.inc"
#include "colors.inc"
#include "retalho.inc"
background{ color White }
#declare chassi =
union{
object{box{<0,0,0>, <4,7,2>} pigment {color Red} }
object{box{<0,2,2>, <4,7,3.5>} pigment {color Green}}
}
#macro interpole(ta, va, tb, vb, tt)
#local s = (tt-ta)/(tb-ta);
((1-s)*va+s*vb)
#end
#macro interpole2(ta, A, tb, B, tt)
#local s = (tt-ta)/(tb-ta);
((1-s)*A + s*B)
#end
#macro interpole4(A, B, C, D, tA, tD, tt)
#local AB = interpole2(tA, A, tD, B, tt);
#local BC = interpole2(tA, B, tD, C, tt);
#local CD = interpole2(tA, C, tD, D, tt);
#local ABC = interpole(tA, AB, tD, BC, tt);
#local BCD = interpole(tA, BC, tD, CD, tt);
#local ABCD = interpole(tA, ABC, tD, BCD, tt);
(ABCD)
#end
#macro projecao(A)
(<0, A.y, A.z>)
#end
#macro deforma(p)
#local cons = -0.5+sin(pi*p.y);
#if(p.y < 8)
#local pd =
;
#else
#local pd = <0, -3 + p.y*0.5, p.z *(1 + cons)>;
#end
(p + pd)
#end
#macro deforma2(p)
#local cons = sin(pi*p.y/4);
#local pd = ;
(p + pd)
#end
#macro lataria(
A01, A02,
A11, A12, A21, A22,
B11, B12, B21, B22,
C11, C12, C21, C22,
C31, C32
)
#local A00 = projecao(A01);//<0,0,0.75>;
#local A03 = projecao(A02);//<0,0,3>;
#local A10 = projecao(A11); //<0,2,0.25>;
#local A13 = projecao(A12); //<0,2,3.75>;
#local A20 = projecao(A21);//<0,4,0>;
#local A23 = projecao(A22);//<0,4,6>;
#local B10 = projecao(B11);//<0,8,0>;
#local B13 = projecao(B12);//<0,8,6.5>;
#local B20 = projecao(B21);//<0,10,0.25>;
#local B23 = projecao(B22);//<0,10,5.4>;
#local C10 = projecao(C11);//<0,14,0.25>;
#local C13 = projecao(C12);//<0,14,4>;
#local C20 = projecao(C21);//<0,15,0>;
#local C23 = projecao(C22);//<0,15,5.4>;
#local C30 = projecao(C31);//<0,16,0>;
#local C33 = projecao(C32);//<0,16,5.4>;
#local AB0 = (A20+B10)/2;
#local AB1 = (A21+B11)/2;
#local AB2 = (A22+B12)/2;
#local AB3 = (A23+B13)/2;
#local BC0 = (B20+C10)/2;
#local BC1 = (B21+C11)/2;
#local BC2 = (B22+C12)/2;
#local BC3 = (B23+C13)/2;
#local rg = 0.000001;
union{
object{
retalho(
A00,A01,A02,A03,
A10,A11,A12,A13,
A20,A21,A22,A23,
AB0,AB1,AB2,AB3,
rg,
pigment{color Blue}, pigment{ color Red }
)
}
object{
retalho(
AB0,AB1,AB2,AB3,
B10,B11,B12,B13,
B20,B21,B22,B23,
BC0,BC1,BC2,BC3,
rg,
pigment{color Blue}, pigment{ color Green }
)
}
object{
retalho(
BC0,BC1,BC2,BC3,
C10,C11,C12,C13,
C20,C21,C22,C23,
C30,C31,C32,C33,
rg,
pigment{color Blue}, pigment{ color Blue }
)
}
}
#end
#declare A01 = <3,0,0.75>;
#declare A02 = <3,0,3>;
#declare A11 = <3,2,0.25>;
#declare A12 = <3,2,3.75>;
#declare A21 = <3,4,0>;
#declare A22 = <3,4,6>;
#declare B21 = <3,10,0.25>;
#declare B22 = <3,10,5.4>;
#declare B11 = <3,8,0>;
#declare B12 = <3,8,6.5>;
#declare C11 = <3,14,0.25>;
#declare C12 = <3,14,4>;
#declare C21 = <3,15,0>;
#declare C22 = <3,15,5.4>;
#declare C31 = <3,16,0>;
#declare C32 = <3,16,5.4>;
#macro lado()
union{
object{
lataria(
A01, A02,
A11, A12, A21, A22,
B11, B12, B21, B22,
C11, C12, C21, C22,
C31, C32
)
}
object{
box { <0,0,0>, <5,5,0.5> }
translate <2.5,5,3>
pigment{ color Gray }
}
}
#end
#macro aviao()
union{
object{lado()}
object{lado() scale <-1,1,1>}
}
#end
#macro caminho(tt)
#declare A = <0, 10, -5>;
#declare B = <0, 30, 0>;
#declare C = <0, 15, 30>;
#declare D = <0, 30, 40>;
#declare E = <0, 40, 18>;
#declare F = <0, 35, 8>;
#declare G = <0, 10, 10>;
#declare H = <0, 0, 0>;
#declare AB = (A+B)/2;
#declare BC = (B+C)/2;
#declare DE = (D+E)/2;
#declare EF = (E+F)/2;
#declare FG = (F+G)/2;
#declare GH = (G+H)/2;
#declare HA = (H+A)/2;
#if (tt >= 0 & clock < 0.25)
#local res = interpole4(HA, A, B, BC, 0, 0.25, tt);
#end
#if (tt >= 0.25 & tt < 0.50)
#local res = interpole4(BC, C, D, DE, 0.25, 0.50, tt);
#end
#if (tt >= 0.50 & tt < 0.75)
#local res = interpole4(DE, E, F, FG, 0.50, 0.75, tt);
#end
#if (tt >= 0.75 & tt <= 1.0)
#local res = interpole4(FG, G, H, HA, 0.75, 1.05, tt);
#end
(res)
#end
#macro rotacao(tt)
#if (tt >= 0 & clock < 0.25)
#local res = interpole2(0, -30, 0.25, 120.0, tt);
#end
#if (tt >= 0.25 & tt < 0.50)
#local res = interpole2(0.25, 120.0, 0.50, 0.0, tt);
#end
#if (tt >= 0.50 & tt < 0.75)
#local res = interpole2(0.50, 0.0, 0.75, -170.0, tt);
#end
#if (tt >= 0.75 & tt <= 1.0)
#local res = interpole2(0.75, -170, 1.0, -60.0, tt);
#end
(res)
#end
union{
eixos(10)
#local pos = caminho(clock);
#local rot = rotacao(clock);
object{ aviao() scale <1, -1, 1> rotate rot*x translate pos}
}
#include "camlight.inc"
#declare centro_cena = < 0.00, 10.00, 15.00 >;
#declare raio_cena = 50.0;
#declare dir_camera = < 5, -3, 2 >;
#declare dist_camera = 50.0;
#declare intens_luz = 1.00;
camlight(centro_cena, raio_cena, dir_camera, dist_camera , z, intens_luz)