Metafun

Premiers pas

Les coordonnées

Pour nous repérer sur notre feuille de papier, nous allons utiliser un systhème de coordonnées, représenté par un couple (x,y) dans un repère cartesien orthonormé. Oh la la, je sens Mme Michu qui vacille : des maths pour dessiner des petits mickey, très peu pour moi.

Allez Mme Michu, accroche-toi, tu vas voir c'est pas si terrible que ça. En plus je prèfère te prévenir tout de suite METAPOST étant un langage de programation, tu auras le droit à des notions telles que variable, boucle de test,. . . J'espère arriver à rendre cela le plus compréhensible possible, même pour toi Mme Michu qui a décroché en math en 6e.

Revenons à notre repère cartésien. Pour dessiner sur notre feuille de papier il nous faut une origine, ce sera donc le coin en bas à gauche de notre feuille. Notre feuille, prenons par exemple une feuille A4 en mode portrait, à pour largeur 21 cm. On s'y déplace de droite à gauche. En mathématique on l'appelle l'abcisse et ses valeurs représentées par un x. Dans notre exemple x va de 0 à 21.

La hauteur de notre feuille vaut 29,7cm. On s'y déplace de bas en haut. En mathématique on l'appelle l'ordonnée et ses valeurs représentées par un y. Dans notre exemple y va de 0 à 29.7.

Attention comme dans la pluspart des languages informatiques on écrit les chiffres à l'anglo-saxone, donc les décimales sont notées avec un point et non une virgule comme en france.

Orthonormé signifie que l'angle formé par les abscisses et les ordonnées est un angle droit et qu'elles ont le même système de graduation. Donc notre feuille de papier est un repère cartesien orthonormé. N'importe quel point que tu vas dessiner sur ta feuille peut être représente par un couple (x,y). Par exemple l'angle en bas à gauche qui est l'origine à pour coordonnées le couple (0,0), le coin en bas à droite (21,0), l'angle en haut à droite (21,29.7), le coin en haut à gauche (0,29.7) et le centre de la feuille (10.5,14.85).

Un petit dessin pour clarifier tout cela :

Par exemple voici un point rouge à 2 en x et 1 en y (2,1), un point bleu à (1.3,2.75).

Les unités

L'unité par défaut dans METAPOST est le point postscript, une unité typographique, notée bp qui vaut 0.352 mm. Il est appelé gros point, par opposition au point typograhique (pt). Leurs définitions sont les suivantes :

  • 1 bp = 1/72 inches
  • 1 pt = 1/72,27 inches

Tu peux utiliser d'autres unités comme le centimètre, le milimètre, les pouces (inches, en anglais valant 2,54 cm et dont l'unité est in) le point d'impression (pt) et le pica (1pc = 1/6in), mais dans ce cas il faut préciser l'unité :

(2cm,1cm) ou (0,3mm) . . .

Si tu ne précises pas l'unité METAFUN travaille en point postscript. Les unités sont un raccourci pour une multiplication. Par exemple 3mm équivaux à 3x0.352 soit 1.056 point postcript. Pour le zéro tu n'est pas obligé de préciser car 0 x 0.352 = 0.

Comme 3mm est un raccourci pour une multiplication tu ne dois pas mettre de blanc (3 mm)

Pour récapituler :

  • 1mm = 0,039in
  • 1mm = 2,83pt
  • 1mm = 2,84bp
  • 1mm = 0,24pc
  • 1in = 25,4mm
  • 1pt = 0,351mm
  • 1bp = 0,352mm
  • 1pc = 4,23mm

Les longueurs que peut gérer METAPOST vont de 1/65536bp soit environ 5,38nm (nanométres) jusqu'à 4096bp soit 1,4m. À titre de comparaison la longueur d'onde de la lumière visble est comprise entre de 380nm et 780nm et une feuille de papier standart (A4) fait 0.21m * 0.297m. Tu devrais pouvoir dessiner tout ce que tu veux.

Premier dessin

