X-Git-Url: https://melusine.eu.org/syracuse/G/git/?p=luatex.git;a=blobdiff_plain;f=luamplibAnimate%2Fpage.html;fp=luamplibAnimate%2Fpage.html;h=b7a74e613c5c5433ecb5f15b1f8d7ec1d014f73e;hp=0000000000000000000000000000000000000000;hb=30844d84fbfc8309bc2ef767bb9e4171c54d8c3c;hpb=4ea824975f3b9c7a485facca72e907b1b0dac01c diff --git a/luamplibAnimate/page.html b/luamplibAnimate/page.html new file mode 100644 index 0000000..b7a74e6 --- /dev/null +++ b/luamplibAnimate/page.html @@ -0,0 +1,102 @@ +
+
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 :
+ +lualatex mplibanimate.tex
.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'http://melusine.eu.org/syracuse/metapost/animations/gerono/.
+Dans cet exemple, on paramétrise un certain point (P = (, )) à lâaide du paramètre dâangel () 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
.
\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
.
\begin{center}
+\begin{animateinline}[poster=230, controls]{24}
+ \multiframe{360}{ii=0+1}{\lemniscate{\ii}}
+\end{animateinline}
+\end{center}