Insérer une pause dans une animation

Pour toute demande d'aide sur des exemples non finalisés, c'est ici.
Les exemples aboutis et intéressants seront ajoutés aux sous-forums qui suivent.

Règles du forum
Pour toute demande d'aide pour la conception (ou la confirmation d'un code) d'une figure Asymptote, c'est ici.

J'invite ceux qui ont régulièrement des questions à poser à aller dans leur panneau de l'utilisateur pour indiquer dans la signature de leurs messages :

  1. Nom du système d'exploitation (W7 ou Ubuntu 12.04 ou ...)
  2. Version d'Asymptote et éditeur utilisé pour les figures Asymptote
  3. Distribution LaTeX et éditeur utilisé pour les tex.


On va gagner du temps dans les réponses !
etienne25
Messages : 24
Enregistré le : mar. 29 mai 2012, 00:40

Insérer une pause dans une animation

Message non lu par etienne25 » mer. 30 mai 2012, 20:33

Ben voilà, tout est quasiment dit dans le sujet...

Je souhaite faire une animation en pdf avec Asymptote qui arrêterait à certains moments, le temps que j'explique mes trucs à mes étudiants, puis qui redémarrerait avec -par exemple- un clic de souris. Ce doit être simple, mais je ne trouve pas :oops: Quelqu'un pourrait me donner un lien vers un exemple où ce genre de chose est fait?

Merci!

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: Insérer une pause dans une animation

Message non lu par GM » mer. 30 mai 2012, 21:54

Pour l'exemple suivant :

Code : Tout sélectionner

import animate;
settings.tex="pdflatex";
settings.outformat="pdf";

size(7cm);
animation A;

void koch(pair A, pair B, int n) {
          pair C;
          C=rotate(120, point(A--B,1/3))*A;
          if (n>0) {
             koch(A,point(A--B,1/3),n-1);
             koch(point(A--B,1/3),C,n-1);
             koch(C,point(A--B,2/3),n-1);
             koch(point(A--B,2/3),B,n-1);
          }
          else draw(A--point(A--B,1/3)--C--point(A--B,2/3)--B);
}
 
pair z0=(1,0);
pair z1=rotate(120)*z0;
pair z2=rotate(120)*z1;
real pmax=4;
for (int p=0; p<=pmax; p+=1) {
  save();
  koch(z0,z1,p);
  koch(z1,z2,p);
  koch(z2,z0,p);
  A.add();
  erase();
}
label(A.pdf(BBox(1mm,nullpen),delay=500,"controls,loop"));


tu devrais obtenir ceci, avec des boutons de contrôle :
asy_2012_05_30_animation_avec_pause_fig1.pdf
(37.13 Kio) Téléchargé 223 fois
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

etienne25
Messages : 24
Enregistré le : mar. 29 mai 2012, 00:40

Re: Insérer une pause dans une animation

Message non lu par etienne25 » jeu. 31 mai 2012, 04:59

Bien, je peux faire une pause avec les contrôles, expliquer, puis redémarrer l'animation. Mais ce que j'aimerais, c'est que la pause se fasse toute seule. Pour ce flocon de Koch, serait-il possible de voir défiler, par exemple, les 2 premières itérations, puis que l'animation arrête d'elle-même, jusqu'à ce que je clique pour la redémarrer? Ça m'éviterait de me précipiter sur les contrôles pour arrêter l'animation au bon moment...

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: Insérer une pause dans une animation

Message non lu par GM » jeu. 31 mai 2012, 21:32

Je n'ai pas de fonction magique en tête et je manque beaucoup de pratique en matière d'animations donc il me faut chercher, tester...

... et j'ai actuellement un problème technique qui m'empêche de tester, s'il y aurait éventuellement moyen dans un "beamer" de présentation de mettre le début d'une animation dans une "frame" et la fin de l'animation dans la suivante.

Si quelqu'un a une idée, qu'il n'hésite pas à la donner à Etienne.
Je me pencherai sur le problème ce weekend si mes petits soucis techniques sont réglés.
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: Insérer une pause dans une animation

