\documentclass{standalone} \usepackage{luamplib} \begin{document} \mplibtextextlabel{enable} \begin{mplibcode} numeric r, theta; r = sqrt 1/2; theta = 45; vardef dragon(expr level, a, b) = if level > 0: save p; pair p; p = r[a, b] rotatedabout(a, theta); dragon(level - 1, a, p) & reverse dragon(level - 1, b, p) else: a .. b fi enddef; vardef rounded_corners expr p = save r, n; numeric r, n; r = 1/3; n = length p; subpath (0, 1-r) of p for t=1 upto n-1: .. subpath (t+r, t+1-r) of p endfor .. subpath (n-r, n) of p enddef; beginfig(1); path d; d = dragon(15, origin, 240 right); draw d withpen pencircle scaled 1/4 withcolor (.2, .2, .7); label.top("The dragon curve at level 15", point 1/3 of bbox currentpicture); draw rounded_corners dragon(10, origin, 240 right) shifted 280 down withcolor .54 red; label.top("\dots\ and at level 10 with rounded corners", point 1/3 of bbox currentpicture); endfig; \end{mplibcode} \end{document}