MetaPost

Introduction de Wikipedia

MetaPost est un système qui implémente un langage de construction de figures et est interpréteur de ce langage. Il dérive du système Metafont du docteur Donald Knuth, et est spécialisé dans la production de diagrammes en langage PostScript à partir d'une description géométrique et algébrique. Le langage permet, en utilisant la syntaxe du langage Metafont, de combiner des lignes, des courbes, des points et d'effectuer des transformations géométriques.

MPchess

Exemple

img download

exemple.mp

Résultat du code

input mpchess

string pgnstr;
pgnstr:="1. e4 e5 2. Bc4 d6 3. Nf3 Bg4 4. Nc3 g6 5. Nxe5 Bxd1 ";
build_chessboards_from_pgn(pgnstr);

beginfig(0);
set_backboard_width(8cm);
init_backboard;
draw backboard;
show_last_move(10);
draw_comment("?","d1");
color_square(0.3[green,black])("c4","c3","e5");
color_square(0.3[red,black])("e8");
draw chessboard_step(10);
draw_arrows(0.3[green,black])("e5|-f7","c3-|d5");
draw_arrows(0.3[red,black])("c4--f7");
endfig;

end.


Animations à l'aide de MetaPost

J'utilise MetaPost pour réaliser des animations. Beaucoup d'entre elles sont des tracés de courbes particulières (voir la section suivante). Je liste les autres animations, aux sujets diverses, dans cette section.

Tracés de construction de courbes

Animations grâce à MetaPost

Certaines courbes mathématiques peuvent se tracer grâce à un mécanisme. En paramétrant ce mécanisme, on peut, grâce à MetaPost, générer les images d'un tel procédé. En les assemblant sous forme d'un petit «film» on obtient les animations que je présente ci-dessous.

La page dédiée sur ce site.

Les animations

Choisir une courbe

Shadow-MP

J'ai écrit quelques macros MetaPost permettant de faire des ombre portées sur divers éléments MetaPost, courbes, chemins, textes, images, etc.

Le code est loin d'être optimal mais il fait le boulot :).

Téléchargement

Petit exemple

img download

exemple.mp

Résultat du code

verbatimtex
%&latex
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[charter]{mathdesign}
\begin{document}
etex

input shadow;

beginfig(2);
  shadowdeg(btex Essai etex scaled 16, (4,-4),black,200);
  draw btex Essai etex scaled 16 withcolor blue withpen pencircle scaled 10pt;
endfig;


Le code

img download

shadow.mp


input metafun;

vardef shadowrect(expr dessin, vect,couleur) =
  save im,i;
  picture im;
  im := image(
    draw dessin;
    );
  draw im shifted vect withcolor couleur;
enddef;

vardef shadowblur(expr dessin, vect, couleur,pre,blur) =
  save im,i,t;
  picture im;
  im := image(
    draw dessin;
    );
  draw im shifted vect withcolor couleur;
  for i:=pre downto 0:
    for t:= 0 step 10 until 360:
      draw im shifted (vect+blur*i/pre*(sind(t),cosd(t))) withcolor transparent(1,0.5,((0.05,0.05,0.05)+couleur+(i)/pre*white));
    endfor;
  endfor;
enddef;

vardef shadowdeg(expr dessin, vect,couleur,pre) =
  save im,i;
  picture im;
  im := image(
    draw dessin;
    );
  for i:=pre downto 0:    
    draw im shifted ((i/pre)*vect) withcolor transparent(1,(10/(pre)*(pre-i)/pre),couleur);    
  endfor;
enddef;


Table des matières