Plusieurs questions sur l'animation

Tout ce qui concerne le langage Asymptote. Ce langage est supporté sur le forum via les balises asy.

Modérateur : gdm_asy

Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Plusieurs questions sur l'animation

Message par loicwood »

Bonsoir,

j'essaye de construire une animation qui permet de de visualiser la fréquence d'apparition de la somme des deux dés suivant le nombre de simulations.

Voici le code que j'ai actuellement :

Code : Tout sélectionner

import math;
import graph;
import animate;

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

animation A;

int n=250;

unitsize(1cm,10cm);

//real xmin=0, xmax=12, ymin=0, ymax=1

real[] s={0,0,0,0,0,0,0,0,0,0,0,0,0};
real[] t={0,0,0,0,0,0,0,0,0,0,0,0,0};

for (int i=1; i<=n;++i){
save();
int de1=floor(unitrand()*6+1), de2=floor(unitrand()*6+1), de3=floor(unitrand()*6+1), de4=floor(unitrand()*6+1);

int som_de=de1+de2, som_de2=de3+de4;

s[som_de]=s[som_de]+1/n;
t[som_de2]=t[som_de2]+1/n;

xaxis("sommes", xmin=0,xmax=13,Ticks(Step=1),Arrow);
yaxis("fr\'equences", ymin=0, ymax=0.3,Ticks(Step=0.1),Arrow);

label("simulation n$^{\circ}$ :",(10,0.3));
label(format(" %i",i),(11.7,0.3));

for(int j=2;j<=12;++j){
draw((j+0.1,0)--(j+0.1,s[j]),blue+2bp);
draw((j-0.1,0)--(j-0.1,t[j]),red+2bp);

}

A.add();
restore();
}
//erase();
//A.movie(delay=50);
//label(A.pdf(BBox(1mm,nullpen),delay=50,"controls"));
A.glmovie();
J'obtiens un PDF sans problème, mais je n'arrive pas à obtenir un gif (j'utilise notepad++ avec NPPexec, j'ai essayé les compilations asy.exe -V $(FILE_NAME), asy.exe -f gif etc) sans succès. Je voudrais savoir s'il est possible également d'obtenir l'animation dans le même type de fenêtre que les graphiques 3D ?

Autre question : peut-on mettre plusieurs animations les unes au des dessous des autres sur une même page ?

Autre souci : dans le PDF, la première image de l'animation laisse apparaître deux bâtons plus grands que les autres, ce qui me paraît incongru.

Enfin, dernier problème, j'ai beau effacer le fichier PDF, quand je recompile, j'obtiens toujours le même graphique final... Le fichier est disponible ici.

Merci.

loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Plusieurs questions sur l'animation

Message par loicwood »

Je viens de faire quelques essais avec la fonction rand() : elle renvoie toujours les mêmes nombres dès lors que l'on ferme puis relance Asymptote. Comment avoir des vrais nombres tirés au hasard ?

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: Plusieurs questions sur l'animation

Message par chellier »

loicwood a écrit :Bonsoir,

j'essaye de construire une animation qui permet de de visualiser la fréquence d'apparition de la somme des deux dés suivant le nombre de simulations.

...

J'obtiens un PDF sans problème, mais je n'arrive pas à obtenir un gif (j'utilise notepad++ avec NPPexec, j'ai essayé les compilations asy.exe -V $(FILE_NAME), asy.exe -f gif etc) sans succès. Je voudrais savoir s'il est possible également d'obtenir l'animation dans le même type de fenêtre que les graphiques 3D ?
Bonjour,
Pour obtenir un gif, enlever : settings.outformat="pdf" et mettre A.movie(delay=50) comme sortie par exemple et compiler par asy -noV -f gif.
loicwood a écrit :Autre question : peut-on mettre plusieurs animations les unes au des dessous des autres sur une même page ?
Pour moi le plus simple est de tout mettre dans un fichier tex avec des balises "asy", voir le fichier exemple "inlinemovie.tex" de la documentation officielle.
loicwood a écrit :Autre souci : dans le PDF, la première image de l'animation laisse apparaître deux bâtons plus grands que les autres, ce qui me paraît incongru.
Je n'ai pas vraiment remarqué...
loicwood a écrit :Enfin, dernier problème, j'ai beau effacer le fichier PDF, quand je recompile, j'obtiens toujours le même graphique final... Le fichier est disponible ici.

Merci.
Ah ici c'est le problème des nombres aléatoires en informatique qui n'en sont pas vraiment... ce n'est pas un problème spécifique à asymptote, et je ne sais pas si on peut arranger la situation.

Christophe

OG
Modérateur
Modérateur
Messages : 2293
Inscription : lundi 12 mars 2007, 11:20
Localisation : Rouen

Re: Plusieurs questions sur l'animation

Message par OG »

Pour les nbres aléatoires c'est classique il faut initialiser le generateur avec l'heure.
O.G

loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Plusieurs questions sur l'animation

