ferrari

DEF Ferrari (alpha,tx,ty::IsReal) =
(T:<1,2>:<tx,ty> ~ R:<1,2>:alpha):mover
WHERE
mover = (T:2:0.15~R:<2,3>:(PI/2)~S:<1,2>:<-1/8,1/8>~T:1:-1.5):car,
car = (T:2:0.5 ~ STRUCT):< body, T:1:1.5:wheel, T:1:6:wheel >,
body = MKPOL:<verts, cells, pols> * QUOTE:<0.25> COLOR RED,
verts = <<0,0>,<3,0>,<7,0>,<6,2>,<4,2>,<3,1>,<1,1>>,
cells = <<1,2,6,7>,<2,3,4,5,6>>,
pols = <<1,2>>,
wheel = S:<1,2>:<0.5,0.5>:(Circle:1:<18,1>) * QUOTE:<0.25> COLOR BLACK
END;
DEF Sampling (n::IsInt) = (AA:/ ~ DISTR):< 0..n, n >;
DEF background = STRUCT:< (T:<1,2>:<-1,-1> ~ CUBOID):<7,5> COLOR WHITE,
MAP:trajectory:(Intervals:1:40) >;
DEF trajectory = Bezier:S1:<<0,0>,<8,0>,<5,5>,<2,-3>,<0,8>,<0,0>>;
DEF CSpath = (AA:(Curve2CSPath:trajectory ~ [ID]) ~ Sampling):20;
DEF Timepath = 5 scalarVectProd Sampling:20;
DEF out = STRUCT:< background, Ferrari:<0,0,0> >;