object : double ellipse

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 :

object : double ellipse

Message non lu par maurice » mer. 6 avr. 2016, 13:51

Bonjour,

Voici un automate simple :

Figure asymptote 48f829d6b431eab805f5fe5561786580
*** 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. size(150);
  2.  
  3. real marge=1mm;
  4. pair z1=(0,0);
  5. pair z2=(1,0);
  6. pair z3=(2,0);
  7.  
  8. transform r=scale(1.);
  9.  
  10. object etat_1=draw("$1$",ellipse,z1,marge,filltype = NoFill,black);
  11. object etat_3=draw("$3$",ellipse,z3,marge,filltype = Fill,lightblue);
  12. object etat_2=draw("$2$",ellipse,z2,marge,filltype = NoFill,black);
  13.  
  14. add(new void(picture pic, transform t) {
  15. draw(pic,r*Label("$a$"),point(etat_1,z2-z1,t){z2-z1} ..{z2-z1}point(etat_2,z1-z2,t),Arrow);
  16. draw(pic,r*Label("$a$", align=N),point(etat_1,NW){NW} ..{SW}point(etat_1,NE,t),Arrow);
  17. draw(pic,r*Label("$b$", align=N),point(etat_2,NW,t){NW} ..{SW}point(etat_2,NE,t),Arrow);
  18. draw(pic,r*Label("$c$"),point(etat_2,E,t){E} ..{E}point(etat_3,W,t),Arrow);
  19. });
  20.  
  21. label("$\Uparrow$", (.1, -.25), W);


J'ai deux questions relatives à cet automate :

1. Pour suivre les conventions de représentation j'aimerais que le sommet coloré (le 3) soit entouré d'une double ellipse. Est-ce possible avec le type objet ?
2. l'état initial est indiqué par la double flèche (dernière ligne). Si on change la taille du dessin, la flèche ne ne trouve plus au bon endroit. Y'a-t-il une astuce pour corriger ce défaut ?

Merci d'avance.

Bruno
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: object : double ellipse

Message non lu par GM » mer. 6 avr. 2016, 14:33

Bonjour Bruno,
  • pour le premier problème... je te soumets un bout de code que j'avais dans mon début d'extension pour les graphes ;
  • le second problème était plus simple puisque la réponse était implicitement dans ton code : du dessin différé !

Figure asymptote 3cd77c2f93cab528c3f1312de25eed91
*** 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. /// Une nouvelle enveloppe : doublellipse
  3. ////////////////////
  4. path doublellipse(frame dest, frame src=dest, real xmargin=0, real ymargin=xmargin,
  5. pen p=currentpen, filltype filltype=NoFill, bool above=false)
  6. {
  7. pair m=min(src);
  8. pair M=max(src);
  9. pair D=M-m;
  10. static real factor=.5*sqrt(2);
  11. int sign=filltype == NoFill ? 1 : -1;
  12. pair h=0.5*sign*(max(p)-min(p));
  13. path g=ellipse(0.5*(M+m),factor*D.x+h.x+xmargin,factor*D.y+h.y+ymargin);
  14. frame F;
  15. if(above == false) {
  16. filltype.fill(F,g,p);
  17. filltype.fill(F,g,linewidth(p)/2+white);
  18. prepend(dest,F);
  19. } else { filltype.fill(dest,g,p);
  20. filltype.fill(dest,g,linewidth(p)/2+white);
  21. }
  22. return g;
  23. }
  24. path doublellipse(frame f, Label L, real xmargin=0, real ymargin=xmargin,
  25. pen p=currentpen, filltype filltype=NoFill, bool above=true)
  26. {
  27. add(f,L);
  28. return doublellipse(f,xmargin,ymargin,p,filltype,above);
  29. }
  30. ///////////////////////////////////////////////
  31.  
  32. size(300);
  33.  
  34. real marge=1mm;
  35. pair z1=(0,0);
  36. pair z2=(1,0);
  37. pair z3=(2,0);
  38.  
  39. transform r=scale(1.);
  40.  
  41. object etat_1=draw("$1$",ellipse,z1,marge,filltype = NoFill,black);
  42. object etat_2=draw("$2$",ellipse,z2,marge,filltype = NoFill,black);
  43. object etat_3=draw("$3$",doublellipse,z3,marge,2bp+black);
  44.  
  45. add(new void(picture pic, transform t) {
  46. draw(pic,r*Label("$a$"),point(etat_1,z2-z1,t){z2-z1} ..{z2-z1}point(etat_2,z1-z2,t),Arrow);
  47. draw(pic,r*Label("$a$", align=N),point(etat_1,NW){NW} ..{SW}point(etat_1,NE,t),Arrow);
  48. draw(pic,r*Label("$b$", align=N),point(etat_2,NW,t){NW} ..{SW}point(etat_2,NE,t),Arrow);
  49. draw(pic,r*Label("$c$"),point(etat_2,E,t){E} ..{E}point(etat_3,W,t),Arrow);
  50. label(pic,r*"$\Uparrow$", point(etat_1,S,t){S},realEpsilon*S);
  51. });
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: object : double ellipse

Message non lu par GM » mer. 6 avr. 2016, 18:21

Par contre... je réalise que je ne te propose pas une solution qui permet d'avoir l'ellipse intérieure colorée.
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 !

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

Re: object : double ellipse

Message non lu par maurice » jeu. 7 avr. 2016, 13:47

Bonjour,

Merci pour les réponses.
Toujours aussi efficace.
GM a écrit :Par contre... je réalise que je ne te propose pas une solution qui permet d'avoir l'ellipse intérieure colorée.
Je n'en ai pas besoin, la solution donnée me convient.

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

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

Répondre