\documentclass[border=5mm]{standalone} \usepackage{luamplib} \begin{document} \mplibtextextlabel{enable} \begin{mplibcode} vardef plain_dots(expr boxpath, gap, radius, shade) = save wd, ht, u, v; numeric wd, ht, u, v; wd = arclength subpath (0,1) of boxpath; ht = arclength subpath (1,2) of boxpath; u = wd / round(wd/gap); v = ht / round(ht/gap); save B, R; picture B, R; B = image( draw (down -- right) xscaled 1/2u yscaled 1/2v withpen pencircle scaled 1/4 radius withcolor blue; for x=1 upto round(wd/u): pair p; p = point arctime x * u of boxpath of boxpath; draw p withpen pencircle scaled radius withcolor shade; draw p shifted -1/2(u, v) withpen pencircle scaled radius withcolor shade; draw (left--down--right) xscaled 1/2u yscaled 1/2v shifted p withpen pencircle scaled 1/4 radius withcolor blue; endfor); R = image(for y=0 upto round(ht/v) - 1: pair p; p = point arctime y * v of reverse boxpath of reverse boxpath; draw p withpen pencircle scaled radius withcolor shade; draw p shifted 1/2(-u, v) withpen pencircle scaled radius withcolor shade; draw (up -- left -- down) xscaled 1/2u yscaled 1/2v shifted p withpen pencircle scaled 1/4 radius withcolor blue; endfor draw p shifted 1/2(0, v) -- p shifted (-1/2u, v) withpen pencircle scaled 1/4 radius withcolor blue; ); image( draw B; draw B rotatedabout(center boxpath, 180); draw R; draw R rotatedabout(center boxpath, 180); ) enddef; beginfig(1); path bb; bb = unitsquare xscaled 233 yscaled 144; draw plain_dots(bb, 8, 3, red); endfig; \end{mplibcode} \end{document}