X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=luatex.git;a=blobdiff_plain;f=luamplibAnimate%2Fpage.md;fp=luamplibAnimate%2Fpage.md;h=5be92694f1df95093d484a337a30de8534b3c00d;hp=0000000000000000000000000000000000000000;hb=30844d84fbfc8309bc2ef767bb9e4171c54d8c3c;hpb=4ea824975f3b9c7a485facca72e907b1b0dac01c diff --git a/luamplibAnimate/page.md b/luamplibAnimate/page.md new file mode 100644 index 0000000..5be9269 --- /dev/null +++ b/luamplibAnimate/page.md @@ -0,0 +1,138 @@ +
+

Grâce à l'extension `luamplib` pour Lua(La)TeX et +l'extension `animate`, on peut réaliser très facilement des +animations avec MetaPost, lisibles dans an PDF avec *Acrobat +Reader*. En effet, `luamplib` nous permet de créer des +figures avec l'environnement `mplibcode` qu'on anime avec +l'environnement `animateinline`. + +Les documentations des deux +extensions utilisées : + +* [`luamplib`](http://mirror.hmc.edu/ctan/macros/luatex/generic/luamplib/luamplib.pdf +"lien vers le pdf") +* [`animate`](http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/ctan/macros/latex/contrib/animate/animate.pdf +"lien vers le pdf"). + +

+ +* La compilation se fait avec : `lualatex mplibanimate.tex`. +* Le code MetaPost est extrait de l' + +## Explications + +L’extension animate permet de générer des animations lisibles dans un +PDF par le lecteur *Acrobat Reader*. Plusieurs options sont +envisageables : soit produire l’animation à partir d’une séquence +d’images pré-construites (sous différents formats, JPEG, ps, pdf, +etc.), soit à partir d’image généré par du code LaTeX comme tikz , +pstricks , etc. et... MetaPost ! C’est ce que nous présentons ici à +partir de l'exemple +d'. + +Dans cet exemple, on paramétrise un certain point \(P = (\cos \theta, +\sin \theta)\) à l’aide du paramètre d’angel \(\theta\) qui permet de +construire le lemniscate de Gerono grâce à la recette suivante : + + +
+Soit \(P\) un point décrivant un cercle de centre \(O\) et de rayon +\(a\). On projette \(P\) en \(Q\) sur l’axe \((Ox)\), puis \(Q\) en +\(R\) sur le segment \([OP]\). Le lemniscate de Gerono est alors le +lieu du point \(M\) de \([PQ]\) tel que \(QM = QN\). +
+ +À partir de là, on construit la commande qui prend pour argument la +valeur de l’angle, et qui construit l’image correspondante. On va ici +utiliser l’*héritage* qui permet de garder en mémoire les +unités et la courbe construite au fur et à mesure, à partir des étapes +précédentes. + +On encapsule le code MetaPost dans un *macro* LaTeX grâce à +l'environnement `mplibcode` de `luamplib`. + +~~~~~~~ { .latex } +\mplibcodeinherit{enable} % l'héritage pour la mémoire entre les figures +\newcommand{\lemniscate}[1]{% #1: l'angle en degres + \begin{mplibcode} + if(#1=0): + u:=3cm;% + a:=2u;% + h:=a/4;% + s:=1.3;% + path lemn;% + path carre;% + carre = (0,0)--(1,0)--(1,1)--(0,1)--cycle; + fi; + beginfig(#1); + pickup pencircle scaled 0.6pt; + drawarrow (0,-s*u)--(0,s*u); + drawarrow (-s*u,0)--(s*u,0); + path cercle,hori,verti; + pair O,P,Q,R,M; + O:=(0,0); + cercle := fullcircle scaled (a); + pickup pencircle scaled 0.4pt; + draw cercle dashed evenly withcolor blue; + P:=(a/2*cosd(#1),a/2*sind(#1)); % chemin qui parcourt le cercle + Q:=(a/2*cosd(#1),0); %projection sur (Ox) + % projection de Q sur [O,P] + R = cosd(#1)*cosd(#1)*(a/2*cosd(#1),a/2*sind(#1)); + % M sur [PQ] tel que QM = QR + QR := abs(R-Q); + if(sind(#1)>0.0): + M = Q + (0,QR); + else: + M = Q - (0,QR); + fi; + + if #1=0: + lemn:=M; + else: + lemn:= lemn--M; + fi; + + if ((#1>0) and (#1<90)) or ((#1>180) and (#1<270)): + draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q; + draw carre scaled 6 rotated (angle(R-P)) shifted R; + fi; + if((#1>=90) and (#1<180)) or ((#1>=270) and (#1<360)): + draw carre scaled 6 rotated (angle(Q-P)+180) shifted Q; + draw carre scaled 6 rotated (angle(R-P)+180) shifted R; + fi; + + draw O--P dashed evenly withcolor blue; + draw P--Q dashed evenly withcolor blue; + draw R--Q--M withcolor green; + + label.lrt(btex $a$ etex, (a/2,0)); + label.llft(btex $x$ etex, (s*u,0)); + label.llft(btex $y$ etex, (0,s*u)); + label(btex \itshape Lemniscate \par de Gerono etex, (-0.7u,1.15u)); + label(btex $x^4=a^2(x^2-y^2)$ etex, (0.7u,-1.15u)); + + dotlabel.llft(btex $O$ etex, O); + dotlabel.urt(btex $M$ etex, M); + dotlabel.urt(btex $P$ etex, P); + dotlabel.urt(btex $Q$ etex, Q); + dotlabel.urt(btex $R$ etex, R); + + pickup pencircle scaled 1pt; + draw lemn withcolor red; + + clip currentpicture to (-s*u,-s*u)--(s*u,-s*u)--(s*u,s*u)--(-s*u,s*u)--cycle; + endfig; + \end{mplibcode} +} +~~~~~~~ + +Il suffit alors de construire l'animation avec l'extension `animate` +et son environnement `animateinline`. + +~~~~~~~ { .latex } +\begin{center} +\begin{animateinline}[poster=230, controls]{24} + \multiframe{360}{ii=0+1}{\lemniscate{\ii}} +\end{animateinline} +\end{center} +~~~~~~~