Génération de l'animation

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Génération de l'animation

Message par mumblee »

Bonjour,

J'ai réalisé une animation, construction de la cardioïde point point, cousine de celle de Maxime Chupin sur le site de syracuse ; je me suis aidé d'exemples glanés sur le site d'asymptote ou sur celui de Philippe Ivaldi.

Je ne comprends pas tout au module "animate" d'asymptote et je trouve sa doc officielle (v1.80) très succincte.

La question est la suivante : la commande label(a.pdf(delay=50,multipage=false,"controls")); génère bien l'animation, mais si je la remplace par un simple a.pdf(delay=50); (de manière analogue au a.movie(); pour obtenir une animation gif) alors aucun fichier pdf n'est généré.

Qui peut m'expliquer ce mystère -pour moi-, i.e. la génération des animations pdf ? Merci.

Code de l'animation (prendre n assez grand pour avoir une courbe qui ressemble à une cardioïde, mais ce n'est pas nécessaire pour constater le problème)

Code : Tout sélectionner

import animate;
settings.tex="pdflatex";
settings.outformat="pdf";
unitsize(1cm);

// macros (d'après geoplane de D.Comin)
path segment(pair A, pair B,real a=0){
  path seg;
  seg=a*unit(A-B)+A--B+a*unit(B-A);
  return seg;
}

path angledroit(pair A,pair B, pair C,real taille=0.5) {
  path angledroit;
  pair u, v;
  u=unit(C-B);
  v=unit(A-B);
  angledroit=B+taille*v--B+taille*(u+v)--B+taille*u;
  return angledroit;
}

animation a;
int n=10; // nombre d'images dans l'animation
pair O=(0,0);
path cercle=circle(O,5);
pair A=point(cercle,0);
path cardioide;
pair[] M, P;

// Création de l'animation
// Boucle sur le nombre de points de la cardioïde affichés
for (int i=0; i < n+1; ++i) {
  save();
  // Tracé d'un cercle et d'un point de base
  dot(O);
  dot(A);
  draw(cercle);
  label("O",O,NW);
  label("A",A,NW);
  // M[i] est le i-eme point du cercle
  // P[i] est le point correspondant de la cardioïde
  M[i]=relpoint(cercle,i/n);
  P[i]=extension(M[i],rotate(90,M[i])*O,A,(A+(M[i]-O)));
  draw(O--M[i],gray+dashed);
  draw(segment(M[i],P[i],1),gray+dashed);
  draw(segment(A,P[i],1),gray+dashed);
  draw(angledroit(O,M[i],P[i]));
  draw(angledroit(M[i],P[i],A));
  dot(M[i],gray);
  dot(P,green);
  label("M",M[i],align=unit(M[i]-O),gray);
  // ou bien avec numérotation : label("$M_{"+format("%i}$",i),M[i],align=unit(M[i]-O),gray);
  cardioide=cardioide..P[i];
  draw(cardioide,linewidth(1bp));
  // on ajoute l'image obtenue à l'animation
  a.add();
  restore();
}

label(a.pdf(delay=50,multipage=false,"controls"));
//a.pdf(delay=50);
Fabrice Eudes

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Génération de l'animation

Message par mumblee »

Je précise que l'option "controls" n'a aucune incidence sur tout ça. C'est la présence ou l'absence de la commande label qui induit la création du fichier ou non.
Fabrice Eudes

a.grahn
Utilisateur confirmé
Utilisateur confirmé
Messages : 63
Inscription : mercredi 11 avril 2007, 13:38

Re: [Asymptote] Génération de l'animation

Message par a.grahn »

Bonjour,

je n'ai pas bien compris ce que tu cherche à faire. Est-ce d'insérer l'animation dans un document LaTeX?

