prologues := 2 ; defaultfont := "cmr10" ; input boxes ; beginfig(1) boxjoin(a.se = b.sw ; a.ne = b.nw) ; % a et b sont les noms conventionnels de deux boîtes consécutives boxit.zero (btex \strut\quad etex) ; boxit.un (btex \strut\quad etex) ; boxit.deux (btex \strut $\ldots$ etex) ; boxit.trois (btex \strut\quad etex) ; boxit.quatre(btex \strut $\ldots$ etex) ; zero.c = (0,0) ; % pourquoi pas ? numeric largeur ; largeur = xpart (un.c - zero.c) ; drawboxed(zero,un,deux,trois,quatre) ; % les huit points cardinaux des boîtes : n, ne, e, se, s, sw, w, nw fill (quatre.ne -- quatre.se -- (quatre.se shifted (4bp,0)) -- (quatre.ne shifted (4bp,0)) -- cycle) shifted (-2bp,0) withcolor white ; draw ((0,0) -- (largeur,0)) shifted trois.ne ; draw ((0,0) -- (largeur,0)) shifted trois.se ; draw ((largeur,0) -- (largeur + 2cm,0)) shifted trois.ne dashed evenly ; draw ((largeur,0) -- (largeur + 2cm,0)) shifted trois.se dashed evenly ; label.urt("0",zero.nw) ; label.urt("1",un.nw) ; label.urt(btex $n$ etex,trois.nw) ; label.top(btex \rlap{Table de hachage} etex,zero.nw shifted (0,16pt)) ; dotlabel("",trois.c) ; boxjoin(a.se = b.sw ; a.ne = b.nw) ; boxit.b0(btex $(x_0,y_0)$ etex) ; boxit.p0(" ") ; boxjoin(a.se = b.sw ; a.ne = b.nw) ; boxit.b1(btex $(x_1,y_1)$ etex) ; boxit.p1(" ") ; boxjoin(a.se = b.sw ; a.ne = b.nw) ; boxit.b2(btex $(x_2,y_2)$ etex) ; boxit.p2(" ") ; pair delta ; delta = (23mm,0) ; b0.c = trois.c shifted (-5mm,-35mm) ; b1.c = b0.c shifted delta ; b1.c = 1/2[b0.c,b2.c] ; drawboxed(b0,p0,b1,p1,b2,p2) ; boxjoin(a.se = b.sw ; a.ne = b.nw) ; boxit.bp(btex $(x_p,y_p)$ etex) ; boxit.pp(" ") ; bp.c = b2.c shifted (b2.c - b0.c) ; drawboxed(bp,pp) ; drawarrow trois.c{down}..{down}b0.c cutafter bpath b0 ; dotlabel("",p0.c) ; dotlabel("",p1.c) ; dotlabel("",p2.c) ; dotlabel("",pp.c) ; drawarrow p0.c{up}..{down}b1.c cutafter bpath b1 ; drawarrow p1.c{up}..{down}b2.c cutafter bpath b2 ; drawarrow p2.c{up}..{down}(b2.c shifted delta) cutafter (bpath b2) shifted delta ; drawarrow (1/2[p2.c,pp.c]){up}..{down}bp.c cutbefore (bpath p2) shifted delta cutafter bpath bp ; drawarrow pp.c{up}..{down}(bp.c shifted delta) ; % la terre z0 = bp.c shifted delta ; draw z0 - (4mm,0) -- z0 + (4mm,0) ; picture etape ; etape = currentpicture ; % garde le dessin courant currentpicture := nullpicture ; % on efface tout et on recommence path pochoir ; pochoir = z0 - (4mm,0) -- z0 + (4mm,0) -- z0 + (4mm,-2mm) -- z0 - (4mm,2mm) -- cycle ; for i=0 upto 14: draw ((0,0)--(-4mm,-4mm)) shifted ((z0 - (4mm,0)) shifted (i*mm,0)) ; endfor clip currentpicture to pochoir ; addto currentpicture also etape ; endfig ; end