Message non lu par GM » ven. 1 juin 2012, 23:49

Un exemple bricolé... pour éventuellement dépanner.
Je réfléchirai à une solution plus élégante plus tard.

Code : Tout sélectionner

\documentclass[11pt]{beamer}
\usepackage[utf8]{inputenc}
\usetheme{Warsaw}
\usepackage[inline]{asymptote}
\usepackage{animate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\begin{frame}[fragile]{Début de l'animation}
Cela commence maintenant...

\begin{asy}
import animate;
animation A=animation("movie1_A");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
  A.add(pic);
}
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),invisible);
}
A.add(pic);
label(A.pdf(delay=1000,options="autoplay"));
\end{asy}
\end{frame}

\begin{frame}[fragile]{Fin de l'animation...}
... et cela se termine quand je le décide.

\begin{asy}
import animate;
animation A=animation("movie1_B");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
}
A.add(pic);
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),red);
  A.add(pic);
}
label(A.pdf(delay=1000,options="autoplay"));
\end{asy}
\end{frame}
\end{document}


pour donner ceci :
tex_2012_06_01_beamer_animation_v1.pdf
(61.69 Kio) Téléchargé 189 fois

Attention : ce sera probablement à visualiser avec Acrobat reader, pour voir l'animation fonctionner.

Il faut changer de diapo pour voir la suite.

Pour ceux qui ne connaissent pas, je signale que, je me suis acheté ceci l'été dernier, pour pouvoir changer de diapo à distance : c'est bien pratique.
Image
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

etienne25
Messages : 24
Enregistré le : mar. 29 mai 2012, 00:40

Re: Insérer une pause dans une animation

Message non lu par etienne25 » sam. 2 juin 2012, 13:14

Oui, ça fonctionne très bien! Et ça me convient parfaitement. Mais si quelqu'un trouve comment le faire entièrement avec Asymptote, je serais très curieux de voir comment!

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Insérer une pause dans une animation

Message non lu par maurice » sam. 2 juin 2012, 15:18

etienne25 a écrit :Mais si quelqu'un trouve comment le faire entièrement avec Asymptote, je serais très curieux de voir comment!


On peut utiliser l'extension slide :

Code : Tout sélectionner

orientation=Landscape;

settings.tex="pdflatex";

import slide;

// Optional movie modules:
import animate;     // For portable embedded PDF movies


usersetting();

titlepage("diaporama avec {\tt Asymptote}: Animations","GM, \'Etienn25, Maurice",
          "Forum Asymptote","\today","http://asy.gmaths.net/forum/");

title("Le d\'ebut de l'animation");
animation A=animation("movie1_A");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
  A.add(pic);
}
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),invisible);
}
A.add(pic);
label(A.pdf(delay=1000,options="autoplay"));

title("Tout de suite la suite ...");
animation A=animation("movie1_B");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
}
A.add(pic);
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),red);
  A.add(pic);
}
label(A.pdf(delay=1000,options="autoplay"));


qui donne :

pause-slide.pdf
(46.03 Kio) Téléchargé 185 fois


Dites moi si ça marche bien, comme je n'ai pas Adobe Reader d'installé en ce moment sous linux ....

Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1419
Enregistré le : dim. 7 mars 2010, 14:50

Re: Insérer une pause dans une animation

Message non lu par GM » sam. 2 juin 2012, 15:44

maurice a écrit :On peut utiliser l'extension slide...

J'y avais pensé... car j'ai pratiqué cela, il y a 4 ans, avant même d'utiliser beamer mais comme personnellement j'ai abandonné slide pour la richesse des possibilités de beamer, je me voyais mal le conseiller. ;-)
Index des fonctions - Exemple de lien donnant le résultat d'une recherche sur les mots 'arc' et 'triple' : http://asy.marris.fr/indexasy/?filtre=arc triple
Mes configurations (le 31/03/19) :
PC n°1 :Windows 10 - Asymptote(2.59)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
Mes autres PC : Ubuntu 18.04LTS - Asymptote(2.52-?? git) + TexLive2018
Mon serveur : Debian Jessie - Asymptote(2.52-1 git) + TexLive2018
Merci de préciser la votre !

