Page 2 sur 2

Re: Buildcycle

Posté : ven. 16 avr. 2010, 20:42
par OG
Bonsoir

Ok. Le coup du buildcycle ne marche pas à cause des erreurs d'arrondis.
En effet pour buildcycle, les chemins doivent délimiter une zone connexe, pas de
trou. Or si tu testes

Code : Tout sélectionner

pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,60,120));

le gg sera vide ! Autrement dit tes deux chemins ne délimitent pas une zone, comme le feraient
deux traits parallèles.

Alors que

Code : Tout sélectionner

pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,59,121));
draw(gg[0],red+2bp);
draw(gg[1],red+2bp);

fonctionne impec ! C'est assez vicieux ce genre de truc. Ne jamais oublier
que l'on a affaire à du numérique.

Du coup tu peux construire ton buildcycle tranquille avec

Code : Tout sélectionner

path oreille=buildcycle((arc(O,pA,pB)),(arc(pO,1,59,121))); 
filldraw(oreille,lightgrey,blue);


Une autre façon serait aussi

Code : Tout sélectionner

path oreille=arc(O,pA,pB)--arc(pO,1,120,60)--cycle;
filldraw(oreille);

En effet, à quoi bon utiliser buildcycle vu que tu connais précisément les deux parties
de ton chemin !

Figure asymptote a6c9867a4975d96ee17afa3c3f8fbc35
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1.  
  2. //Fractales: Les oreilles de Mickey avec asymptote 1.92
  3.  
  4. import geometry;
  5.  
  6. //Taille de l'image
  7. size(10cm,0);
  8.  
  9. void mickey(path p, pair centre, pair O, int n, pen stylo=black) {
  10. path image, im1, im2;
  11. transform h=scale(1/sqrt(3),centre);
  12. image=h*p;
  13. path oreille1=rotate(-60,O)*image;
  14. path oreille2=rotate(60,O)*image;
  15. filldraw(oreille1,lightgrey,blue);
  16. filldraw(oreille2,lightgrey,blue);
  17. if (n>0) {
  18. mickey(oreille1, rotate(-60,O)*centre, rotate(-60,O)*(h*O), n-1,stylo);
  19. mickey(oreille2, rotate(60,O)*centre, rotate(60,O)*(h*O), n-1, stylo);
  20. }
  21. else {
  22. //path oreille1=rotate(-60,O)*image;
  23. //path oreille2=rotate(60,O)*image;
  24. filldraw(oreille1,lightgrey,blue);
  25. filldraw(oreille2,lightgrey,blue);
  26. }
  27. }
  28.  
  29. //Triangles de départ
  30. pair pA,pB,pC,pO,O;
  31. pA=(0,0);
  32. pB=(-1,0);
  33. pC=rotate(60,pB)*pA;
  34. pO=rotate(60,pA)*pB;
  35. O=((pA+2*((pB+pC)/2))/3);
  36.  
  37. //dot("$A$",pA,N);
  38. //dot("$B$",pB,S);
  39. //dot("$C$",pC,W);
  40. //dot("$O'$",pO,E);
  41. //dot("$O$",O,SW);
  42.  
  43. //draw(arc(O,pA,pB));
  44. //draw(arc(pO,pA,pB));
  45. path oreille=arc(O,pA,pB)--arc(pO,1,120,60)--cycle;
  46. //filldraw(oreille);
  47. //path oreille=buildcycle((arc(O,pA,pB)),(arc(pO,1,59,121))); //C'Est la le problème
  48. //pair[] gg=intersectionpoints(arc(O,pA,pB),arc(pO,1,59,121));
  49. //draw(gg[0],red+2bp);
  50. //draw(gg[1],red+2bp);
  51. filldraw(oreille,lightgrey,blue);
  52.  
  53.  
  54. //Définition de l'homothétie
  55. real k=(sqrt(3))/3;
  56. pair centre=((O-k*pO)/(1-k));
  57. //dot("$\Omega$",centre,N);
  58. transform h=scale(k,centre);
  59.  
  60. //Récurssion n=0 pour les oreilles simples
  61. mickey(oreille,centre,O,1,blue);
  62.  
  63. // Ajout d'un cadre, distant des bords de l'image de 3mm
  64. shipout(bbox(5mm,white));
  65.  
  66.  


