\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
input colorbrewer-cmyk
% a polygon of n sides on a given path
vardef poly expr n of p =
   save x, y;
   z0 = point 0 of p;
   z1 = point 1 of p;
   for i=2 upto n-1:
       z[i] = z[i-2] rotatedabout(z[i-1], 180(2/n-1));
   endfor
   for i=0 upto n-1: z[i] -- endfor cycle
enddef;
vardef centroid(expr P) =
   (origin for i=1 upto length P: + point i of P endfor) / length P
enddef;
beginfig(1);
   path t[], s[];
   s1 = poly 4 of (origin -- 42 dir 15);
   t1 = poly 3 of subpath (2, 1) of s1;
   t2 = poly 3 of subpath (3, 2) of s1;
   t3 = poly 3 of subpath (2, 1) of t1;
   t4 = poly 3 of subpath (2, 1) of t2;
   s2 = poly 4 of subpath (2, 1) of t4;

   picture unit;
   unit = image(
       fill s1 withcolor Oranges 8 5;
       fill t1 withcolor Blues 8 4;
       fill t4 withcolor Blues 8 3;
       fill t3 withcolor Greens 8 4;
       fill t2 withcolor Greens 8 3;
       fill s2 withcolor Reds 8 5;
       forsuffixes $=s1, t1, s2, t2, t3, t4:
           pair m; m = centroid($);
           for i=1 upto length $:
               draw point i - 1/2 of $ -- m
                   withpen pencircle scaled 3/2 withcolor Spectral 3 2;
           endfor
       endfor
   );

   pair u, v;
   u = point 2 of t2 - point 0 of s1;
   v = point 2 of t3 - point 0 of s1;

   for i=0 upto 6:
       for j=0 upto 9:
           draw unit shifted (i*u + j*v);
       endfor
   endfor

endfig;
\end{mplibcode}
\end{document}