Moebius et 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 !
maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Moebius et animation

Message non lu par maurice » dim. 13 juin 2010, 19:54

Bonjour,
Au départ que voulais imiter l'animation qui se trouve ici : http://fr.wikipedia.org/wiki/Ruban_de_M%C3%B6bius.

Pas de problème pour le ruban ;
Pour l'animation je voulais me contanter d'un point qui se déplace le long du bord.

Code : Tout sélectionner

//Ruban Moëbius avec Asymptote 1.96

import graph3;
import animate;

settings.tex="pdflatex";
settings.outformat="pdf";
settings.render=0; // à commenter si besoin

currentprojection=perspective(5,18,10);
currentlight=light(8,10,2);

//Taille de l'image
size(12cm,0);

//Fonction paramétrique
int k=1;
int n=55;
triple f(pair z) {return ((2+z.x*cos(k*z.y))*cos(2*z.y), (2+z.x*cos(k*z.y))*sin(2*z.y), z.x*sin(k*z.y));}

//Ruban de Moëbius
surface s=surface(f,(-1,0),(1,pi),25,250);
draw(s,blue,black);

//Bord du ruban

animation anim;

path3 bord;
triple[] b=new triple[2*n+1];
    b[0]=(3,0,0);

for (int i=1; i<=2*n; i+=1) {
   save();
   pair a=(1,i*pi/n);
   b[i]=f(a);
   draw(b[i-1]--b[i],1bp+orange);
   anim.add();
}
anim.movie(delay=200);


Si je ne compile que la partie surface, pas de problème, 10 secondes c'est fini.
Si je ne compile que la partie animation (le bord de la surface), 10 secondes et c'est fini (même avec n=55).
Par contre les deux en même temps à plus 5 itérations ça tourne pendant longtemps ... la dernière j'ai interrompu la compilation au bout de 35 min.

Existe-t-il un moyen de rendre la compilation plus rapide (pour n=5, ca crée 11 images, chaque image prend 10 secondes, on est loin des 20-30 min !);

Merci

Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Moebius et animation

Message non lu par GM » lun. 14 juin 2010, 11:34

Message pour dire que je constate aussi des problèmes...
... mais comme, en ce moment, il y a pas mal de changements de version d'Asymptote (à nouveau, tout à l'heure (v1.98) pour des pb de gestion de la mémoire sous windows... et des changements importants de la 3D), je ne vais pas creuser la question maintenant.
J'ai fait très peu d'animations avec de la 3D et pas du tout avec des surfaces ainsi définies donc, sans avoir le temps de tester suffisamment, je ne sais pas trop ce qu'il se passe.
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 !

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

Re: Moebius et animation

Message non lu par OG » lun. 14 juin 2010, 12:55

Rapidement

j'ai fait quelques tests hier et constaté des pbs avec la projection, settings.render=2,
en format gif ou pdf.
J'ai envoyé un mail à John. Changer de projection en "orthographic" résout la question.

Comme c'est de la 3D, une sortie pdf et settings.render=0 rend effectivement
les choses lentes. Il faut dire que

Code : Tout sélectionner

surface s=surface(f,(-1,0),(1,pi),25,250);

est exagéré (le 250). Comme j'ai déjà dit ici, il faut donner des valeurs
raisonnables pour les surfaces.

Pour une animation 3D (mon avis) il faut demander settings.render>0, et accepter
des images bitmap.

Ensuite le code

Code : Tout sélectionner

draw(b[i-1]--b[i],1bp+orange);

ne correspond pas à l'animation donnée dans le lien, mais peut-être est-ce voulu ?

Pourrais-tu donner le code complet (bord, surface, etc).

Merci
O.G.

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Moebius et animation

Message non lu par maurice » lun. 14 juin 2010, 16:50

OG a écrit :Rapidement

j'ai fait quelques tests hier et constaté des pbs avec la projection, settings.render=2,
en format gif ou pdf.
J'ai envoyé un mail à John. Changer de projection en "orthographic" résout la question.


OK, je vais essayer.

OG a écrit :Comme c'est de la 3D, une sortie pdf et settings.render=0 rend effectivement
les choses lentes.


Comme je ne sais pas ce que signifient les valeurs de setting.render ca complique les choses.

OG a écrit :Il faut dire que

Code : Tout sélectionner

surface s=surface(f,(-1,0),(1,pi),25,250);

est exagéré (le 250). Comme j'ai déjà dit ici, il faut donner des valeurs
raisonnables pour les surfaces.


Pardon, je vais essayer avec n=25


OG a écrit :Ensuite le code

Code : Tout sélectionner

draw(b[i-1]--b[i],1bp+orange);

ne correspond pas à l'animation donnée dans le lien, mais peut-être est-ce voulu ?

oui, j'avais essayé avec les rectangles mais il y avait des problèmes et j'ai donc simplifié la situation.
Je peux aussi anvoyer le code avec les rectangles si tu veux.