Message par loicwood »

chellier a écrit : loicwood a écrit:Autre souci : dans le PDF, la première image de l'animation laisse apparaître deux bâtons plus grands que les autres, ce qui me paraît incongru.


Je n'ai pas vraiment remarqué...
J'ai affiché les valeurs initiales sur le graphique, une des valeurs est différente de 0.
chellier a écrit :Bonjour,
Pour obtenir un gif, enlever : settings.outformat="pdf" et mettre A.movie(delay=50) comme sortie par exemple et compiler par asy -noV -f gif.
Merci ! Est-il possible d'obtenir le graphique directement dans la fenêtre qui s'ouvre quand on trace un graphique en 3D ?
OG a écrit :Pour les nbres aléatoires c'est classique il faut initialiser le generateur avec l'heure.
Je viens de trouver :

Code : Tout sélectionner

srand((int)time("%H%M%S"));
Merci !

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: Plusieurs questions sur l'animation

Message par chellier »

loicwood a écrit : Merci ! Est-il possible d'obtenir le graphique directement dans la fenêtre qui s'ouvre quand on trace un graphique en 3D ?
Comme ce n'est pas de la 3D, je ne pense pas... Peut-être est-ce possible en projetant le graphique dans un plan, mais ce n'est qu'une idée comme ça et ça me semble un peu compliqué !

Christophe

loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Plusieurs questions sur l'animation

Message par loicwood »

Quand je parle de la fenêtre, je veux dire que je ne veux pas avoir un fichier en sortie, juste voir le graphique se créer en temps réel.

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: Plusieurs questions sur l'animation

Message par chellier »

loicwood a écrit :Quand je parle de la fenêtre, je veux dire que je ne veux pas avoir un fichier en sortie, juste voir le graphique se créer en temps réel.
Oui, j'avais bien compris, mais c'est une fenêtre "OpenGL" , donc pour la 3D. Je ne sais pas si c'est faisable autrement, quelqu'un d'autre peut-être ?

Christophe

loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Plusieurs questions sur l'animation

Message par loicwood »

J'essaye d'inclure le code dans un fichier tex, cela compile, mais je n'ai pas d'animation, et pas de contrôles. Comment dois-je modifier les dernières lignes ?

Le but final est d'avoir plusieurs graphiques, mais dépendant d'une seule animation.

Pour l'instant, voilà le code que j'insère dans mon donc LaTeX :

Code : Tout sélectionner

\begin{center}
\begin{asy}
import math;
import graph;
import animate;

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

animation A=animation("movie1");

int n=10;

unitsize(0.5cm,10cm);

//real xmin=0, xmax=12, ymin=0, ymax=1

