[Résolu]Image fixe 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 !
Avatar du membre
chellier
Messages : 101
Enregistré le : jeu. 18 mars 2010, 17:30

Re: [Résolu]Image fixe dans une animation

Message non lu par chellier » mar. 10 août 2010, 06:21

Allez, encore une version ;)
J'ai récupéré les dimensions de la bounding box de l'image fixe. Je trace une "box" aux dimensions précédentes dans la première image de l'animation... et il n'y a plus de décalage, enfin presque :roll: Les boutons de contrôle mettent le bazar. Il y a encore un décalage à cause d'eux. Solution : ne pas les mettre. Il suffit alors de cliquer sur l'image pour lancer l'animation, mais on peut plus "jouer" avec :( Taille : 414894 octets. Ce qui est excellent pour moi (c'est presque 1Mo de moins que la figure de départ...)!

Code : Tout sélectionner

import graph_pi;
import animate;
settings.tex="pdflatex";
settings.outformat="pdf";
usepackage("fourier","upright");

pair mini, maxi;
real f(real x) {return cos(x);}
path Cf1=graph(f,0,pi,n=20,Hermite);
path Cf2=graph(f,-pi,pi,n=20,Hermite);
path Cf3=graph(f,pi,3pi,n=20,Hermite);
transform sc=scale(.8);
pen pinit=1.2bp+magenta, pf=1.2bp+.8blue, pvec=bp+deepgreen;

void trace(path f, pen p, Label L="", real r=0, real per=2pi, pair NS=(0,0),
           pen pv=nullpen, arrowbar arrow=Arrow(HookHead,2mm)){
  draw(f,p);
  if (NS!=(0,0))
    draw(Label(sc*L,Fill(white),align=NS),(r,f(r))--(r+per,f(r+per)),pv,arrow);
}

graphicrules(xunit=1cm, yunit=1cm, xmin=-3pi, xmax=3pi, ymin=-1.5, ymax=1.5);
add(millimeterpaper(p=1bp+orange),(0,0));
labeloij(Lo=sc*"$O$", Li=sc*"$\overrightarrow{\imath}$", Lj=sc*"$\overrightarrow{\jmath}$");
cartesianaxis(xticks=Ticks(sc*Label(Fill(white)),
                           labelfrac(factor=pi,symbol="\pi",symbolin=true,zero=false),
                        Step=pi/2, ptick=black),
              yticks=Ticks(sc*Label(Fill(white)),labelfrac(zero=false),Step=1,step=.5));

picture pic; 
pic.add(currentpicture);// Sauvegarde de l'image fixe dans pic

mini=min(pic)/cm; maxi=max(pic)/cm; // coordonnées de la "bounding box" (gauche,bas) et (droite,haut)

erase();
animation A;
// --------------------------------------------------------------------------
for (real p=-1; p<=1; p+=.1) {
  save();
  if (p==-1){draw(box(mini,maxi),(0,0),invisible);} // boîte aux dimension de l'image fixe
  trace(Cf1,pinit);
  draw(xscale(-p)*Cf1,pinit);
  A.add();
  restore();
}
for (real t=0; t<=2pi; t+=pi/25) {
  save();
  trace(Cf2,pinit,"$2\pi \vec{\imath}$",.75,N,pvec);
  draw(shift(t,0)*Cf2,pf);
  A.add();
  restore();
}
for (real t=0; t<=2pi; t+=pi/25) {
  save();
  trace(Cf2,pinit,"$2\pi \vec{\imath}$",.75,N,pvec);
  trace(Cf3,pf,"$-2\pi \vec{\imath}$",-pi,-2pi,S,pvec);
  draw(shift(-t,0)*Cf2,pf);
  A.add();
  restore();
}

add(pic);
label(A.pdf(delay=100));


Si quelqu'un a une solution pour les boutons de contrôle...

Christophe

Edit : je signale quand même, même si ce n'est pas le sujet ici, que, pour que l'animation soit "exacte", il faut que le dernier compteur commence à pi/25 :

Code : Tout sélectionner

for (real t=pi/25; t<=2pi; t+=pi/25) {

Répondre