1 <div class="alert alert-info">
2 <p>Grâce à l'extension `luamplib` pour Lua(La)TeX et
3 l'extension `animate`, on peut réaliser très facilement des
4 animations avec MetaPost, lisibles dans an PDF avec *Acrobat
5 Reader*. En effet, `luamplib` nous permet de créer des
6 figures avec l'environnement `mplibcode` qu'on anime avec
7 l'environnement `animateinline`.
9 Les documentations des deux
10 extensions utilisées :
12 * [`luamplib`](http://mirror.hmc.edu/ctan/macros/luatex/generic/luamplib/luamplib.pdf
14 * [`animate`](http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/macros/latex/contrib/animate/animate.pdf
19 * La compilation se fait avec : `lualatex mplibanimate.tex`.
20 * Le code MetaPost est extrait de <http://melusine.eu.org/syracuse/metapost/animations/gerono/>
24 L’extension animate permet de générer des animations lisibles dans un
25 PDF par le lecteur *Acrobat Reader*. Plusieurs options sont
26 envisageables : soit produire l’animation à partir d’une séquence
27 d’images pré-construites (sous différents formats, JPEG, ps, pdf,
28 etc.), soit à partir d’image généré par du code LaTeX comme tikz ,
29 pstricks , etc. et... MetaPost ! C’est ce que nous présentons ici à
30 partir de l'exemple <http://melusine.eu.org/syracuse/metapost/animations/gerono/>.
32 Dans cet exemple, on paramétrise un certain point $P = (\cos \theta,
33 \sin \theta)$ à l’aide du paramètre d’angle $\theta$ qui permet de
34 construire le lemniscate de Gerono grâce à la recette suivante :
37 <div class="alert alert-info">
38 Soit $P$ un point décrivant un cercle de centre $O$ et de rayon
39 $a$. On projette $P$ en $Q$ sur l’axe $(Ox)$, puis $Q$ en
40 $R$ sur le segment $[OP]$. Le **lemniscate de Gerono** est alors le
41 lieu du point $M$ de $[PQ]$ tel que $QM = QN$.
44 À partir de là, on construit la commande qui prend pour argument la
45 valeur de l’angle, et qui construit l’image correspondante. On va ici
46 utiliser l’*héritage* qui permet de garder en mémoire les
47 unités et la courbe construite au fur et à mesure, à partir des étapes
50 On encapsule le code MetaPost dans un *macro* LaTeX grâce à
51 l'environnement `mplibcode` de `luamplib`.
54 \mplibcodeinherit{enable} % l'héritage pour la mémoire entre les figures
55 \newcommand{\lemniscate}[1]{% #1: l'angle en degres
64 carre = (0,0)--(1,0)--(1,1)--(0,1)--cycle;
67 pickup pencircle scaled 0.6pt;
68 drawarrow (0,-s*u)--(0,s*u);
69 drawarrow (-s*u,0)--(s*u,0);
70 path cercle,hori,verti;
73 cercle := fullcircle scaled (a);
74 pickup pencircle scaled 0.4pt;
75 draw cercle dashed evenly withcolor blue;
76 P:=(a/2*cosd(#1),a/2*sind(#1)); % chemin qui parcourt le cercle
77 Q:=(a/2*cosd(#1),0); %projection sur (Ox)
78 % projection de Q sur [O,P]
79 R = cosd(#1)*cosd(#1)*(a/2*cosd(#1),a/2*sind(#1));
80 % M sur [PQ] tel que QM = QR
94 if ((#1>0) and (#1<90)) or ((#1>180) and (#1<270)):
95 draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q;
96 draw carre scaled 6 rotated (angle(R-P)) shifted R;
98 if((#1>=90) and (#1<180)) or ((#1>=270) and (#1<360)):
99 draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q;
100 draw carre scaled 6 rotated (angle(R-P)+180) shifted R;
103 draw O--P dashed evenly withcolor blue;
104 draw P--Q dashed evenly withcolor blue;
105 draw R--Q--M withcolor green;
107 label.lrt(btex $a$ etex, (a/2,0));
108 label.llft(btex $x$ etex, (s*u,0));
109 label.llft(btex $y$ etex, (0,s*u));
110 label(btex \itshape Lemniscate \par de Gerono etex, (-0.7u,1.15u));
111 label(btex $x^4=a^2(x^2-y^2)$ etex, (0.7u,-1.15u));
113 dotlabel.llft(btex $O$ etex, O);
114 dotlabel.urt(btex $M$ etex, M);
115 dotlabel.urt(btex $P$ etex, P);
116 dotlabel.urt(btex $Q$ etex, Q);
117 dotlabel.urt(btex $R$ etex, R);
119 pickup pencircle scaled 1pt;
120 draw lemn withcolor red;
122 clip currentpicture to (-s*u,-s*u)--(s*u,-s*u)--(s*u,s*u)--(-s*u,s*u)--cycle;
128 Il suffit alors de construire l'animation avec l'extension `animate`
129 et son environnement `animateinline`.
133 \begin{animateinline}[poster=230, controls]{24}
134 \multiframe{360}{ii=0+1}{\lemniscate{\ii}}