draw est la commande qui permet de dessiner. -- (2 traits d'union) est la commande qui relie deux coordonées par un trait. Pour dessiner un trait du point d'origine au point (3cm,2cm) :

 draw (0,0) -- (3cm,2cm);

Toutes les instructions METAPOST se terminent par un point virgule ; ne l'oublie pas.

Pour intégrer du code (un programme) METAFUN dans ConTeXt, il faut le placer dans l'environement \startMPpage . . . \stopMPpage. Voici le code complet :

 \starttext
 \startMPpage
 draw (0,0) -- (3cm,2cm);
 \stopMPpage
 \stoptext

Que tu compiles avec ConTeXt.


J'ai ajouté la grille verte avec les coordonnées, qui n'apparaissent pas avec le code ci-dessus pour plus de compréhension.

On peut tracer plusieurs traits à la suite :

 draw (0,0) -- (3cm,2cm) -- (3cm,4cm) -- (0,4cm);

On appelle ceci un path (chemin).

 \starttext
 \startMPpage
 draw (0,0) -- (3cm,2cm) -- (3cm,4cm) -- (0,4cm);
 \stopMPpage
 \stoptext

Attach:meta-2.jpg Δ

La commande --cycle permet de fermer le path :

 \starttext
 \startMPpage
 draw (0,0) -- (3cm,2cm) -- (3cm,4cm) -- (0,4cm)--cycle;
 \stopMPpage
 \stoptext

Attach:meta-2.jpg Δ

Attention la commande suivante ne ferme pas le path : draw (0,0) -- (3cm,2cm) -- (3cm,4cm) -- (0,4cm) -- (0,0); même si à première vue les deux dessins se ressemblent, on verra par la suite que ce n'est pas la même chose.

Les blanc ne sont pas nécessaire dans les commandes tu peux écrire : draw (0,0) -- (3cm,2cm) -- (3cm,4cm) -- (0,4cm) -- cycle; ou draw(0,0)--(3cm,2cm)--(3cm,4cm)--(0,4cm)--cycle;

Si tu emploies .. (2 points) à la place des -- tu obtiens un tracé courbe :

 \starttext
 \startMPpage
 draw (0,0) .. (3cm,2cm) .. (3cm,4cm) .. (0,4cm)..cycle;
 \stopMPpage
 \stoptext

Attach:meta-3.jpg Δ

Tu peux mélanger les -- et les ..

 \starttext
 \startMPpage
 draw (0,0) -- (3cm,2cm) .. (3cm,4cm) -- (0,4cm)..cycle;
 \stopMPpage
 \stoptext

Attach:meta-4.jpg Δ

Les variables

Il est important de comprendre la notion de variable car avec METAFUN on va en utiliser beaucoup. Une variable est un espace de stockage pour une donnée ou un résultat. C'est toi qui crée la variable et lui donne un nom qui est fixe. Par contre sa valeur peut varier à l'intérieur du programe METAFUN, d'ou son nom variable. Pour écrire le nom des tes variables tu peux utiliser tous les caractères suivant :

 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:<=>|#&@$/*\!?’‘ˆ{}[]1234567890

Par exemple |#&@$ est un nom autorisé, mais d'un intérét très limité, il vaut mieux donner un nom qui évoque ce pour quoi la variable a été crée.

Les types de variables

METAPOST reconnait 9 types différents de variables

  • numeric : des nombres réels (donc des nombres avec des décimales) compris entre -4096 et +4096 ;
  • pair : un couple de coordonnées (x,y) ;
  • path : un chemin c'est à dire un ensemble de ligne et de courbe ;
  • picture : une image c'est à dire un ensemble de path ;
  • string : une chaine de caractères encadrée de " ", ça peut être un mot ou une/des phrase(s) mais sans qaut de ligne ;
  • color : une couleur représenté par un ensemble de 3 nombres pour le système rgb (r,g,b) ou de 4 nombres pour le cmyk (c,m,y,k) ;
  • bolean : qui prend que 2 valeur true (vrai) ou false (faux), utilisée dans les tests ;
  • transform : une transformation d'un chemin (rotation, translation,. . .) ;
  • pen : les spécifications du stylo, taille et forme.

Tu déclares une variable de la façon suivante :

Un nombre que l'on appelle age

 numeric age;

Une couleur monrouge

 color monrouge;

Une chaine de caractère prenom

 string prenom;

Tu affectes une valeur à ta variable avec l'expression :=

Le signe = est réservé pour les égalités

Par exemple :

 age:=24;
 monrouge:=(205,22,22);
 prenom:="Raoul";

Tu rencontreras dans les exemples que tu trouveras dans d'autre documentations l'affectation de variables numériques avec = et non:= je l'expliquerais plus tard pour l'instant on va rester avec := pour attribuer une valeur à nos varibles

Les variables peuvent recevoir des valeurs explicitement par assignement avec := ou implicitement par des équations linéaires. Équations utilisent la comparaison d'égalité, =. Les équations peuvent être construits à partir des valeurs numériques pair ou couleur

MetaPost doit être capable de résoudre les équations avant que les images qui utilisent leurs valeurs sont traitées.