Page 1 sur 3

Animer une figure

MessagePosté: Vendredi 13 Avril 2012, 19:25
par XavteX
Bonjour,

Je souhaiterais transformer la figure suivante (in Gallery du site Asymptote) en gif animé avec le module animate. Que faut-il ajouter au code ? Est-ce envisageable ?

Merci de vos bons conseils.

Code: Tout sélectionner
import graph3;

size(200);

defaultrender.merge=true;

real c=(1+sqrt(5))/2;

triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};
triple[] x={(0,c,1),(0,-c,1),(0,-c,-1),(0,c,-1)};
triple[] y={(1,0,c),(1,0,-c),(-1,0,-c),(-1,0,c)};

triple[][] Q={
  {(c,1,0),(1,0,-c),(0,c,-1),(0,c,1),(1,0,c),(c,-1,0)},
  {(-c,1,0),(0,c,1),(0,c,-1),(-1,0,-c),(-c,-1,0),(-1,0,c)},
  {(-c,-1,0),(-c,1,0),(-1,0,-c),(0,-c,-1),(0,-c,1),(-1,0,c)},
  {(c,-1,0),(c,1,0),(1,0,c),(0,-c,1),(0,-c,-1),(1,0,-c)},
  {(0,c,1),(0,c,-1),(-c,1,0),(-1,0,c),(1,0,c),(c,1,0)},
  {(0,-c,1),(0,-c,-1),(-c,-1,0),(-1,0,c),(1,0,c),(c,-1,0)},
  {(0,-c,-1),(0,-c,1),(c,-1,0),(1,0,-c),(-1,0,-c),(-c,-1,0)},
  {(0,c,-1),(0,c,1),(c,1,0),(1,0,-c),(-1,0,-c),(-c,1,0)},
  {(1,0,c),(-1,0,c),(0,-c,1),(c,-1,0),(c,1,0),(0,c,1)},
  {(1,0,-c),(-1,0,-c),(0,-c,-1),(c,-1,0),(c,1,0),(0,c,-1)},
  {(-1,0,-c),(1,0,-c),(0,c,-1),(-c,1,0),(-c,-1,0),(0,-c,-1)},
  {(-1,0,c),(1,0,c),(0,c,1),(-c,1,0),(-c,-1,0),(0,-c,1)}
};

real R=abs(interp(Q[0][0],Q[0][1],1/3));

triple[][] P;
for(int i=0; i < Q.length; ++i) {
  P[i]=new triple[] ;
  for(int j=0; j < Q[i].length; ++j) {
    P[i][j]=Q[i][j]/R;
  }
}

for(int i=0; i < P.length; ++i) {
  for(int j=1; j < P[i].length; ++j) {
    triple C=P[i][0];
    triple A=P[i][j];
    triple B=P[i][j % 5+1];
    triple[] sixout=new
      triple[] {interp(C,A,1/3),interp(C,A,2/3),interp(A,B,1/3),interp(A,B,2/3),
                interp(B,C,1/3),interp(B,C,2/3)};
    triple M=(sum(sixout))/6;
    triple[] sixin=sequence(new triple(int k) {
        return interp(sixout[k],M,0.1);
      },6);
    draw(surface(reverse(operator--(...sixout)--cycle)^^
                 operator--(...sixin)--cycle,planar=true),magenta);
  }
}

for(int i=0; i < P.length; ++i) {
  triple[] fiveout=sequence(new triple(int k) {
      return interp(P[i][0],P[i][k+1],1/3);
    },5);
  triple M=(sum(fiveout))/5;
  triple[] fivein=sequence(new triple(int k) {
      return interp(fiveout[k],M,0.1);
    },5);
  draw(surface(reverse(operator--(...fiveout)--cycle)^^
               operator--(...fivein)--cycle,planar=true),cyan);
}
:

Re: Animer une figure

MessagePosté: Vendredi 13 Avril 2012, 21:22
par OG
Bonsoir

Je n'ai pas regardé ce que donnait la figure. Au pifomètre, je dirai que oui
cela sera peut-être très/trop lourd.
Quelle animation ici veux-tu faire ?

O.G.

edit : j'avais fait jadis une sphère avec un chemin dessiné sur cette sphère le tout animé
mais je viens de voir que ça ne compile plus. C'est du au modifications du module solids depuis...

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 07:44
par XavteX
Je voudrais la faire tourner lentement sur elle même.
Le code permet d'obtenir une figure 3D manipulable donc je me dis que c'est peu-être possible...

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 09:41
par GMaths
Bonjour,

XavteX a écrit:Je voudrais la faire tourner lentement sur elle même.
Le code permet d'obtenir une figure 3D manipulable donc je me dis que c'est peu-être possible...


