MetaPost Présentation des sources Retour à la page précédente Archive (source + images) Fichier au format texte pour télécharger Imprimer le document sans le menu !

prologues := 2 ;
defaultfont := "ptmr" ;
input boxes ;

beginfig(1) ;
    draw (0,0)--(10,10)--(20,0)--(10,-10)--cycle ;
    draw (0,-10)--(20,-10)--(20,10)--(0,10)--cycle ;
endfig ;

beginfig(2) ;
    draw (0,0)--(20,0){dir30}..{up}(40,40){dir-60}..{right}(60,0) ;
    for i=-5 upto 5:
        draw (0,-80){dir 15i}..(80,-80) ;
    endfor
endfig ;


beginfig(3) ;
    draw (0,0).. controls (100,50) and (-30,70) .. (80,0) ;
    draw (0,0)--(100,50)--(-30,70)--(80,0) dashed evenly ;
endfig ;


beginfig(4) ;
    % tracé du triangle
    z0 = (0,0) ; z1 = (4cm,0) ; z2 = (1cm,3cm) ;
    draw z0--z1--z2--cycle ;
    for i=0 upto 2:
        draw z[i] withpen pencircle scaled 4bp ;
    endfor

    % recherche de l'orthocentre H
    (z3 - z0) rotated 90 = whatever*(z2 - z1) ;
    (z3 - z1) rotated 90 = whatever*(z0 - z2) ;
    dotlabel.top("H",z3) ;

    % recherche du centre 0 du cercle circonscrit
    (z4 - 1/2[z0,z1]) rotated 90 shifted z0 = whatever[z0,z1] ;
    (z4 - 1/2[z1,z2]) rotated 90 shifted z1 = whatever[z1,z2] ;
    dotlabel.top("O",z4) ;
endfig ;


beginfig(5) ;
    z0 = (0,0) ; z1 = (5cm,0) ; z2 = (5cm,5cm) ; z3 = (0,5cm) ;
    transform T ;
    z0 transformed T = 1/4[z0,z1] ;
    z1 transformed T = 1/4[z1,z2] ;
    z2 transformed T =  1/4[z2,z3] ;

    path carre ;
    carre = z0--z1--z2--z3--cycle ;

    fill carre withcolor 0.8white ;
    fill carre transformed T withcolor white ;
    draw carre ; draw carre transformed T ;

    picture dessin ;
    dessin = currentpicture ;
    for i = 1 upto 8:
        dessin := dessin transformed T transformed T ;
        draw dessin ;
    endfor
endfig ;


beginfig(6) ;
    z0 = (0,0) ; z1 = (3cm,0) ;

    label.top("top",z0) ; label.bot("bot",z0) ;
    label.lft("lft",z0) ; label.rt("rt",z0) ;

    labeloffset := 12pt ;

    dotlabel.ulft("ulft",z1) ; dotlabel.urt("urt",z1) ;
    dotlabel.llft("llft",z1) ; dotlabel.lrt("lrt",z1) ;

    labeloffset := 3bp ; % défaut
endfig ;


beginfig(7) ;
    picture texte ;

    label("mesure de texte" infont defaultfont scaled 5,(0,0)) ;
    texte = currentpicture ;

    draw llcorner texte -- lrcorner texte
        -- urcorner texte -- ulcorner texte -- cycle ;
    label.llft("llcorner",llcorner texte) ;
    label.lrt("lrcorner",lrcorner texte) ;
    label.urt("urcorner",urcorner texte) ;
    label.ulft("ulcorner",ulcorner texte) ;
    % et on dispose aussi de center texte
    dotlabel.top("center",center texte) ;
endfig ;


beginfig(8) ;
    path p ;
    pair d ;
    p = (0,0) -- (5cm,0) ;
    d = (0,-5mm) ;

    draw p             dashed withdots ;
    draw p shifted   d dashed withdots scaled 2 ;
    draw p shifted  2d dashed evenly ;
    draw p shifted  3d dashed evenly scaled 2 ;
    draw p shifted  4d dashed evenly scaled 4 ;

    draw p shifted  6d ;
    draw p shifted  7d dashed evenly scaled 4 shifted (6bp,0) ;
    draw p shifted  8d dashed evenly scaled 4 shifted (18bp,0) ;

    draw p shifted 9d dashed dashpattern(on 12bp off 6bp on 3bp off 6bp) ;