Bien qu'il est possible de programmer du code asy dans la source d'un document LaTeX de manière ``inline'' (entre les balises \begin{asymptote} et \end{asymptote}, voir l'exemple ``inlinemovie.tex''), je préfère générer d'abord les images de l'animation sous forme d'un PDF multipage qui peut ensuite être inséré et animé dans un document LaTeX à l'aide de la commande \animategraphics du package animate.sty.

Ton code un peu modifié, produisant le PDF contenant les images de l'animation, une par page:

Code : Tout sélectionner

//cardioide.asy 

import animate;
import math;
settings.tex="pdflatex";
settings.outformat="pdf";
unitsize(1cm);

// macros (d'après geoplane de D.Comin)
path segment(pair A, pair B,real a=0){
  path seg;
  seg=a*unit(A-B)+A--B+a*unit(B-A);
  return seg;
}

path angledroit(pair A,pair B, pair C,real taille=0.5) {
  path angledroit;
  pair u, v;
  u=unit(C-B);
  v=unit(A-B);
  angledroit=B+taille*v--B+taille*(u+v)--B+taille*u;
  return angledroit;
}

animation a;
int n=10; // nombre d'images dans l'animation
pair O=(0,0);
path cercle=circle(O,5); 
pair A=point(cercle,0);
path cardioide;
pair[] M, P;

// Création de l'animation
// Boucle sur le nombre de points de la cardioïde affichés
for (int i=0; i < n+1; ++i) {
  save();
  // Tracé d'un cercle et d'un point de base
  dot(O);
  dot(A);
  draw(cercle);
  label("O",O,NW);
  label("A",A,NW);
  // M[i] est le i-eme point du cercle
  // P[i] est le point correspondant de la cardioïde
  M[i]=relpoint(cercle,i/n);
  P[i]=extension(M[i],rotate(90,M[i])*O,A,(A+(M[i]-O)));
  draw(O--M[i],gray+dashed); 
  draw(segment(M[i],P[i],1),gray+dashed);
  draw(segment(A,P[i],1),gray+dashed);
  draw(angledroit(O,M[i],P[i]));
  draw(angledroit(M[i],P[i],A));
  dot(M[i],gray);
  dot(P,green);
  label("M",M[i],align=unit(M[i]-O),gray);
  // ou bien avec numérotation : label("$M_{"+format("%i}$",i),M[i],align=unit(M[i]-O),gray);
  cardioide=cardioide..P[i];
  draw(cardioide,linewidth(1bp));
  // on ajoute l'image obtenue à l'animation
  a.add();
  restore();
}

a.movie();
Exemple d'un document LaTeX pour animer les images

Code : Tout sélectionner

\documentclass{article}
\usepackage{animate}
\begin{document}
\begin{figure}
  \centering
  \animategraphics[width=\linewidth,controls]{5}{cardioide}{}{} % 5 images par seconde
  \caption{Cardio\"ide anim\'ee}
\end{figure}
\end{document}
Alexander

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Génération de l'animation

Message par mumblee »

a.grahn a écrit : je n'ai pas bien compris ce que tu cherche à faire. Est-ce d'insérer l'animation dans un document LaTeX?
Non, juste produire l'animation, sans les contrôles.
je préfère générer d'abord les images de l'animation sous forme d'un PDF multipage qui peut ensuite être inséré et animé dans un document LaTeX à l'aide de la commande \animategraphics du package animate.sty.
Oui, ça j'arrive à faire (mais merci quand même pour les précisions, et pour ton package !!!). Ce que je n'arrive pas à faire c'est générer l'animation sous forme d'un PDF monopage (si je peux m'exprimer ainsi), sans les contrôles.

D'après mes tests, l'utilisation de la commande label() est nécessaire pour assembler les multiples pages en une seule. Je ne trouve pas ça logique/normal ; a.pdf(multipage=false) devrait suffire non ?

Merci de t'intéresser à mon problème.
Fabrice Eudes

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: [Asymptote] Génération de l'animation

Message par OG »

Bonjour

J'ai lu ton message et explorer un peu le paquet animate.
Effectivement la commande change selon que l'on désire une
animation pdf ou non, ce qui n'est pas très logique.
Cela doit venir du fait que pour du gif, c'est une succession de
commandes/conversions puis assemblage alors qu'en pdf
c'est le paquet LaTeX qui fait tout le boulot...

Pour finir, mis à part cette question de "logique" tu n'arrives
pas à faire une animation pdf sans les contrôles ?

Cordialement
O.G. qui répond peut-être ce soir, sinon mardi prochain

a.grahn
Utilisateur confirmé
Utilisateur confirmé
Messages : 63
Inscription : mercredi 11 avril 2007, 13:38

Re: [Asymptote] Génération de l'animation

Message par a.grahn »

mumblee a écrit : D'après mes tests, l'utilisation de la commande label() est nécessaire pour assembler les multiples pages en une seule. Je ne trouve pas ça logique/normal ; a.pdf(multipage=false) devrait suffire non ?
``a.pdf()'' ne génère que le PDF multipage intermédiaire avec les images de l'animation (tu peux t'en assurer en mettant l'option keep=true dans l'argument de ``a.pdf''; le fichier intermédiaire est préfixé par un ``_'') ainsi que le code LaTeX (\animategraphics{...}{...}{...}{...}) pour l'animer. Pour insérer l'animation dans un endroit spécifique du dessin il faut donc utiliser la commande label(). De cette façon un peut créer des graphiques avec plusieurs ``étiquettes'' animées.

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Génération de l'animation

