def ngon(expr n, x, y, r) = save i; path p; p:=(x+r*cosd(90),y+r*sind(90)) for i=1 upto n: --(x+r*cosd(90+i*(360/n)),y+r*sind(90+i*(360/n))) endfor; draw p; enddef; def ngons(expr n, x, y, r) = save ra; save rb; ngon(n,x,y,r); rb:=r/sqrt(n); ra:=r-rb; for i=1 upto n: ngon(n,x+ra*cosd(90+i*(360/n)),y+ra*sind(90+i*(360/n)),rb) endfor; enddef; def dgons(expr n, k, x, y, r) = save ra; save rb; ngon(n,x,y,r); rb:=r/sqrt(k); ra:=r-rb; for i=1 upto n: ngon(n,x+ra*cosd(90+i*(360/k)),y+ra*sind(90+i*(360/k)),rb) endfor; enddef; numeric a,r; a:=1cm; r:=5*a; beginfig(2) ngon(3,0,0,r); endfig; beginfig(3) ngons(3,0,0,r); endfig; beginfig(4) ngons(4,0,0,r); endfig; beginfig(5) ngons(5,0,0,r); endfig; beginfig(6) ngons(6,0,0,r); endfig; beginfig(7) ngons(7,0,0,r); endfig; beginfig(8) ngons(8,0,0,r); endfig; beginfig(9) ngons(9,0,0,r); endfig; beginfig(10) ngons(10,0,0,r); endfig; beginfig(11) ngons(11,0,0,r); endfig; beginfig(12) ngons(12,0,0,r); endfig; beginfig(13) ngons(13,0,0,r); endfig; beginfig(14) ngons(14,0,0,r); endfig; beginfig(15) ngons(15,0,0,r); endfig; beginfig(16) ngons(16,0,0,r); endfig; beginfig(17) dgons(4,2,0,0,r); endfig; beginfig(18) dgons(6,2,0,0,r); endfig; beginfig(19) dgons(6,3,0,0,r); endfig; beginfig(20) dgons(8,4,0,0,r); endfig; beginfig(21) dgons(8,2,0,0,r); endfig; beginfig(22) dgons(9,3,0,0,r); endfig; \end