Cela correspond-il ?

O.G. qui souffre de l'absence de Gaëtan. Oouep trop de vacances !

Re: Buildcycle

Posté : ven. 16 avr. 2010, 20:46
par chellier
Bonsoir,
J'ai déjà rencontré des problèmes avec buildcycle, est-ce que les modifications que j'ai effectuées te conviennent ? Je les ai mis entre

Code : Tout sélectionner

//---------------------------------------------


Code : Tout sélectionner

//Fractales: Les oreilles de Mickey avec asymptote 1.92

import geometry;

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

void mickey(path p, pair centre, pair O, int n, pen stylo=black) {
       path image, im1, im2;
       transform h=scale(1/sqrt(3),centre);
       image=h*p;
       path oreille1=rotate(-60,O)*image;
       path oreille2=rotate(60,O)*image;
//----------------------------------------------------------------------------------
       filldraw(oreille1,lightgrey,stylo);
       filldraw(oreille2,lightgrey,stylo);
//----------------------------------------------------------------------------------
       if (n>0) {
                mickey(oreille1, rotate(-60,O)*centre, rotate(-60,O)*(h*O), n-1,stylo);
                mickey(oreille2, rotate(60,O)*centre, rotate(60,O)*(h*O), n-1, stylo);
       }
       else {
            //path oreille1=rotate(-60,O)*image;
            //path oreille2=rotate(60,O)*image;
            filldraw(oreille1,lightgrey,stylo);
            filldraw(oreille2,lightgrey,stylo);
       }
}

//Triangles de départ
pair pA,pB,pC,pO,O;
     pA=(0,0);
     pB=(-1,0);
     pC=rotate(60,pB)*pA;
     pO=rotate(60,pA)*pB;
     O=((pA+2*((pB+pC)/2))/3);
     
//dot("$A$",pA,N);
//dot("$B$",pB,S);
//dot("$C$",pC,W);
//dot("$O'$",pO,E);
//dot("$O$",O,SW);

//-----------------------------------------------------------------------------------
path oreille=(arc(O,pA,pB,CCW)--arc(pO,1,120,60)--cycle);
//draw(oreille);
//path oreille=buildcycle(arc(O,pA,pB,CCW),arc(pO,1,120,60));  //C'Est la le problème
filldraw(oreille,lightgrey,blue);
//-----------------------------------------------------------------------------------

//Définition de l'homothétie
real k=(sqrt(3))/3;
pair centre=((O-k*pO)/(1-k));
//dot("$\Omega$",centre,N);
transform h=scale(k,centre);

//Récurssion  n=0 pour les oreilles simples
mickey(oreille,centre,O,2,blue);

// Ajout d'un cadre, distant des bords de l'image de 3mm
shipout(bbox(5mm,white));


Christophe

Re: Buildcycle

Posté : ven. 16 avr. 2010, 20:47
par chellier
Grilled :roll:

Re: Buildcycle

Posté : ven. 16 avr. 2010, 22:16
par maurice
Merci je vais tester ca, ...
Je vous donnerais des nouvelles...
c'est mon tour d'être en vacances.
Maurice

Re: Buildcycle

Posté : sam. 17 avr. 2010, 00:22
par maurice
Pas mal l'astuce de finir le path par cycle pour que le chemin soit fermé !
je ne connaissais pas !
Merci beaucoup à tous les deux.
maurice

Re: Buildcycle

Posté : sam. 17 avr. 2010, 17:18
par GM
GM a écrit :Voir exemples galerie "contours domaines"

Juste une précision : je parlais des 5 exemples très commentés ici... qui montrent qu'au delà du problème mentionné des points d'intersection... il y en a un autre : on obtient parfois des résultats surprenants au premier abord ... quand on pense utiliser buildcycle pour définir la réunion de deux ensembles.