Buildcycle

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 !
OG
V.I.P.
V.I.P.
Messages : 142
Enregistré le : dim. 7 mars 2010, 22:27

Re: Buildcycle

Message non lu par OG » ven. 16 avr. 2010, 20:42

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 !

Avatar du membre
chellier
Messages : 104
Enregistré le : jeu. 18 mars 2010, 17:30

Re: Buildcycle

Message non lu par chellier » ven. 16 avr. 2010, 20:46

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
Modifié en dernier par chellier le ven. 16 avr. 2010, 20:49, modifié 1 fois.


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

Re: Buildcycle

Message non lu par maurice » ven. 16 avr. 2010, 22:16

Merci je vais tester ca, ...
Je vous donnerais des nouvelles...
c'est mon tour d'être en vacances.
Maurice
Doc 3D
Si ça ne marche pas, essayez la version pdf

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

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

Re: Buildcycle

Message non lu par maurice » sam. 17 avr. 2010, 00:22

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
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: Buildcycle

Message non lu par GM » sam. 17 avr. 2010, 17:18

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.
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