Je l'ai peut-être faite tourner trop lentement : http://asy.gmaths.net/forum/animations-f11/icosaedre-tronque-t180.html#p1362
Changer la valeur de delay en ms si nécessaire.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 10:27
par XavteX
:D Incroyable !
Tu es un magicien !
Je vais étudier le code proposé...
Un grand MERCI !

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 10:49
par XavteX
Je souhaite encore changer la couleur du fond :
Code: Tout sélectionner
shipout(bbox(0.1cm,0.1cm,Fill(154666)));

modifie la couleur du cadre extérieur de l'image mais je veux changer la couleur d'arrière plan !
ça ne doit pas être très compliqué mais je ne connais pas la commande !

Merci

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 12:54
par GMaths
XavteX a écrit:Je vais étudier le code proposé...

Une info : j'ai ajouté la sphère circonscrite... invisible... pour avoir une "box" d'une taille fixe et éviter un sautillement de l'animation qui était induit par des hauteurs d'images différentes, quand le volume tourne.

XavteX a écrit:ça ne doit pas être très compliqué mais je ne connais pas la commande !

Bein en fait si, cela l'est : je crois bien, même, qu'asymptote (limitation d'asymptote et/ou du format prc ?) ne le permet pas.

Mais, comme la conversion en gif, est confiée à la fonction convert d'ImageMagick, on peut ruser en lui passant les bonnes options :

Essaye ceci :

Code: Tout sélectionner
A.movie(delay=100,options=" -fill yellow -opaque white ");


pour obtenir cela :

Image

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 14:23
par GMaths
Une version totalement différente de l'icosaèdre tronqué :

Image

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 19:41
par OG
Bonsoir

Pour une fois que j'allais répondre :)
Enfin j'étais à la journée Gutenberg.

A plus
O.g.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 20:00
par XavteX
Une dernière chose. Lorsque j'ouvre le fichier obtenu l'image est encore encadré d'un bandeau blanc même si l'arrière plan est bien dans la couleur souhaitée. L'image est donc un peu plus large que la figure elle même et se trouve encadrée d'un cadre blanc...

Merci beaucoup !

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 20:46
par OG
J'ai testé le code de Gaëtan avec l'ajout de l'instruction "fill yellow -opaque white"
et je n'ai pas en gif de blanc tout autour ?
Au passage je confirme qu'actuellement le moteur de rendu OpenGL ne permet pas d'avoir un fond coloré,
la question a été posée sur le forum d'asymptote.

O.G.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:00
par XavteX
Le fond est bien coloré mais lorsque j'ouvre le fichier dans firefox (l'objectif est d'insérer l'image dans une page HTML) il y a un cadre autour qui n'est pas joli.
Les animation du site de P. Ivaldi sont également entourés d'un cadre blanc...
Je cherche dans les options de Convert Image Magick...

:shock:

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:31
par OG
je crois que c'est firefox, avec chromium pas de blanc (quand j'ouvre un nouvel onglet pour le gif)

O.G.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:32
par GMaths
XavteX a écrit:Les animation du site de P. Ivaldi sont également entourés d'un cadre blanc...

Celles que tu vois en ligne...
... ou une animation que tu as essayé de compiler ? laquelle ?

XavteX a écrit:Je cherche dans les options de Convert Image Magick...

Pour info : j'ai utilisé la dernière version d'ImageMagick (et donc de convert).

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:36
par GMaths
OG a écrit:je crois que c'est firefox

:shock:
Avec firefox, pas cadre blanc, chez moi, pour les deux gif de cette page.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:40
par OG
GMaths a écrit:
OG a écrit:je crois que c'est firefox

:shock:
Avec firefox, pas cadre blanc, chez moi, pour les deux gif de cette page.

moi non plus mais si j'ouvre le gif du style file://.. alors cadre blanc (pas sous chrome).
Il faut donc plutôt voir du côté du html chez xavtex

