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’angel \(\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}}