\documentclass{standalone} \usepackage{luamplib} \begin{document} \mplibtextextlabel{enable} \begin{mplibcode} input geometry-tangent-times vardef adjust_time(expr tt, AA, BB) = tt + 1/45 angle (point 0 of AA - center AA) - 1/45 angle (point 0 of BB - center BB) enddef; beginfig(1); path A, B; % randomly rotated to show off "adjust_time" A = fullcircle scaled 144 rotated uniformdeviate 360; B = fullcircle scaled 60 shifted 240 right rotated 36; numeric R, r; R = abs (point 0 of A - center A); r = abs (point 0 of B - center B); path C; C = fullcircle scaled (2R+2r) shifted center A; % NB +ve numeric t, t', t'', u, u', u''; (t, u) = tangent_times(C, center B); t' = adjust_time(t, C, A); u' = adjust_time(u, C, A); t'' = adjust_time(t + 4, C, B); % Note the plus fours u'' = adjust_time(u + 4, C, B); draw A withpen pencircle scaled 2 withcolor 3/4[blue, white]; draw B withpen pencircle scaled 2 withcolor 3/4[blue, white]; draw C withpen pencircle scaled 1 withcolor 3/4[blue, white]; draw subpath (t', u') of A -- subpath (u'', t'') of B -- cycle; draw center B -- subpath (t, u) of C -- cycle dashed evenly; draw center B -- point t'' of B dashed withdots scaled 1/2; draw center B -- point u'' of B dashed withdots scaled 1/2; draw point t of C -- point t' of A dashed withdots scaled 1/2; draw point u of C -- point u' of A dashed withdots scaled 1/2; dotlabel.ulft(btex $t$ etex, point t of C); dotlabel.lrt (btex $t'$ etex, point t' of A); dotlabel.lrt (btex $t''$ etex, point t'' of B); dotlabel.lrt (btex $u$ etex, point u of C); dotlabel.ulft(btex $u'$ etex, point u' of A); dotlabel.ulft(btex $u''$ etex, point u'' of B); drawdot center B withpen pencircle scaled dotlabeldiam; drawoptions(withcolor 1/2[blue, white]); label.urt(btex $A$ etex, point 1/2(t'+u'- 7.6) of A); label.rt (btex $B$ etex, point 1/2(t''+u''- 2) of B); label.urt(btex $C$ etex, point 1/2(t+u-8) of C); drawoptions(); endfig; \end{mplibcode} \end{document}