Message par mumblee »

``a.pdf()'' ne génère que le PDF multipage intermédiaire avec les images de l'animation (tu peux t'en assurer en mettant l'option keep=true dans l'argument de ``a.pdf''
C'est bien ce qu'il me semblait (j'avais testé avec keep=true ; je suis allé voir les options du paquet animate). Je ne suis donc pas zinzin :)

Merci à Olivier Quibé, je comprends mieux le problème : la génération du gif par la commande a.movie ne met pas en branle les mêmes rouages (internes) que ceux de la commande a.pdf.

Même si ce n'est qu'un problème de logique, il n'en reste pas moins que je trouve cela dommage pour l'asymptotien lambda ou débutant ; la preuve : ce message :wink:
Sans compter que la documentation officielle est plus que succincte sur le module animation. Les exemples à copier-coller c'est bien (merci la doc officielle, Gaëtan, Philippe), mais une explication claire du pourquoi du comment c'est quand même mieux pour savoir où on met les pieds.
Pour insérer l'animation dans un endroit spécifique du dessin il faut donc utiliser la commande label(). De cette façon un peut créer des graphiques avec plusieurs ``étiquettes'' animées.
Je répète : pas logique :wink:

Peut-être qu'un autre post serait plus avisé, mais bon, comme c'est lié, j'abuse un peu : peut-on personnaliser les contrôles obtenus par l'option "controls" ? Comme les jolis contrôles que l'on peut obtenir avec les swftools vus sur le site de syracuse, genre ici : http://syracuse.eu.org/syracuse/swf/

Merci de m'avoir répondu.
Fabrice Eudes

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Génération de l'animation

Message par mumblee »

Bonsoir,
OG a écrit : Pour finir, mis à part cette question de "logique" tu n'arrives
pas à faire une animation pdf sans les contrôles ?
Si, si, j'avais fini par y arriver, après être allé lire la doc de animate.sty. De mémoire (je ne suis pas sur mon PC) : appel de label sans l'option "controls".

Cordialement,
Fabrice Eudes

a.grahn
Utilisateur confirmé
Utilisateur confirmé
Messages : 63
Inscription : mercredi 11 avril 2007, 13:38

Re: [Asymptote] Génération de l'animation

Message par a.grahn »

mumblee a écrit : Merci à Olivier Quibé, je comprends mieux le problème : la génération du gif par la commande a.movie ne met pas en branle les mêmes rouages (internes) que ceux de la commande a.pdf.
Oui, parce qu'elles ne sont pas analogues! C'est toujours a.movie() qui produit la séquence d'images, que ce soit un Mpeg, Gif animé ou PDF multipage (par définition, il n'existe pas de format ``PDF animé''), selon de ce qui est mis au point par settings.outformat.

