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 l'<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 à
31 d'<http://melusine.eu.org/syracuse/metapost/animations/gerono/>.
33 Dans cet exemple, on paramétrise un certain point \(P = (\cos \theta,
34 \sin \theta)\) à l’aide du paramètre d’angel \(\theta\) qui permet de
35 construire le lemniscate de Gerono grâce à la recette suivante :
38 <div class="alert alert-info">
39 Soit \(P\) un point décrivant un cercle de centre \(O\) et de rayon
40 \(a\). On projette \(P\) en \(Q\) sur l’axe \((Ox)\), puis \(Q\) en
41 \(R\) sur le segment \([OP]\). Le lemniscate de Gerono est alors le
42 lieu du point \(M\) de \([PQ]\) tel que \(QM = QN\).
45 À partir de là, on construit la commande qui prend pour argument la
46 valeur de l’angle, et qui construit l’image correspondante. On va ici
47 utiliser l’*héritage* qui permet de garder en mémoire les
48 unités et la courbe construite au fur et à mesure, à partir des étapes
51 On encapsule le code MetaPost dans un *macro* LaTeX grâce à
52 l'environnement `mplibcode` de `luamplib`.
55 \mplibcodeinherit{enable} % l'héritage pour la mémoire entre les figures
56 \newcommand{\lemniscate}[1]{% #1: l'angle en degres
65 carre = (0,0)--(1,0)--(1,1)--(0,1)--cycle;
68 pickup pencircle scaled 0.6pt;
69 drawarrow (0,-s*u)--(0,s*u);
70 drawarrow (-s*u,0)--(s*u,0);
71 path cercle,hori,verti;
74 cercle := fullcircle scaled (a);
75 pickup pencircle scaled 0.4pt;
76 draw cercle dashed evenly withcolor blue;
77 P:=(a/2*cosd(#1),a/2*sind(#1)); % chemin qui parcourt le cercle
78 Q:=(a/2*cosd(#1),0); %projection sur (Ox)
79 % projection de Q sur [O,P]
80 R = cosd(#1)*cosd(#1)*(a/2*cosd(#1),a/2*sind(#1));
81 % M sur [PQ] tel que QM = QR
95 if ((#1>0) and (#1<90)) or ((#1>180) and (#1<270)):
96 draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q;
97 draw carre scaled 6 rotated (angle(R-P)) shifted R;
99 if((#1>=90) and (#1<180)) or ((#1>=270) and (#1<360)):
100 draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q;
101 draw carre scaled 6 rotated (angle(R-P)+180) shifted R;
104 draw O--P dashed evenly withcolor blue;
105 draw P--Q dashed evenly withcolor blue;
106 draw R--Q--M withcolor green;
108 label.lrt(btex $a$ etex, (a/2,0));
109 label.llft(btex $x$ etex, (s*u,0));
110 label.llft(btex $y$ etex, (0,s*u));
111 label(btex \itshape Lemniscate \par de Gerono etex, (-0.7u,1.15u));
112 label(btex $x^4=a^2(x^2-y^2)$ etex, (0.7u,-1.15u));
114 dotlabel.llft(btex $O$ etex, O);
115 dotlabel.urt(btex $M$ etex, M);
116 dotlabel.urt(btex $P$ etex, P);
117 dotlabel.urt(btex $Q$ etex, Q);
118 dotlabel.urt(btex $R$ etex, R);
120 pickup pencircle scaled 1pt;
121 draw lemn withcolor red;
123 clip currentpicture to (-s*u,-s*u)--(s*u,-s*u)--(s*u,s*u)--(-s*u,s*u)--cycle;
129 Il suffit alors de construire l'animation avec l'extension `animate`
130 et son environnement `animateinline`.
134 \begin{animateinline}[poster=230, controls]{24}
135 \multiframe{360}{ii=0+1}{\lemniscate{\ii}}