Modules bsp et animate

Tout ce qui concerne le langage Asymptote. Ce langage est utilisable sur le forum via les balises asy.
[participation réservée aux utilisateurs inscrits]
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.
Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Modules bsp et animate

Message non lu par Romain Janvier »

Bonjour,

Je suis en train d'essayer de faire une animation où je fais l'intersection d'un plan et d'un pavé droit. Si je ne fais qu'une image tout va bien. Mais si je fais une animation, il n'y a que l'intersection que je rajoute à la main qui est dessinée :

Code : Tout sélectionner

import bsp;
import animate;

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

currentprojection=obliqueX;
settings.render=0;
settings.prc=false;
currentlight = nolight;

typedef path3[] shape;

shape operator *(transform3 T, shape p){
  shape os;
  for(path3 g:p) os.push(T*g);
  return os;
}


path3 path(triple[] T){
  path3 P;
  for(triple i:T) P=P--i;
  return P;
}

void addshapes(face[] F, shape[] shp, pen drawpen=currentpen, pen fillpen=white)
{
  for(int i=0; i < shp.length; ++i)
    for(int j=0; j < shp[i].length; ++j) {
      path3 g=shp[i][j];
      picture pic=F.push(g);
      if(fillpen != nullpen) filldraw(pic,project(g),fillpen, drawpen);
      else draw(pic,project(g),drawpen);
      // filldraw(pic,g,currentlight.intensity(F[F.length-1].point)*fillpen, drawpen);
    }
}

real long=2,larg=2,haut=4;
real marge=1;

shape face1,face2,face3,face4,face6,plan;
//dessous
face1=(0,0,0)--(long,0,0)--(long,0,haut)--(0,0,haut)--cycle;
face2=(0,larg,0)--(long,larg,0)--(long,larg,haut)--(0,larg,haut)--cycle;
face3=(0,0,0)--(0,larg,0)--(0,larg,haut)--(0,0,haut)--cycle;
face4=(long,0,0)--(long,larg,0)--(long,larg,haut)--(long,0,haut)--cycle;
//face5=(0,0,0)--(long,0,0)--(long,larg,0)--(0,larg,0)--cycle;
face6=(0,0,haut)--(long,0,haut)--(long,larg,haut)--(0,larg,haut)--cycle;
real h2;

animation Anim;
for(real h1=6;h1>-1;h1-=1)
{
write("on passe a h="+(string)h1);
h2=h1-marge;
plan=(-marge,-marge,h1)--(long+marge,-marge,h1)--(long+marge,larg+marge,h2)--(-marge,larg+marge,h2)--cycle;

triple[] A1;
A1=intersectionpoints((0,0,0)--(0,larg,0)--(0,larg,haut)--(0,0,haut)--cycle,surface(plan));
face[] hidden,visible;
shape[] Shapes;
Shapes.push(face1);
Shapes.push(face2);
Shapes.push(face3);
Shapes.push(face4);
Shapes.push(plan);
Shapes.push(face6);
addshapes(hidden, Shapes, drawpen=linewidth(bp));
addshapes(visible, Shapes, drawpen=dashed, fillpen=nullpen);

picture pic;
size(pic,10cm,0);

if (A1.length >1){
  draw(pic,surface((long,0,0)+A1[1]--(long,0,0)+A1[0]--A1[0]--A1[1]--cycle),lightgreen+opacity(0.2));
  draw(pic,(long,0,0)+A1[1]--(long,0,0)+A1[0]--A1[0]);
  draw(pic,A1[0]--A1[1],dashed);
  pen pdernier=linewidth(bp);
  if (A1[1].z<haut){
    pdernier=dashed;
    }
  draw(pic,A1[1]--(long,0,0)+A1[1],pdernier);
  }
add(pic,hidden);
add(pic,visible);
add(pic.fit(),bbox(xmargin=3mm,invisible));
Anim.add(pic);
//restore();
erase();
};
Anim.movie();
Si je ne mets pas de pic, ca fait pareil. Par contre si j'enleve les rajouts de l'intersection (tous les draw que je fais), alors le pavé et le plan sont bien affichés.

Je ne comprends plus rien...
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: bsp et animate

Message non lu par GMaths »

Pas le temps de tester maintenant, en ce qui me concerne.

Juste une intervention pour rappeler que, quitte à utiliser bsp, il existe cela qui s'y rapporte : http://www.piprime.fr/files/tmp/geoespace.asy (version modifiée par Philippe de ce que l'on trouve sur syracuse/melusine)

Ainsi, ceci :

Code : Tout sélectionner

import geoespace_pi;
defaultbackpen +=linewidth(0);
currentprojection=orthographic(5,2,4);
size(8cm,0);
pave((-1,-1,-1),2,2,3,.9palegreen);
//(partie du plan d'équation x+y+z=3)
insertscene((1.5,-.5,2)--(2.5,0.5,0)--(-.5,2.5,1)--(-.5,.5,3)--cycle,red);
trace();
donne cela :
2011-03-30_133344.png
Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Re: Modules bsp et animate

Message non lu par Romain Janvier »

C'est marrant, avec geoespace j'obtenais des tirets qui etaient assez moche. Et comme il ne me tracait pas l'intersection, je ne gagnais pas grand chose par rapport à bsp.

J'ai fait un petit script qui me genere un fichier asy pour chaque iteration de la boucle et je vais concatener tous les pdf pour en faire un seul.

Mais ce n'est pas très pratique...

Edit :
Voici ce que j'ai reussi à faire en concatenant tous mes fichiers pdf.
animation-coupe-pave.gif
animation-coupe-pave.gif (131.97 Kio) Consulté 1764 fois
GMaths
Utilisateur chevronné
Utilisateur chevronné
Messages : 2042
Inscription : lundi 01 octobre 2007, 10:20

Re: Modules bsp et animate

Message non lu par GMaths »

Romain Janvier a écrit :C'est marrant, avec geoespace j'obtenais des tirets qui etaient assez moche.
C'est l'une des raisons justifiant cette version modifiée (par Philippe) de geoespace.asy : l'amélioration des pointillés.
Romain Janvier a écrit :Et comme il ne me tracait pas l'intersection, je ne gagnais pas grand chose par rapport à bsp.

J'ai fait un petit script qui me genere un fichier asy pour chaque iteration de la boucle et je vais concatener tous les pdf pour en faire un seul.

Mais ce n'est pas très pratique...
Effectivement, ce n'est pas très satisfaisant.

Pas le temps de "rentrer" dans ton code maintenant pour essayer de comprendre ce que tu as fait : je ne peux faire que des réponses rapides, désolé.
Romain Janvier
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 146
Inscription : lundi 23 août 2010, 14:57

Re: Modules bsp et animate

Message non lu par Romain Janvier »

C'est pas grave. De toute facon, il faut que je finisse tout cela pour demain, donc je vais faire avec mon script. Par contre j'aimerai bien comprendre. Je pense que le probleme vient de bsp qui doit creer une image intermediaire pour faire ses calculs et animate ne doit pas très bien gérer cela. Ou alors c'est le addshapes qui pose problème...