voici le code :

Code : Tout sélectionner

//Ruban Moëbius avec Asymptote 1.96

import graph3;
import animate;

settings.tex="pdflatex";
settings.outformat="pdf";
settings.render=0; // à commenter si besoin

currentprojection=perspective(5,18,10);
currentlight=light(8,10,2);

//Taille de l'image
size(12cm,0);

//Fonction paramétrique
int k=1;
int n=25;
triple f(pair z) {return ((2+z.x*cos(k*z.y))*cos(2*z.y), (2+z.x*cos(k*z.y))*sin(2*z.y), z.x*sin(k*z.y));}

//Ruban de Moëbius
surface s=surface(f,(-1,0),(1,pi),25,n);
draw(s,blue,black);

//Bord du ruban

animation anim;

path3 bord;
triple[] b=new triple[2*n+1];
    b[0]=(3,0,0);
for (int i=1; i<=2*n; i+=1) {
   save();
   pair a=(1,i*pi/n);
   b[i]=f(a);
   draw(b[i-1]--b[i],1bp+orange);
   anim.add();
}
anim.movie(delay=300);


Je vais donc remplacer perspective par orthographic, baisser le n à 25 et le setting.render= ?.

Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Moebius et animation

Message non lu par GM » lun. 14 juin 2010, 17:09

maurice a écrit :setting.render= ?.

De toute façon, pas 0, car sinon tu auras le bord orange devant la surface... même aux endroits où elle devrait être derrière : c'est le problème que j'ai avec les exemples 3D que je tente de compiler via le forum.

J'ai testé avec setting.render=2; puis setting.render=4; : cela fonctionne bien.

Bien vu Olivier pour le problème liè à perspective (plus de problème avec orthographic) : on aurait pu chercher longtemps.
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 !

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

Re: Moebius et animation

Message non lu par OG » lun. 14 juin 2010, 19:26

GM a écrit :Bien vu Olivier pour le problème liè à perspective (plus de problème avec orthographic) : on aurait pu chercher longtemps.


De rien, c'est mon côté chercheur qui trouve de temps en temps :)

O.G.

maurice
Messages : 262
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

Re: Moebius et animation

Message non lu par maurice » mar. 15 juin 2010, 00:42

Bonjour voici où j'en suis de l'animation de départ (voir .gif en attaché j'ai du baissé la valeur de n à 19 sinon fichier trop gros).
Il reste des problèmes de couleurs et de luminosité.
A régler peut être avec

Code : Tout sélectionner

currentlight=light(?,?,?);


Voici le code :

Code : Tout sélectionner

//Ruban Moëbius avec Asymptote 1.96

import graph3;
import animate;

settings.tex="pdflatex";
settings.outformat="pdf";
settings.render=2; // à commenter si besoin
//settings.prc=false;

currentprojection=orthographic(5,18,10);
currentlight=light(15,-15,50);

//Taille de l'image
size(12cm,0);

//Fonction paramétrique
int k=1;
int n=25;
triple f(pair z) {return ((2+z.x*cos(k*z.y))*cos(2*z.y), (2+z.x*cos(k*z.y))*sin(2*z.y), z.x*sin(k*z.y));}

//Ruban de Moëbius
surface s=surface(f,(-1,0),(1,pi),25,50);
draw(s,blue);

//Animation
animation A;
real pas=pi/(2*n);

triple O=(0,0,0);

for (int i=0; i<2*n; i+=1) {
   save();
   pair a,b,c,d;
        a=(1,i*pi/n+pas);
        b=(1,i*pi/n-pas);
        c=(-1,i*pi/n-pas);
        d=(-1,i*pi/n+pas);
   path3 plan=f(a)--f(b)--f(c);
   path3 p=f(a)--f(b)--f(c)--f(d)--cycle;
   triple norm=normal(plan);
   transform3 t=shift(0.1*norm);
   path3 p1=t*p;
   path3 p2=(inverse(t))*p;
   draw(surface(p1),red);
   draw(surface(p2),yellow);
   A.add();
   restore();
}
A.movie();
//label(A.pdf(BBox(1mm,nullpen),delay=500,"controls,loop"));


dites moi ce que vous en penser et si on peut régler l'éclairage et les couleurs ...

Merci d'avance

Maurice
Fichiers joints
AniMoebius.gif
AniMoebius.gif
AniMoebius.gif (233.29 Kio) Vu 8562 fois
Doc 3D
Si ça ne marche pas, essayez la version pdf

Fedora 23 -- Asymptote 2.35 -- TeXlive 2013 -- emacs et/ou gedit

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

Re: Moebius et animation

Message non lu par GM » mar. 15 juin 2010, 06:53

maurice a écrit :dites moi ce que vous en penser et si on peut régler l'éclairage et les couleurs ...

Mettre plusieurs spots (à bien choisir) pour la surface :

Code : Tout sélectionner

currentlight=light((15,-15,50),(-15,15,50));

... et mettre un nolight pour les p1 et p2 :

Code : Tout sélectionner

draw(surface(p1),red,nolight);
draw(surface(p2),yellow,nolight);

J'ai testé en modifiant t (transform3 t=shift(0.04*norm);) ... et avec les suggestions ci-dessus :

2010-06-15_081113.png
2010-06-15_081113.png (22.03 Kio) Vu 8553 fois


En modifiant les sources de lumière ou en ajoutant encore... tu vas finir par trouver ce qu'il te plait.
Affiner le réglage des lumières sur une seule image... et non sur l''animation. ;-)
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: Moebius et animation

