[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 : 104
Enregistré le : jeu. 18 mars 2010, 17:30

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

Message non lu par chellier » ven. 6 août 2010, 22:32

GM a écrit :
GM a écrit :Une variante plus simple :

Avec

Code : Tout sélectionner

label(A.pdf(BBox(Fill(white)),delay=100,"controls"));

pour avoir le même rendu que ton exemple initial, j'obtiens un pdf qui a le poids du tien 1,38.. Mo + 8ko.
8ko, c'est bien moins que la taille du fichier que l'on obtient avec uniquement l'image fixe.
Donc comment l'expliquer... ?


J'avais pas été jusqu'à aller voir au ko :D
Pour l'explication, peut-être que c'est dû au fait qu'il y ait deux figures (décalage caché par la boite) :?:

GM a écrit :Enfin bref... ta méthode était très bien. ;-)

Merci, je m'étais pas mal pris la tête sur la page sur les "frame-picture" d'un certain Gaétan M. :D

Christophe

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

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

Message non lu par GM » ven. 6 août 2010, 22:40

chellier a écrit :Merci, je m'étais pas mal pris la tête sur la page sur les "frame-picture" d'un certain Gaétan M. :D

Si tu savais à quel point, je me suis pris la tête pour écrire cette page là... :lol: :mrgreen:

... et je retourne la voir quand je n'ai plus utilisé de frame depuis un bout de temps :mrgreen:
car il faut en convenir : ce n'est pas simple tout cela. :lol:


Tu n'y as pas vu trop de conneries ? :?: :roll: :mrgreen:
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

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

Message non lu par chellier » ven. 6 août 2010, 22:42

GM a écrit :Tu n'y as pas vu trop de conneries ? :?: :roll: :mrgreen:

Non... mais j'ai pas tout compris :mrgreen:

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

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

Message non lu par GM » ven. 6 août 2010, 22:44

chellier a écrit :
GM a écrit :Tu n'y as pas vu trop de conneries ? :?: :roll: :mrgreen:

Non... mais j'ai pas tout compris :mrgreen:

C'est donc à lire... en s'en méfiant ! :mrgreen:
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

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

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

Message non lu par GM » sam. 7 août 2010, 12:10

Une dernière variante pour la route :

Code : Tout sélectionner

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

real f(real x) {return cos(x);}
path Cf1=graph(f,0,pi,n=400);
path Cf2=graph(f,-pi,pi,n=400);
path Cf3=graph(f,pi,3pi,n=400);
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));

animation A;
// --------------------------------------------------------------------------
for (real p=-1; p<=1; p+=.1) {
  save();
  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();
}
erase();
label(A.pdf(delay=100,"controls"));


