Génération de l'animation

Tout ce qui concerne l'utilisation ou l'installation d'Asymptote.

Modérateur: gdm_asy

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Génération de l'animation

Messagepar mumblee » Lundi 26 Octobre 2009, 12:20

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
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

Publicité

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

Messagepar mumblee » Lundi 26 Octobre 2009, 12:31

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
mumblee
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

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

Messagepar a.grahn » Mardi 27 Octobre 2009, 14:45

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
a.grahn
Hecto-utilisateur
 
Messages: 63
Inscription: Mercredi 11 Avril 2007, 12:38

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

Messagepar mumblee » Mercredi 28 Octobre 2009, 14:37

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
mumblee
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

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

Messagepar OG » Mercredi 28 Octobre 2009, 16:39

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
OG
Modérateur
 
Messages: 2262
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

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

Messagepar a.grahn » Mercredi 28 Octobre 2009, 16:46

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.
a.grahn
Hecto-utilisateur
 
Messages: 63
Inscription: Mercredi 11 Avril 2007, 12:38

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

Messagepar mumblee » Mercredi 28 Octobre 2009, 18:28

``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
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

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

Messagepar mumblee » Mercredi 28 Octobre 2009, 18:30

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
mumblee
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

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

Messagepar a.grahn » Jeudi 29 Octobre 2009, 14:22

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
a.grahn
Hecto-utilisateur
 
Messages: 63
Inscription: Mercredi 11 Avril 2007, 12:38

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

Messagepar mumblee » Jeudi 29 Octobre 2009, 14:32

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
mumblee
Déca-utilisateur
 
Messages: 32
Inscription: Lundi 07 Janvier 2008, 20:39
Localisation: Académie de Lille (chez les ch'ti!)
Statut actuel: Actif et salarié | Enseignant

Re: Génération de l'animation

Messagepar pluton » Samedi 24 Novembre 2012, 19:48

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
pluton
Déca-utilisateur
 
Messages: 29
Inscription: Mercredi 08 Août 2012, 01:46
Statut actuel: Actif et salarié | Maître de conférence


Retourner vers Asymptote

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités