\documentclass{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
vardef urp(expr n) =
   save a; numeric a; a = 90/n;
   for i=0 upto n-1:
       1/2 up rotated (a * 4i) {left rotated (a + a * 4i)} .. {left rotated (3a + a * 4i)}
   endfor cycle
enddef;
vardef through@#(expr a, b) = save d; numeric d; d = abs(a-b);
   (1+@#/d)[b, a] -- (1+@#/d)[a, b] enddef;
input colorbrewer-rgb
beginfig(1);
   path p, c; p = urp(5) scaled 320; c = fullcircle scaled 320;

   pair A, B, C;
   A = point 0 of p;
   B = point 1 of p;
   C = point 3 of p;

   drawoptions(withcolor 7/8);
   draw c;
   draw through 42(origin, A);
   draw through 42(origin, B);
   draw through 42(C, A);
   draw through 42(C, B);
   draw through 42(B, B shifted 64 up);

   forsuffixes $=origin, B:
       draw (left--right) scaled 2 rotated 13 shifted $ shifted 42 up;
       draw (left--right) scaled 2 rotated 13 shifted $ shifted 41 up;
   endfor
   ahangle := 30;
   forsuffixes $=A, B:
       drawarrow (reverse unitsquare scaled 5 -- 48 up) rotated angle ($ - C) shifted $;
   endfor

   drawoptions();
   draw p withcolor Reds 8 7;
   numeric a; a = 18;
   label("$\alpha$", 32 dir 11/2 a shifted A);
   label("$\alpha$", 32 dir 31/2 a shifted A);
   label("$\alpha$", 32 dir 17/2 a shifted B);
   label("$\alpha$", 32 dir 37/2 a shifted B);
   label("$2\alpha$", 28 dir 14/2 a shifted C);
   label("$3\alpha$", 24 dir 13/2 a shifted B);
   label("$4\alpha$", 20 dir 7a);

   dotlabel.urt("$A$", A);
   dotlabel.lrt("$B$", B);
   dotlabel.lrt("$C$", C);
   dotlabel.urt("$O$", origin);

   label.lft("$r$", 1/2 A);

label.bot(btex \vbox{\hsize 4in \small\noindent
This proof only works for Reuleaux polygons with an odd number of sides,
because otherwise the point $C$ does not (quite) lie on the circle.\strut} etex,
point 1/2 of bbox currentpicture shifted 21 down);

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