etienne25
Messages : 24
Enregistré le : mar. 29 mai 2012, 00:40

[Résolu]Re: Insérer une pause dans une animation

Message non lu par etienne25 » mar. 5 juin 2012, 03:02

Ce qu'il y a de bien dans un forum, c'est que les idées des autres donnent des nouvelles pistes de recherche!!

maurice a écrit :
Dites moi si ça marche bien, comme je n'ai pas Adobe Reader d'installé en ce moment sous linux ....



C'est parfait! Ça m'a amené à fouiller sur l'extension slide que je ne connaissais pas, et j'ai trouvé la commande newpage(). Voici le code de Bruno auquel j'ai enlevé la «mécanique» de slide et ajouté un newpage():

Code : Tout sélectionner

orientation=Landscape;

settings.tex="pdflatex";

// Optional movie modules:
import animate;     // For portable embedded PDF movies


usersetting();

animation A=animation("movie1_A");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
  A.add(pic);
}
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),invisible);
}
A.add(pic);
label(A.pdf(delay=1000,options="autoplay"));

// ICI
newpage();

animation A=animation("movie1_B");
int n=12;
real h=2pi/n;

picture pic;
unitsize(pic,2cm);
for(int i=0; i < floor(n/2); ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),blue);
}
A.add(pic);
for(int i=floor(n/2); i < n; ++i) {
  draw(pic,expi(-i*h)--expi(-(i+1)*h),red);
  A.add(pic);
}
label(A.pdf(delay=1000,options="autoplay"));


On obtient alors juste l'animation, sans rien autour. En appuyant sur Enter, on change de page, et l'animation continue.

J'en profite pour poser quelques questions «théoriques». Le pdf que mon code crée, est-ce ce qu'on appelle un pdf multipages? À 2 pages? Ou bien est-ce que les animations sont en fait plusieurs pages (1 par frame), et donc mon pdf serait multipages à plus que 2 pages? Ou bien les animations sont des prc inclus dans un fichier pdf (ce serait là la tâche de la commande pdf(), peut-être...)? Pourquoi ne se passe-t-il rien (image vide) quand je crée le fichier tex suivant:

Code : Tout sélectionner

\documentclass{article}

\usepackage{animate}

\begin{document}
Le fichier que j'ai cr\'e\'e sur Asymptote s'appelle test.pdf. On dit dans la doc du package \textsf{animate} qu'on peut donner \`a la commande \texttt{\symbol{92}animategraphics} un pdf multipage pour faire une animation.

\animategraphics[controls]{2}{test}{}{}

Il n'y a rien! Mon pdf n'est-il pas multipage?
\end{document}


Je sais que ce sont des questions de base, mais il me semble que quand ça va être clair dans ma tête, il y a plein de choses que je vais comprendre dans les docs de latex (package animate) et d'Asymptote!!!

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Insérer une pause dans une animation

Message non lu par maurice » mar. 5 juin 2012, 03:49

Bonsoir, dans le pdf de 2 pages que tu obtiens, chaque page contient une animation (qui n'est pas multipage).
tu paux remplacer au choix tes lignes :

Code : Tout sélectionner

label(A.pdf(delay=1000,options="autoplay"));


par :

Code : Tout sélectionner

label(A.pdf("<options>",keep=true,multipage=false));

pour obtenir un pdf par image.

Code : Tout sélectionner

label(A.pdf("<options>",keep=true,multipage=true));

pour obtenir l’animation et le pdf multipage (pdf contenant une page par image).

Code : Tout sélectionner

label(A.pdf("<options>"));

pour l’animation uniquement.

Code : Tout sélectionner

A.movie();

pour obtenir un pdf multipage.

Les options sont celles du package animate.

Pour plus de précisions, voir ici ou bien sur la doc officielle.

Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

Répondre