endfig ;


beginfig(9) ;
    for i=0 upto 2: z[i] = (0,40i) ; z[i+3]-z[i] = (100,30) ; endfor
    pickup pencircle scaled 18 ;
    linecap := rounded ; draw z0..z3 withcolor .8white ;
    linecap := butt ; draw z1..z4 withcolor .8white ;
    linecap := squared ; draw z2..z5 withcolor .8white ;
    linecap := rounded ; % défaut
    for i=0 upto 5: draw z[i] withpen pencircle scaled 4bp ; endfor

    for i=6 upto 8:
        z[i] = (0,50i) shifted (0,-470) ;
        z[i+3] - z[i] = (60,40) ; z[i+6] - z[i] = (120,0) ;
    endfor
    pickup pencircle scaled 24 ;
    linejoin := rounded ; draw  z6--z9--z12 withcolor .8white ;
    linejoin := mitered ; draw z7--z10--z13 withcolor .8white ;
    linejoin := beveled ; draw z8--z11--z14 withcolor .8white ;
    linejoin := rounded ; % défaut
    for i=6 upto 14: draw z[i] withpen pencircle scaled 4bp ; endfor
endfig ;

beginfig(10) ;
    drawarrow (0,0){up}..{right}(20,20) ;
    drawarrow reverse((20,20){down}..{right}(40,0)) ;
    drawdblarrow (40,0){right}..{down}(20,-40) ;

    pickup pencircle scaled 1bp ;
    drawarrow ((0,0){up}..{right}(20,20)) shifted (0,-80) ;
    drawarrow (reverse((20,20){down}..{right}(40,0))) shifted (0,-80) ;
    drawdblarrow ((40,0){right}..{down}(20,-40)) shifted (0,-80) ;
endfig ;


beginfig(11) ;
    path p ;
    p = (0,0) .. (30,40) .. (40,-20) .. (10,20) .. cycle ;
    draw p ;

    dotlabel.bot ("0",point 0 of p) ;
    dotlabel.ulft("1",point 1 of p) ;
    dotlabel.llft("2",point 2 of p) ;
    dotlabel.top ("3",point 3 of p) ;
    dotlabel.lft ("4",point 4 of p) ;

    draw subpath(1.3,3.2) of p withpen pencircle scaled 1.5bp ;
endfig ;


beginfig(12) ;
    path courbe ;
    numeric t[] ;

    courbe = (0,-4mm)
        for i = 1 upto 10:
            .. (i*3.5mm,i*i*.5mm-4mm)
        endfor ;
    x1 = 29mm ;
    for i = 1 upto 3:
        (t[i],whatever) =
            courbe intersectiontimes ((x[i],-infinity)--(x[i],infinity)) ;
        z[i] = point t[i] of courbe ;
        z[i] - (x[i+1],0) = whatever * direction t[i] of courbe ;
        draw (x[i],0)--z[i]--(x[i+1],0) ;
        draw z[i] withpen pencircle scaled 3bp ;
    endfor
    draw (0,0) -- (35mm,0) ;
    draw courbe withpen pencircle scaled 1bp ;
endfig ;


beginfig(13) ;
    path d[],p[],c ;
    d1 = (0,0)--(6cm,5cm) ;
    d2 = (0,0)--(6cm,2cm) ;
    p1 = (1cm,5cm){1,-5}..(2.5cm,2.5cm){2.5,-2.5}..(5cm,1cm){5,-1} ;
    p2 = (2cm,5cm){2,-5}..(4cm,2.5cm){4,-2.5}..(6cm,5/3 cm){18,-5} ;
    c = buildcycle(p1,d2,reverse p2,reverse d1) ;
    fill c withcolor .8white ;
    draw d1 ; draw d2 ; draw p1 ; draw p2 ;
    draw (p1 intersectionpoint d1) withpen pencircle scaled 4bp ;
    draw (p1 intersectionpoint d2) withpen pencircle scaled 4bp ;
    draw (p2 intersectionpoint d1) withpen pencircle scaled 4bp ;
    draw (p2 intersectionpoint d2) withpen pencircle scaled 4bp ;