a.pdf() est plutôt comparable à embed(), parce qu'elle ajoute la commande (LaTeX) d'insertion à la sequence (en fait, elle produit aussi la sequence en faisant appel à movie() en interne d'abord). a.pdf() aussi bien que embed() doivent etre placées dans une label() pour apparaître dans le document final. Sinon, le Mpeg ou le PDF multipage seront effacés à la fin, sans jamais avoir été utilisés.

Quant à la documentation officielle d'asymptote je t'approuve sans restriction.
mumblee a écrit : Peut-être qu'un autre post serait plus avisé, mais bon, comme c'est lié, j'abuse un peu : peut-on personnaliser les contrôles obtenus par l'option "controls" ?
Oui, tu peux modifier animate.sty :).
mumblee a écrit : Comme les jolis contrôles que l'on peut obtenir avec les swftools vus sur le site de syracuse, genre ici : http://syracuse.eu.org/syracuse/swf/
Pardon? Ils ne te plaisent pas? Est-ce que c'est leur couleur qui dérange? On peut l'adapter avec les options buttonfg et buttonbg. J'avoue que les contrôles d'animate.sty sont un peu minimaliste en ce qui concerne leur graphisme, mais ils offrent toute fonctionnalité nécessaire pour contrôler le défilé d'images. Par contre, dans les exemples SWF je n'ai pas trouvé de buttons permettant de changer le rythme ou bien le sens du défilé.
mumblee a écrit : Merci de m'avoir répondu.
Avec plaisir.

Alexander

mumblee
Utilisateur confirmé
Utilisateur confirmé
Messages : 32
Inscription : lundi 07 janvier 2008, 20:39
Localisation : Académie de Lille (chez les ch'ti!)

Re: [Asymptote] Génération de l'animation

Message par mumblee »

a.grahn a écrit : Oui, tu peux modifier animate.sty :).
C'est, au moins pour l'instant hors de ma portée :-)
Pardon? Ils ne te plaisent pas? Est-ce que c'est leur couleur qui dérange? On peut l'adapter avec les options buttonfg et buttonbg. J'avoue que les contrôles d'animate.sty sont un peu minimaliste en ce qui concerne leur graphisme, mais ils offrent toute fonctionnalité nécessaire pour contrôler le défilé d'images.
Aucun reproche concernant la fonctionnalité. La question, même pas un reproche, était uniquement l'aspect graphique. Je vais regarder buttonfg et buttonbg qui m'avaient échappé.

Un voeu, c'est bientôt noël :-), pouvoir choisir de ne faire afficher que certains boutons parmi l'ensemble des contrôles possibles. Mais c'est vraiment un détail...

Merci beaucoup pour les détails supplémentaires concernant le fonctionnement de a.pdf() !
Fabrice Eudes

pluton
Utilisateur confirmé
Utilisateur confirmé
Messages : 29
Inscription : mercredi 08 août 2012, 02:46

Re: Génération de l'animation

Message par pluton »

Bonjour,

je suis très intéressé par l'approche d'Alexander qui permet de créer une série d'images au format pdf, images ensuite réintégrées pour une animation lors de la compilation du document latex.
J'ai essayé le code proposé et celui-ci fonctionne presque : la série d'images est bien créée [image 1] mais à la toute fin, un message d'erreur annonce que le fichier "cardioide.pdf" n'est pas trouvable [image 2] (sans de ce message ?), la série d'images disparaît alors et est intégrée entièrement au fichier cardioide.pdf (qui contient autant de pages que d'images) à partir duquel il semble impossible de construire l'animation finale. Bon, tout ceci est un peu compliqué.

J'ajoute deux captures d'écran pour éclaircir un peu: la première est une capture d'écran juste avant le message d'erreur. La deuxième est le message d'erreur.

Image

Image

Une fois de plus, le fichier cardioide.pdf contient bien les 11 images de l'animation mais semble être inutilisable par l'extension animate.
Voilà, peut-être qu'il y a un problème de version d'asymptote ? ou un problème de Windows ?

En fait, je rencontre le même problème avec le fichier http://asymptote.sourceforge.net/galler ... fmovie.asy
J'imagine que c'est un problème de configuration du système : reste à trouver lequel.




Merci