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);