Suppression du BBox dans le label final : à la place, il suffit de mettre un erase() juste avant : plus de problème de superposition ! ;-)
Et ainsi, on retrouve un fichier de 1,38 Mo (1 450 827 octets... c'est même 300 octets de moins que ton fichier. :D :lol:)
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

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

Message non lu par chellier » sam. 7 août 2010, 12:42

GM a écrit :Et ainsi, on retrouve un fichier de 1,38 Mo (1 450 827 octets... c'est même 300 octets de moins que ton fichier. :D :lol:)

C'est bon, cette fois je m'avoue vaincu :D

OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

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

Message non lu par OG » sam. 7 août 2010, 21:38

Bonsoir

Merci pour le coup du erase() à la fin pour ce fichu décalage.
Question poids, il est très facile de gagner encore 500ko au moins

Code : Tout sélectionner

path Cf1=graph(f,0,pi,n=20,Hermite);//,n=400);
path Cf2=graph(f,-pi,pi,n=20,Hermite);//,n=400);
path Cf3=graph(f,pi,3pi,n=20,Hermite);//,n=400);

400 tout de même c'est exagéré pour une gentille fonction cosinus.

O.G.

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

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

Message non lu par chellier » dim. 8 août 2010, 08:32

OG a écrit :400 tout de même c'est exagéré pour une gentille fonction cosinus.O.G.

Oui, en effet, c'est l'habitude, je ne pense même plus à changer ces paramètres :roll:

En tous cas, c'est drôlement efficace le coup du "Hermite". Je n'avais jamais essayé cette interpolation... :oops:

Le poids devient enfin raisonnable !

Merci !
Christophe

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

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

Message non lu par GM » dim. 8 août 2010, 14:05

On peut descendre le poids à 421 ko ainsi :

Code : Tout sélectionner

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

real f(real x) {return cos(x);}
path Cf1=graph(f,0,pi,n=20,Hermite);//,n=400);
path Cf2=graph(f,-pi,pi,n=20,Hermite);//,n=400);
path Cf3=graph(f,pi,3pi,n=20,Hermite);//,n=400);
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
erase();

animation A;
// --------------------------------------------------------------------------
for (real p=-1; p<=1; p+=.1) {
  save();
  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,"controls"),(0,-0.43));


Ainsi, l'image de fond n'est plus dans l'animation (d'où le gain de poids) : elle est vraiment fixe.
Mais du même coup le label/animation a une bounding box différente de celle de l'image fixe
et il faut placer le label/animation en spécifiant des coordonnées : j'ai rectifié manuellement l'ordonnée après une première compilation.
Il doit y avoir un calcul possible du décalage que je ne ferai pas. (Bonne prise de tête à celui qui veut se lancer dans le calcul ; je lui précise que l'astuce qui consisterait à placer le label/animation en (0,1) vers le sud ne fonctionne pas car il y a une des écritures (2\pi\vec{\jmath}) qui va plus haut ;-)).

Le problème : la position (trop collée à l'image) des boutons mais mon survol de la doc d'animate m'a donné l'impression qu'il n'y avait pas de paramètre de positionnement par rapport à l'image. Il faudrait demander à l'auteur.

Sinon, on peut penser à ruser en ajoutant une marge en bas à l'animation, pour décaler les boutons. Je dis cela sans avoir réfléchi à comment je ferais... et si c'est possible sans reprise de poids.
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 24/02/21) :
PC n°1 :Windows 10 - Asymptote(2.82)+MikTeX2.9 - Editeurs : Notepad++, TeXworks, Visual Studio Code.
PC n°2 : Ubuntu 20.04LTS - Asymptote(2.67-?? git) + TexLive2020
Mon serveur : Debian Stretch- Asymptote(2.68-16 git) + TexLive2018
Merci de préciser la votre !

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

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

Message non lu par chellier » dim. 8 août 2010, 21:32

Bon, ben puisqu'on continue :D :
J'ai essayé de trouver la hauteur de l'image fixe (je pense que j'ai réussi...) et de l'animation (mais là j'ai bricolé et ça ne va pas :cry: ) pour calculer l'écart et trouver le décalage. Mais j'ai du mal à voir comment l'animation est placée par rapport à l'image fixe (alignée sur le haut, centrée, ... ?). Enfin, c'est beaucoup de bricolage, dommage car on y gagne vraiment en poids !

Code : Tout sélectionner

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

real hbb, hbba1min, hbba1max, hbba2min, hbba2max, hbba3min, hbba3max, ha, diff;
real f(real x) {return cos(x);}
path Cf1=graph(f,0,pi,n=20,Hermite);//,n=400);
path Cf2=graph(f,-pi,pi,n=20,Hermite);//,n=400);
path Cf3=graph(f,pi,3pi,n=20,Hermite);//,n=400);
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
hbb=max(pic).y-min(pic).y;  //hauteur de l'image fixe

erase();

animation A;
// --------------------------------------------------------------------------
for (real p=-1; p<=1; p+=.1) {
  save();
  trace(Cf1,pinit);
  draw(xscale(-p)*Cf1,pinit);
  hbba1max=max(currentpicture).y; //
  hbba1min=min(currentpicture).y;
  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);
  hbba2max=max(currentpicture).y; //
  hbba2min=min(currentpicture).y;
  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);
  hbba3max=max(currentpicture).y; //
  hbba3min=min(currentpicture).y;
  A.add();
  restore();
}

add(pic);
ha=max(hbba1max,hbba2max,hbba3max)-min(hbba1min,hbba2min,hbba3min); //hauteur animation
diff=(hbb-ha)/2; // Calcul du décalage
label(A.pdf(delay=100,"controls"),(0,-diff/cm));


Christophe

PS : je vais me coucher, j'ai mal à la tête :!:

Répondre