O.G.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:46
par XavteX
?? Voici mon code le fond est plus sombre :
Code: Tout sélectionner
   settings.outformat="gif";
    settings.prc=false;
    import animate;
    import graph3;
    defaultrender.merge=true;

    size(78,78);

    animation A;

    real c=(1+sqrt(5))/2;

    triple[] z={(c,1,0),(-c,1,0),(-c,-1,0),(c,-1,0)};
    triple[] x={(0,c,1),(0,-c,1),(0,-c,-1),(0,c,-1)};
    triple[] y={(1,0,c),(1,0,-c),(-1,0,-c),(-1,0,c)};

    triple[][] Q={
      {(c,1,0),(1,0,-c),(0,c,-1),(0,c,1),(1,0,c),(c,-1,0)},
      {(-c,1,0),(0,c,1),(0,c,-1),(-1,0,-c),(-c,-1,0),(-1,0,c)},
      {(-c,-1,0),(-c,1,0),(-1,0,-c),(0,-c,-1),(0,-c,1),(-1,0,c)},
      {(c,-1,0),(c,1,0),(1,0,c),(0,-c,1),(0,-c,-1),(1,0,-c)},
      {(0,c,1),(0,c,-1),(-c,1,0),(-1,0,c),(1,0,c),(c,1,0)},
      {(0,-c,1),(0,-c,-1),(-c,-1,0),(-1,0,c),(1,0,c),(c,-1,0)},
      {(0,-c,-1),(0,-c,1),(c,-1,0),(1,0,-c),(-1,0,-c),(-c,-1,0)},
      {(0,c,-1),(0,c,1),(c,1,0),(1,0,-c),(-1,0,-c),(-c,1,0)},
      {(1,0,c),(-1,0,c),(0,-c,1),(c,-1,0),(c,1,0),(0,c,1)},
      {(1,0,-c),(-1,0,-c),(0,-c,-1),(c,-1,0),(c,1,0),(0,c,-1)},
      {(-1,0,-c),(1,0,-c),(0,c,-1),(-c,1,0),(-c,-1,0),(0,-c,-1)},
      {(-1,0,c),(1,0,c),(0,c,1),(-c,1,0),(-c,-1,0),(0,-c,1)}
    };

    real R=abs(interp(Q[0][0],Q[0][1],1/3));

    triple[][] P;
    for(int i=0; i < Q.length; ++i) {
      P[i]=new triple[] ;
      for(int j=0; j < Q[i].length; ++j) {
        P[i][j]=Q[i][j]/R;
      }
    }

    for (int k=0; k<180; k+=5) {
    transform3 T=rotate(-degrees(2pi*k/360),Z);

    for(int i=0; i < P.length; ++i) {
      for(int j=1; j < P[i].length; ++j) {
        triple C=P[i][0];
        triple A=P[i][j];
        triple B=P[i][j % 5+1];
        triple[] sixout=new
          triple[] {interp(C,A,1/3),interp(C,A,2/3),interp(A,B,1/3),interp(A,B,2/3),
                    interp(B,C,1/3),interp(B,C,2/3)};
        triple M=(sum(sixout))/6;
        triple[] sixin=sequence(new triple(int k) {
            return interp(sixout[k],M,0.1);
          },6);
        draw(T*surface(reverse(operator--(...sixout)--cycle)^^
                     operator--(...sixin)--cycle,planar=true),orange);
      }
    }

    for(int i=0; i < P.length; ++i) {
      triple[] fiveout=sequence(new triple(int k) {
          return interp(P[i][0],P[i][k+1],1/3);
        },5);
      triple M=(sum(fiveout))/5;
      triple[] fivein=sequence(new triple(int k) {
          return interp(fiveout[k],M,0.1);
        },5);
      draw(T*surface(reverse(operator--(...fiveout)--cycle)^^
                   operator--(...fivein)--cycle,planar=true),yellow);
    }
    draw(unitsphere,nullpen);
    A.add();
    erase();
    }
   A.movie(delay=100,options="-fill #154464 -opaque white");


Merci de me dire si toujours pas de cadre avec firefox...

XH

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 21:57
par OG
Chez moi ça ne change pas.
h78.gif
h78.gif (136.93 Kio) Vu 1984 fois

Je n'ai pas de blanc autour sur la page mathematex

Et toi ?

O.G.

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 22:03
par XavteX
Effectivement... Je ne comprend pas... Je compile avec Notepad++ asy.exe -V ... Cela n'a rien à voir ???
Moi j'ai un cadre blanc dans le gif à la sortie ! :cry:
XH

Re: Animer une figure

MessagePosté: Samedi 14 Avril 2012, 23:02
par GMaths
XavteX a écrit:Effectivement... Je ne comprend pas... Je compile avec Notepad++ asy.exe -V ... Cela n'a rien à voir ???
Moi j'ai un cadre blanc dans le gif à la sortie ! :cry:

Rien à voir avec Notepad++, puisque je l'utilise.

Faute d'idée, je te suggère de tout vérifier point par point.
Notamment, pour ce qui est de la version de convert, vérifie la version employée :
Image
... et pour le fichier animation.asy (qui fait appel à convert, en lui passant des options), je suppose que tu tu as le plus récent fourni avec Asymptote et que tu ne l'as pas changé ?