real[] s={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
real[] t={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

srand((int)time("%H%M%S"));

for (int i=1; i<=n;++i){

save();
int de1=floor(unitrand()*6+1), de2=floor(unitrand()*6+1), de3=floor(unitrand()*6+1), de4=floor(unitrand()*6+1);

int som_de=de1+de2, som_de2=de3+de4;

s[som_de]=s[som_de]+1/n;
t[som_de2]=t[som_de2]+1/n;

xaxis("sommes", xmin=0,xmax=13,Ticks(Step=1),Arrow);
yaxis("fr\'equences", ymin=0, ymax=0.3,Ticks(Step=0.1),Arrow);

label("simulation n$^{\circ}$ :",(10,0.3));
label(format(" %i",i),(11.7,0.3));

for(int j=1;j<=12;++j){
draw((j+0.1,0)--(j+0.1,s[j]),blue+2bp);
draw((j-0.1,0)--(j-0.1,t[j]),red+2bp);
//label(format("%f",s[j]),(j,0.25));
}

A.add();
restore();
}
erase();
//A.movie(delay=50,"controls");
//label(A.pdf(BBox(1mm,nullpen),delay=50,"controls"));
label(A.pdf("controls",delay=50,keep=!settings.inlinetex));
//A.glmovie();
\end{asy}
\ASYanimategraphics[controls]{150}{movie1}{}{}
\end{center}
\begin{center}
\begin{asy}
import math;
import graph;
import animate;

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

animation A=animation("movie1");

int n=10;

unitsize(0.5cm,10cm);


//real xmin=0, xmax=12, ymin=0, ymax=1

real[] s={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
real[] t={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

srand((int)time("%H%M%S"));

for (int i=1; i<=n;++i){

save();
int de1=floor(unitrand()*6+1), de2=floor(unitrand()*6+1), de3=floor(unitrand()*6+1), de4=floor(unitrand()*6+1);

int som_de=de1+de2, som_de2=de3+de4;

s[som_de]=s[som_de]+1/n;
t[som_de2]=t[som_de2]+1/n;

xaxis("sommes", xmin=0,xmax=13,Ticks(Step=1),Arrow);
yaxis("fr\'equences", ymin=0, ymax=0.3,Ticks(Step=0.1),Arrow);

label("simulation n$^{\circ}$ :",(10,0.3));
label(format(" %i",i),(11.7,0.3));

for(int j=1;j<=12;++j){
draw((j+0.1,0)--(j+0.1,s[j]),blue+2bp);
draw((j-0.1,0)--(j-0.1,t[j]),red+2bp);
//label(format("%f",s[j]),(j,0.25));
}

A.add();
restore();
}
erase();
//A.movie(delay=50,"controls");
//label(A.pdf(BBox(1mm,nullpen),delay=50,"controls"));
label(A.pdf("controls",delay=50,keep=!settings.inlinetex));
//A.glmovie();
\end{asy}
\ASYanimategraphics[controls]{150}{movie1}{}{}
\end{center}
J'ai également un autre problème, je n'arrive pas à gérer la taille du graphique (unitsize(1cm, 5cm) fait sortir le graphique de la page).

Enfin, le problème de l'aléatoire réapparaît avec ce code...

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: Plusieurs questions sur l'animation

Message par chellier »

loicwood a écrit :J'essaye d'inclure le code dans un fichier tex, cela compile, mais je n'ai pas d'animation, et pas de contrôles. Comment dois-je modifier les dernières lignes ?

Le but final est d'avoir plusieurs graphiques, mais dépendant d'une seule animation.
Il faut trois compilations :

Code : Tout sélectionner

pdflatex monfichier
asy monfichier-*.asy
pdflatex monfichier
ou alors utiliser le script latexmk :

Code : Tout sélectionner

latexmk -pdf monfichier
Attention, il faut aussi supprimer les lignes suivantes (déjà pris en charge par la figure asymptote) :

Code : Tout sélectionner

\ASYanimategraphics[controls]{50}{movie1}{}{}
Christophe

EDIT : J'ai compilé avec le préambule suivant :

Code : Tout sélectionner

\documentclass{article}
\usepackage[inline]{asymptote}
%\usepackage{asymptote}
\usepackage{animate}

chellier
Modérateur
Modérateur
Messages : 355
Inscription : samedi 25 juillet 2009, 12:25
Localisation : Le Creusot

Re: Plusieurs questions sur l'animation

Message par chellier »

J'ai repris le premier code pour le problème des valeurs non nuls au départ ( j'ai mis mes modifications entre //----) :

Code : Tout sélectionner

import math;
import graph;
import animate;

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

animation A;

int n=10;

unitsize(1cm,10cm);

//real xmin=0, xmax=12, ymin=0, ymax=1

real[] s={0,0,0,0,0,0,0,0,0,0,0,0,0};
real[] t={0,0,0,0,0,0,0,0,0,0,0,0,0};

srand((int)time("%H%M%S"));
//------------------------------------------------------------
int i=0;

xaxis("sommes", xmin=0,xmax=13,Ticks(Step=1),Arrow);
yaxis("fr\'equences", ymin=0, ymax=0.3,Ticks(Step=0.1),Arrow);

//------------------------------------------------------------
label(format("simulation n$^{\circ}$ :\quad %i",i),(10,0.3));
//label(format(" %i",i),(11.7,0.3));
//------------------------------------------------------------
for(int j=2;j<=12;++j){
draw((j+0.1,0)--(j+0.1,s[j]),blue+2bp);
draw((j-0.1,0)--(j-0.1,t[j]),red+2bp);

}
A.add();
erase();

//------------------------------------------------------------
for (int i=1; i<=n;++i){
save();
int de1=floor(unitrand()*6+1), de2=floor(unitrand()*6+1), de3=floor(unitrand()*6+1), de4=floor(unitrand()*6+1);

int som_de=de1+de2, som_de2=de3+de4;

s[som_de]=s[som_de]+1/n;
t[som_de2]=t[som_de2]+1/n;

xaxis("sommes", xmin=0,xmax=13,Ticks(Step=1),Arrow);
yaxis("fr\'equences", ymin=0, ymax=0.3,Ticks(Step=0.1),Arrow);

//------------------------------------------------------------
label(format("simulation n$^{\circ}$ :\quad %i",i),(10,0.3));
//label(format(" %i",i),(11.7,0.3));
//------------------------------------------------------------
for(int j=2;j<=12;++j){
draw((j+0.1,0)--(j+0.1,s[j]),blue+2bp);
draw((j-0.1,0)--(j-0.1,t[j]),red+2bp);

}

A.add();
restore();
}
//erase();
//A.movie(delay=50);
label(A.pdf(BBox(1mm,nullpen),delay=50,"controls"));
//A.glmovie();
Christophe

loicwood
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 121
Inscription : dimanche 23 octobre 2011, 11:24
Localisation : Souppes sur Loing

Re: Plusieurs questions sur l'animation

Message par loicwood »

Merci pour la modification du code.

J'arrive maintenant à avoir deux graphiques (une anim A et une anim B), est-il possible d'avoir une seule barre de contrôle pour lancer les deux animations en même temps ?