\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\begin{mplibcode}
vardef compass_rose(expr shade, highlight) = image(
 drawoptions(withcolor shade);
   draw thelabel("NW" infont defaultfont scaled 3/4, 64 up) rotated +45;
   draw thelabel("NE" infont defaultfont scaled 3/4, 64 up) rotated -45;
   draw thelabel("SE" infont defaultfont scaled 3/4, 64 down) rotated +45;
   draw thelabel("SW" infont defaultfont scaled 3/4, 64 down) rotated -45;
   draw fullcircle scaled 144 withpen pencircle scaled 2;
   for r = 53, 54, 59, 60, 69: draw fullcircle scaled 2r; endfor
   for t=0 step 15 until 350: draw ((53,0) -- (60,0)) rotated t; endfor
   for t=0 step 45 until 350: draw ((69,0) -- (80,0)) rotated t; endfor
   save s; path s; s = 8 right -- 60 up -- 8 left -- cycle;
   for t=0 upto 3: filldraw s rotated (45 + 90t); endfor
   s := s scaled 1.414;
   for t=0 upto 3:
     s := s rotated 90t;
     fill s withcolor background;
     fill subpath (-1/2, 1) of s -- cycle if t=0: withcolor highlight fi;
     draw s;
   endfor
   unfill fullcircle scaled 28; draw fullcircle scaled 28;
   draw origin withpen pencircle scaled dotlabeldiam;
   label("N" infont "cmbx12", 92 up);
   label("S" infont "cmbx12", 92 down);
   label("E" infont "cmbx12", 92 right);
   label("W" infont "cmbx12", 92 left);
 drawoptions();
) enddef;
input colorbrewer-rgb
beginfig(1);
 picture O; O = compass_rose(Blues 8 8, Reds 8 7) scaled 1/2;

 numeric s; pair p; s = 108; p = origin;
 draw O shifted p;
 draw bbox O withcolor 3/4[red, white];
 label.urt(TEX("\small\texttt{bbox P}"), point -1 of bbox O) withcolor 3/4[red, white];

 p := (1s, 0); draw O rotated 30 shifted p; label(TEX("\small\texttt{rotated 30}"),     p shifted 54 down);
 p := (2s,+15); draw O shifted p;            label(TEX("\small\texttt{shifted 15 up}"), p shifted 54 down);

 p := ( 0, -1s); draw O scaled 3/4 shifted p;  label(TEX("\small\texttt{scaled 3/4}"), p shifted 54 down);
 p := (1s, -1s); draw O xscaled 3/4 shifted p;  label(TEX("\small\texttt{xscaled 3/4}"), p shifted 54 down);
 p := (2s, -1s); draw O yscaled 3/4 shifted p;  label(TEX("\small\texttt{yscaled 3/4}"), p shifted 54 down);

 p := ( 0, -2s); draw O slanted 3/4 shifted p;  label(TEX("\small\texttt{slanted 3/4}"), p shifted 54 down);
 p := (1s, -2s); draw O zscaled 3/4 dir 21 shifted p;  label(TEX("\small\texttt{zscaled 3/4 dir 21}"), p shifted 54 down);
 p := (2s, -2s); draw O reflectedabout(up, down) shifted p;  label(TEX("\small\texttt{reflectedabout(up, down)}"), p shifted 54 down);
endfig;
\end{mplibcode}
\end{document}