Modification de web.xml
[luatex.git] / luamplibAnimate / page.md
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`.
8
9 Les documentations des deux
10 extensions utilisées  :
11
12 * [`luamplib`](http://mirror.hmc.edu/ctan/macros/luatex/generic/luamplib/luamplib.pdf
13 "lien vers le pdf")
14 * [`animate`](http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/macros/latex/contrib/animate/animate.pdf
15 "lien vers le pdf").
16
17 </div>
18
19 * La compilation se fait avec : `lualatex mplibanimate.tex`.
20 * Le code MetaPost est extrait de <http://melusine.eu.org/syracuse/metapost/animations/gerono/>
21
22 ## Explications
23
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/>.
31
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 :
35
36
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$.
42 </div>
43
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
48 précédentes.
49
50 On encapsule le code MetaPost dans un *macro* LaTeX grâce à
51 l'environnement `mplibcode` de `luamplib`.
52
53 ~~~~~~~ { .LaTeX }
54 \mplibcodeinherit{enable} % l'héritage pour la mémoire entre les figures
55 \newcommand{\lemniscate}[1]{% #1: l'angle en degres
56   \begin{mplibcode}
57     if(#1=0):
58     u:=3cm;%
59     a:=2u;%
60     h:=a/4;%
61     s:=1.3;%
62     path lemn;%
63     path carre;%
64     carre = (0,0)--(1,0)--(1,1)--(0,1)--cycle;
65     fi;
66     beginfig(#1);
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;
71     pair O,P,Q,R,M;
72     O:=(0,0);
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
81     QR := abs(R-Q);
82     if(sind(#1)>0.0):
83     M = Q + (0,QR);
84     else:
85     M = Q - (0,QR);
86     fi;
87
88     if #1=0:
89     lemn:=M;
90     else:
91     lemn:= lemn--M;
92     fi;
93
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;
97     fi;
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;
101     fi;
102
103     draw O--P dashed evenly withcolor blue;
104     draw P--Q dashed evenly withcolor blue;
105     draw R--Q--M withcolor green;
106
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));
112
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);
118
119     pickup pencircle scaled 1pt;
120     draw lemn withcolor red;
121
122     clip currentpicture to (-s*u,-s*u)--(s*u,-s*u)--(s*u,s*u)--(-s*u,s*u)--cycle;
123     endfig;
124   \end{mplibcode}
125 }
126 ~~~~~~~
127
128 Il suffit alors de construire l'animation avec l'extension `animate`
129 et son  environnement `animateinline`.
130
131 ~~~~~~~ { .latex }
132 \begin{center}
133 \begin{animateinline}[poster=230, controls]{24}
134   \multiframe{360}{ii=0+1}{\lemniscate{\ii}}
135 \end{animateinline}
136 \end{center}
137 ~~~~~~~

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.