Dessiner des courbes

Si dessiner des traits est relativement simple, en revanche dessiner une courbe est un peu plus compliqué. En effet si entre 2 points tu ne peux faire passer q'un seul trait …

… tu peux y faire passer une infinité de courbes :

La courbure de la courbe est géré par des points de contrôles. Le principe est de créer un point de contrôle qui va « tirer » la ligne pour la courber.

Voici une ligne rouge entre les points (0,1) et (3,1) :

et un point de contrôle aux coordonnées (1.5,3) qui va tirer la ligne vers lui pour la courber :

et le résultat :

Voici la traduction en langage Metapost de la figure ci-dessus. Je te rappelle que pour dessiner une courbe tu utilises .. et le point de contrôle est précédé de controls

N'oublies pas le s à controls


\starttext
\startMPcode
u=2cm;
draw (0,1u) .. controls (1.5u,3u) .. (3u,1u);
\stopMPcode
\stoptext

Si l'on représente le point de contrôle :

Si tu utilises 2 points de contrôle tu les sépares par and

\starttext
\startMPcode
u=2cm;
draw (0,1u) .. controls (1.5u,3u) and (0,2u) .. (3u,1u);
\stopMPcode
\stoptext

Avec les deux points de contrôles :

Pour une présentation j'ai eu besoin d'une figure avec de l'herbe. Il aurait peut-être été plus simple de la faire avec un logiciel comme Inkscape mais en dehors de l'herbe la figure était plutôt simple. J'ai donc trouvé plus amusant de la faire sous MetaPost, d'autan plus qu'elle contenait beaucoup de texte et que donc son intégration dans ma présentation serait meilleur. Voici pour illustrer l'utilisation des points de contrôles la fabrication d'un brin d'herbe :

\starttext
\startMPcode
path p
p:=(0,8)..controls (5,6) and (5,2) ..(4.5,0)--(11,0) .. controls (8.5,3) and (10,7.5).. (14,9)..controls (9.5,8)..(8,4)..controls (7,7)..(6,12)..controls (5.8,7)..(5.3,6.5)..controls (3.5,8.5) and (0.5,8.5)..cycle;
p:= p scaled 20;
draw p;
drawpoints pp;
\stopMPcode
\stoptext

Voici le résultat étape par étape, avec le ou les points de contrôle dessinés pour chaque courbe :

Et voici le résultat définitif avec de la couleur :

\starttext
\startMPcode
color vert;

vert:=(.55,.78,.24);
path p
p:=(0,8)..controls (5,6) and (5,2) ..(4.5,0)--(11,0) .. controls (8.5,3) and (10,7.5).. (14,9)..controls (9.5,8)..(8,4)..controls (7,7)..(6,12)..controls (5.8,7)..(5.3,6.5)..controls (3.5,8.5) and (0.5,8.5)..cycle;
p:= p scaled 20;
fill pp withcolor vert;
\stopMPcode
\stoptext

On peut également utiliser pour créer des courbes les directions suivantes : up, down, left et right.

Voici le dessin de base :

\starttext
\startMPcode
path p,q,r;
p:=(0,0)..(0,2cm);
q:=(0,0)..(2cm,2cm);
r:=(0,0)..(2cm,0);
q:=q shifted (3cm,0);
r:=r shifted (6cm,0);
draw p;
draw q;
draw r;
\stopMPcode
\stoptext

Avec up :

\starttext
\startMPcode
path p,q,r;
p:=(0,0){up}..(0,2cm);
q:=(0,0){up}..(2cm,2cm);
r:=(0,0){up}..(2cm,0);
q:=q shifted (3cm,0);
r:=r shifted (6cm,0);
draw p;
draw q;
draw r;
\stopMPcode
\stoptext

Avec down il suffit de remplacer up par down dans le code ci-dessus :

Avec right :

Avec left :