Message non lu par GM » mar. 15 juin 2010, 07:27

Je rappelle qu'il y a désormais des subtilités supplémentaires de réglage de compression depuis la version 1.96 (on en est à la 1.98 que j'ai utilisée) :

Nouvelle structure render dans three.asy :
http://asymptote.svn.sourceforge.net/viewvc/asymptote/trunk/asymptote/base/three.asy?view=markup&sortby=rev&sortdir=down
qui a amené John a modifié quasiment tous les exemples 3D de la galerie officielle :

Un exemple : sphere.asy

Code : Tout sélectionner

import three;

size(200);
currentprojection=orthographic(5,4,3);

draw(unitsphere,green,render(compression=Zero,merge=true));


Quel est l'impact de l'ajout suivant ?

Code : Tout sélectionner

render(compression=Zero,merge=true)

Je n'ai pas encore testé... mais je me demande s'il n'y a pas compression par défaut (et donc dégradation de la qualité de l'image que je propose ci-dessus) étant donné que je n'ai pas ajouté : compression=Zero, dans l'exemple de Maurice.
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: Moebius et animation

Message non lu par GM » mar. 15 juin 2010, 08:25

maurice a écrit :(voir .gif en attaché)

Je suppose que tu l'as produit directement avec asymptote ?

J'ai tenté de refaire un gif (ce que je n'avais plus fait depuis longtemps).... sous windows, avec la dernière version d'Asymptote

et problème :

Code : Tout sélectionner

C:\Program Files (x86)\Asymptote/animation.asy: 85.15: merge failed


Apparemment un problème avec convert :

Code : Tout sélectionner

  int merge(int loops=0, real delay=animationdelay, string format="gif",
            string options="", bool keep=settings.keep) {
    string args="-loop " +(string) loops+" -delay "+(string)(delay/10)+
      " -alpha Off -dispose Background "+options;
    for(int i=0; i < files.length; ++i)
      args += " " +files[i];write(args);
    int rc=convert(args,prefix+"."+format,format=format);
    this.purge(keep);
    if(rc == 0) animate(file=prefix+"."+format,format=format);
    else abort("merge failed");
    return rc;
  }


sauf que la commande convert semble fonctionner parfaitement en console... donc je ne comprends pas ce qu'il se passe.

Quelqu'un (surtout sous windows) peut-il me dire ce que donne la compilation de ce qui suit ? Merci.

Code : Tout sélectionner

//Ruban Moëbius avec Asymptote 1.96

import graph3;
import animate;

//settings.tex="pdflatex";
settings.outformat="gif";
//settings.render=2; // à commenter si besoin
//settings.prc=false;

currentprojection=orthographic(5,18,10);
currentlight=light((15,-15,50),(-15,15,50));

//Taille de l'image
size(150,0);

//Fonction paramétrique
int k=1;
int n=5;
triple f(pair z) {return ((2+z.x*cos(k*z.y))*cos(2*z.y), (2+z.x*cos(k*z.y))*sin(2*z.y), z.x*sin(k*z.y));}

//Ruban de Moëbius
surface s=surface(f,(-1,0),(1,pi),25,50);
draw(s,blue);

//Animation
animation A;
real pas=pi/(2*n);

triple O=(0,0,0);

for (int i=0; i<2*n; i+=1) {
   save();
   pair a,b,c,d;
   a=(1,i*pi/n+pas);
   b=(1,i*pi/n-pas);
   c=(-1,i*pi/n-pas);
   d=(-1,i*pi/n+pas);
   path3 plan=f(a)--f(b)--f(c);
   path3 p=f(a)--f(b)--f(c)--f(d)--cycle;
   triple norm=normal(plan);
   transform3 t=shift(0.04*norm);
   path3 p1=t*p;
   path3 p2=(inverse(t))*p;
   draw(surface(p1),red,nolight);
   draw(surface(p2),yellow,nolight);
   A.add();
   restore();
}
A.movie(keep=true);
//label(A.pdf(BBox(1mm,nullpen),delay=500,"controls,loop"));
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 !

Répondre