endfig ;


beginfig(14) ;
    path cercle,rectangle,p ;
    z0 = (0,0) ; z1 = (4cm,1cm) ;
    cercle = fullcircle scaled 1cm shifted z0 ;
    rectangle =
        ((-5mm,-5mm)--(5mm,-5mm)--(5mm,5mm)--(-5mm,5mm)--cycle)
        shifted z1 ;
    draw cercle ; draw rectangle dashed evenly ;
    p = z0{dir150}..z1{dir-30} ;
    draw p dashed withdots scaled 0.3 ;
    drawarrow (p cutbefore cercle cutafter rectangle) ;
endfig ;


beginfig(15) ;
    path p,q ;
    p = (0,-5mm){right}
        for i = 1 upto 10 :
            ..(i*5mm,((-1)**i) * 5mm){right}
        endfor ;
    for i = 0 upto 10 : draw p shifted (0,i*5mm) ; endfor
    q = fullcircle scaled 3cm shifted (3cm,3cm) ;
    clip currentpicture to q ;
    draw q ;
endfig ;


beginfig(16) ;
    fill (0,0)--(3cm,0)--(3cm,2cm)--(0,2cm)--cycle withcolor 0.8white ;
    picture gris ;
    gris = currentpicture ;
    currentpicture := nullpicture ;

    % pour y voir quelque chose ...
    defaultdx := 40pt ; defaultdy := 30pt ;

    boxit.a(gris) ;
    a.c = (0,0) ;
    drawboxed(a) ;
    dotlabel.top ("n", a.n) ;
    dotlabel.ulft("nw",a.nw) ;
    dotlabel.lft ("w", a.w) ;
    dotlabel.llft("sw",a.sw) ;
    dotlabel.bot ("s", a.s) ;
    dotlabel.lrt ("se",a.se) ;
    dotlabel.rt  ("e", a.e) ;
    dotlabel.urt ("ne",a.ne) ;
    dotlabel.top ("c", a.c) ;
    drawdblarrow a.w -- a.w shifted( a.dx,0) ;
    drawdblarrow a.e shifted(-a.dx,0) -- a.e ;
    drawdblarrow a.s -- a.s shifted(0, a.dy) ;
    drawdblarrow a.n shifted(0,-a.dy) -- a.n ;
    label.top("dx",a.w shifted ( a.dx/2,0)) ;
    label.top("dx",a.e shifted (-a.dx/2,0)) ;
    label.rt ("dy",a.s shifted (0, a.dy/2)) ;
    label.rt ("dy",a.n shifted (0,-a.dy/2)) ;

    defaultdx := 3bp ; defaultdy := 3bp ; % défaut
endfig ;


beginfig(17) ;
    boxjoin(a.sw = b.nw ; a.se = b.ne) ;
    boxit.a("A") ; boxit.b("B") ;
    boxit.c("C") ; boxit.d("D") ;
    a.c = (0,0) ;
    drawboxed(a,b,d,c,d) ;
endfig ;

beginfig(18) ;
    circleit.a("Bon début") ;
    % je veux un vrai cercle

    circleit.b("Triste fin") ;
    % je veux un ovale
    b.dx = b.dy ;

    a.c = (0,0) ; b.c = (4cm,0) ;
    drawboxed(a,b) ;

    path p ;
    p = a.c{up}..b.c{dir-45} ;
    drawarrow p cutbefore bpath.a cutafter bpath.b ;
    label.top("transition",point 0.5 of p) ;

    path q ;
    q = a.c{dir120}..a.c shifted (-3cm,0)..a.c{dir60} ;
    drawarrow q cutbefore bpath.a cutafter bpath.a ;

    picture dessin ;
    dessin = currentpicture ;
    currentpicture := nullpicture ;

    draw dessin rotated -90 ;
endfig ;


end