prologues := 0; input TEX.mp; def gridedge(expr x,y) = (100*x - 50, -100 * y + 50) enddef; def gridp(expr x,y) = (100*x, -100 * y) enddef; % The corner at s,t (1,-1) def gridc(expr x,y,s,t) = (gridp(x,y) + 45*(s,t)) enddef; vardef Tlev(expr lev) = if lev = 0: TEX( "$T_n$") else: TEX( "$T_{n-"&(decimal lev)&"}$") fi enddef; cornermeas = 5pt; def stlabel(expr x, y, side) = (TEX("$\eqalign{(s_0 + " & (decimal x) & "/" & (decimal side) &",\cr " & "t_0 + " & (decimal y) & "/" & (decimal side) &")}$" ) scaled .8) enddef; vardef drawlev(expr lev, side, xoffs, yoffs) = for x := 0 upto side-1: for y := 0 upto side-1: addto currentpicture also Tlev(lev) shifted gridp(xoffs+x,yoffs+y); draw gridc(xoffs+x,yoffs+y, -1, -1) -- gridc(xoffs+x,yoffs+y, -1, 1) -- gridc(xoffs+x,yoffs+y, 1, 1) -- gridc(xoffs+x,yoffs+y, 1, -1) -- cycle; dotlabel.urt( stlabel(x, y, side), gridc(xoffs+x,yoffs+y, -1, -1) ); dotlabel.ulft( stlabel(x+1, y, side), gridc(xoffs+x,yoffs+y, 1, -1) ); dotlabel.lrt( stlabel(x, y+1, side), gridc(xoffs+x,yoffs+y, -1, 1) ); dotlabel.llft( stlabel(x+1, y+1, side), gridc(xoffs+x,yoffs+y, 1, 1) ); endfor; endfor; enddef; beginfig(1); maxx = 7; for x := 0 upto maxx: draw gridedge(x,0) -- gridedge(x,4); endfor; for y := 0 upto 4: draw gridedge(0,y) -- gridedge(maxx,y); endfor; drawlev(2, 4, 0, 0); drawlev(1, 2, 5, 0); % drawlev(0, 1, 8, 0); endfig; end