http://wiki.noordover.org, un wiki dont l'objectif est modeste : permettre d'écrire facilement, en vrac, à un rythme de sénateur, quelques trucs et astuces divers, pour ne pas les oublier et aider éventuellement d'autres personnes.

Obtenir plusieurs images de l'évolution d'une construction et/ou une animation

D'après les explications de Philippe Ivaldi sur la liste de diffusion AmiTeX.

Obtenir des fichiers eps séparés

Une possibilité pour qu'un code exporte les figures générées dans une boucle est d'utiliser la commande shipout en conjonction avec erase()

Un exemple ci-dessous qui donne les images distinctes au format eps de l'animation Flocons de Koch.

size(10cm);
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) {
  koch( z0, z1, p );
  koch( z1, z2, p );
  koch( z2, z0, p );
  shipout(prefix="fig"+string(p), format="eps", view=true);
  erase(); // efface la currentpicture
}

les étapes de la construction sont alors dans les fichiers fig0.eps, fig1.eps, etc…

A la place de erase(), on utilisera conjointement save() et restore(), lorsque chaque figure reprendra une partie de la précédente.

Obtenir un pdf multipages

Pour qu'un code exporte les figures générées dans une boucle, il y a aussi la possibilité de passer par une animation en gardant les fichiers intermédiaires.

Le même exemple que précédemment pour obtenir l'animation suivante Flocons de Koch

import animation;
animation A;
settings.tex="pdflatex"; // à commenter si l'on veut chaque figure au format eps
settings.outformat="pdf";
settings.keep=true; // on veut garder les figures de l'animation.
 
size(10cm);
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) {
  koch( z0, z1, p );
  koch( z1, z2, p );
  koch( z2, z0, p );
  A.add();
  erase(); // efface la currentpicture
}
A.movie();

Si le fichier s'appelle essai.asy, les étapes de la construction sont dans les fichiers essai_0.pdf, essai_1.pdf, etc… et on peux visualiser le résultat dans essai.pdf sous forme de pdf multipages.

A la place de erase(), on utilisera conjointement save() et restore(), lorsque chaque figure reprendra une partie de la précédente.

D'autres exemples ici : http://www.marris.org/asymptote/animations/index.html.


Outils personnels