automate

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 : 257
Enregistré le : jeu. 25 mars 2010, 13:00
Contact :

automate

Message non lu par maurice » mar. 11 déc. 2012, 18:38

Bonsoir, je suis en train de réaliser un automate dans le cadre du cours sur les graphes.
J'essaie de reproduire un dessin du bouquin. Je me suis inspiré de ce post

Figure asymptote e0b9286785d1c72fe6239cbb6cfcb84c
*** 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(10cm);
  2.  
  3. transform t=scale(0.75);
  4.  
  5. object objet_1=draw(t*"d\'epart",ellipse,(0,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  6. object objet_2=draw(t*"D",ellipse,(3,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  7. object objet_3=draw(t*"DE",ellipse,(5,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  8. object objet_4=draw(t*"DEU",ellipse,(7,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  9. object objet_5=draw(t*"DEUX",ellipse,(9,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  10.  
  11. add(new void(picture pic, transform t) {
  12. //Fleches directes
  13. draw(pic,point(objet_1,E,t){N+2*E}..{S+2*E}point(objet_2,W,t),MidArrow);
  14. draw(pic,point(objet_2,W,t){S+2*W}..{N+2*W}point(objet_1,E,t),MidArrow);
  15. draw(pic,point(objet_2,E,t){N+E}..{S+E}point(objet_3,W,t),MidArrow);
  16. draw(pic,point(objet_3,W,t){S+W}..{N+W}point(objet_2,E,t),MidArrow);
  17. draw(pic,point(objet_3,E,t){E}..{E}point(objet_4,W,t),MidArrow);
  18. draw(pic,point(objet_4,E,t){E}..{E}point(objet_5,W,t),MidArrow);
  19.  
  20. draw(pic,point(objet_3,S,t){S+W}..{N+W}point(objet_1,SE,t),MidArrow);
  21. draw(pic,point(objet_4,S,t){S+W}..{N+W}point(objet_1,SW,t),MidArrow);
  22. draw(pic,point(objet_4,N,t){N+W}..{S+W}point(objet_2,NE,t),MidArrow);
  23.  
  24. // Boucles
  25. draw(pic,point(objet_1,NE,t){NE}..{SW}point(objet_1,NW,t),MidArrow);
  26. draw(pic,point(objet_2,NE,t){NE}..{SW}point(objet_2,NW,t),MidArrow);
  27. });


C'est pas si mal mais j'ai malgré tout des questions :
1) Le seul gros problème est les boucles ... Comment faire ?
2) Y'a-t-il un moyen d'étiqueter directement les arêtes de l'automate ?
3) Les arêtes sont-elles nécessairement lisses (pas d'angle) ?
4) N'y a-t-il pas intérêt à ulisiser l'extension flowchart ?

Merci

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 : 1364
Enregistré le : dim. 7 mars 2010, 14:50

Re: automate

Message non lu par GM » mar. 11 déc. 2012, 19:25

Figure asymptote e160b02e50ee2c6c5781d51a20916554
*** 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(10cm);
  2.  
  3. transform t=scale(0.75);
  4.  
  5. object objet_1=draw(t*"d\'epart",ellipse,(0,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  6. object objet_2=draw(t*"D",ellipse,(3,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  7. object objet_3=draw(t*"DE",ellipse,(5,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  8. object objet_4=draw(t*"DEU",ellipse,(7,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  9. object objet_5=draw(t*"DEUX",ellipse,(9,0),xmargin=.1cm,filltype=FillDraw(blue,black));
  10.  
  11. add(new void(picture pic, transform t) {
  12. //Fleches directes
  13. draw(pic,Label("a",align=N),point(objet_1,E,t){N+2*E}..{S+2*E}point(objet_2,W,t),MidArrow);
  14. draw(pic,Label("b",align=S),point(objet_2,W,t){S+2*W}..{N+2*W}point(objet_1,E,t),MidArrow);
  15. draw(pic,point(objet_2,E,t){N+E}..{S+E}point(objet_3,W,t),MidArrow);
  16. draw(pic,point(objet_3,W,t){S+W}..{N+W}point(objet_2,E,t),MidArrow);
  17. draw(pic,point(objet_3,E,t){E}..{E}point(objet_4,W,t),MidArrow);
  18. draw(pic,point(objet_4,E,t){E}..{E}point(objet_5,W,t),MidArrow);
  19.  
  20. draw(pic,point(objet_3,S,t){S+W}..{N+W}point(objet_1,SE,t),MidArrow);
  21. draw(pic,point(objet_4,S,t){S+W}..{N+W}point(objet_1,SW,t),MidArrow);
  22. draw(pic,point(objet_4,N,t){N+W}..{S+W}point(objet_2,NE,t),MidArrow);
  23.  
  24. // Boucles
  25. draw(pic,Label("c",align=S),point(objet_1,NE,t){NE}..{SE}point(objet_1,NW,t),MidArrow);
  26. draw(pic,point(objet_2,NE,t){NE}..{SE}point(objet_2,NW,t),MidArrow);
  27. });


2) directement ???
3) je ne comprends pas !?
4) je ne sais pas car je n'ai pas eu l'occasion d'utiliser vraiment flowchart .
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 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

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

Re: automate

Message non lu par maurice » mer. 12 déc. 2012, 05:03

Bonjour net merci pour ta réponse :

GM a écrit :
2) directement ???
3) je ne comprends pas !?
4) je ne sais pas car je n'ai pas eu l'occasion d'utiliser vraiment flowchart .


Pour le 2), tu as répondu avec les labels a, b et c.
Pour le 3) et le 4) j'ai utilisé la semaine première pour la 1ere fois flowchart (principalement pour tester) pour ca :

Figure asymptote 13570ba3adc978ef45b899598fcbd05c
*** 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. import flowchart;
  2.  
  3. size(0,300);
  4.  
  5. block block1=roundrectangle(Label("$x$", blue), (0,0), palegreen, red);
  6. block block2=rectangle(Label("$\sqrt{x}+1$", blue), (0,-1), white, black);
  7. block block3=bevel(Label("$\sqrt{x}+1 \geq 3$", blue), (0,-2), white, black);
  8. block block4=diamond(Label("Oui", green), (-1, -3), white, green);
  9. block block5=diamond(Label("Non", green), (1, -3), white, blue);
  10. block block6=rectangle(pack(Label("On prend", green), Label("le double", green)), (-1, -4), white, green);
  11. block block7=rectangle(pack(Label("On prend", blue), Label("le carr\'e", blue), Label("de l'inverse", blue)), (1, -4), white, blue);
  12.  
  13. draw(block1);
  14. draw(block2);
  15. draw(block3);
  16. draw(block4);
  17. draw(block5);
  18. draw(block6);
  19. draw(block7);
  20.  
  21. add(new void(picture pic, transform t) {
  22. blockconnector operator --=blockconnector(pic,t);
  23. // draw(pic,block1.right(t)--block2.top(t));
  24. block1--Down--Arrow--block2;
  25. block2--Down--Arrow--block3;
  26. block3--Left--Down--Arrow--block4;
  27. block3--Right--Down--Arrow--block5;
  28. block4--Down--Arrow--block6;
  29. block5--Down--Arrow--block7;
  30. });


Je n'ai pas trouvé de moyen pour avoir des fléches lisses, c'est-à-dire sans angles (ou sans coins) ; avec la méthode employé avec les object, je ne sais pas en faire et les flèches sont toujours courbes (ou lisses).

C'était par rapport à ça je je faisais la remarque : la syntaxe est relativement simple mais pas moyen de faire des arêtes courbes (en particulier des boucles) ?...

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

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

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

Re: automate

Message non lu par maurice » ven. 14 déc. 2012, 02:03

Bonsoir,

Que signifie cette ligne

Code : Tout sélectionner

blockconnector operator --=blockconnector(pic,t);


Dans l'index de fonctions j'ai trouvé ça :

Code : Tout sélectionner

block    blockconnector(block, block)    (picture pic, transform t, pen p=<default>, marginT margin(path, pen)=<default>);


Mais ça ne m'apporte pas grand chose !

J'ai tenté de transformer en

Code : Tout sélectionner

blockconnector operator ..=blockconnector(pic,t);


Lorsque l'on recherche sur l'index filtre global : operator et filtre de type block on obtient :

Code : Tout sélectionner

block    operator --    (block b, bool arrowbar(picture, path, pen, marginT(path, pen)));
block    operator --    (block b1, Dir dir);
block    operator --    (block b1, Label label);
block    operator init    ();


Que penser de tout cela, pas de chemin courbe (lisse) entre deux blocks puisqu'il n'exite pas d'operator .. ?

Merci.
A+
Bruno
Doc 3D
Si ça ne marche pas, essayez la version pdf

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

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

Re: automate

Message non lu par maurice » ven. 14 déc. 2012, 23:11

Je viens de parcourir le module flowchart.asy et tout laisse penser qu'il n'y a pas moyen d'avoir des chemins "courbes" entre les blocs :

Code : Tout sélectionner

struct Dir
{
  pair z;
  void operator init(pair z) {this.z=z;}
}

Dir Right=Dir(right);
Dir Left=Dir(left);
Dir Up=Dir(up);
Dir Down=Dir(down);


Par ailleurs, je m'interroge sur les types object et point comme dans :

Code : Tout sélectionner

object objet_1=draw(t*"d\'epart",ellipse,(0,0),xmargin=.1cm,filltype=FillDraw(blue,black));


et

Code : Tout sélectionner

draw(pic,Label("a",align=N),point(objet_1,E,t){N+2*E}..{S+2*E}point(objet_2,W,t),MidArrow);



A+

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 : 1364
Enregistré le : dim. 7 mars 2010, 14:50

Re: automate

Message non lu par GM » ven. 14 déc. 2012, 23:16

maurice a écrit :Je viens de parcourir le module flowchart.asy et tout laisse penser qu'il n'y a pas moyen d'avoir des chemins "courbes" entre les blocs

Je te le confirme (j'étais occupé de lire le dit-fichier quand un mail m'a signalé ton message).
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 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1364
Enregistré le : dim. 7 mars 2010, 14:50

Re: automate

Message non lu par GM » ven. 14 déc. 2012, 23:17

maurice a écrit :Par ailleurs, je m'interroge sur les types object et point comme dans :

Code : Tout sélectionner

object objet_1=draw(t*"d\'epart",ellipse,(0,0),xmargin=.1cm,filltype=FillDraw(blue,black));


et

Code : Tout sélectionner

draw(pic,Label("a",align=N),point(objet_1,E,t){N+2*E}..{S+2*E}point(objet_2,W,t),MidArrow);


Quelle interrogation ? :roll:
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 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1364
Enregistré le : dim. 7 mars 2010, 14:50

Re: automate

Message non lu par GM » sam. 15 déc. 2012, 00:28

GM a écrit :Quelle interrogation ? :roll:

Si c'est sur la compréhension générale... je tente une explication (pas facile à faire) :

Le type object permet d'envisager des "labels entourés d'une enveloppe (rectangulaire, en ellipse ou rectangulaire à coins arrondis)" ou des "frames" comme des objets pour avoir la facilité de se servir d'un point choisi de leur contour (enveloppe du label ou bord de frame) (via la fonction point en désignant le point choisi du contour de l'objet par une direction depuis le centre de l'objet).

Quant au pourquoi du t que l'on voit dans les deux lignes que tu précises... c'est en en rapport avec ceci

Code : Tout sélectionner

add(new void(picture pic, transform t) {
...
});

c'est pour pratiquer le dessin différé (defered drawing)... nécessaire pour prendre en compte qu'il y a, dans une figure, des choses qui s'adaptent au size ou unitsize que l'on choisit et d'autres choses qui ne s'adaptent pas (comme justement les labels qui gardent leur taille quand on change d'unité graphique).

Si tu veux pouvoir maintenir un lien qui démarre depuis un bord d'un objet dont la taille reste fixe (quand on change de size ou unitsize) vers un autre élément du graphique, il va y avoir des syntaxes comme ci-dessus à adopter pour demander le tracé différé du lien (afin que celui ci soit préservé lors d'un changement d'unité) et cela passe par le calcul d'une transformation t qui permet que certains objets gardent une taille ou une position fixe même quand l'unité du graphique change.

Je comprendrais aisément que tu n'aies rien compris à ma tentative d'explication fumeuse. :mrgreen:
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 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

Avatar du membre
GM
Administrateur du site
Administrateur du site
Messages : 1364
Enregistré le : dim. 7 mars 2010, 14:50

Re: automate

Message non lu par GM » sam. 15 déc. 2012, 00:51

GM a écrit :Je comprendrais aisément que tu n'aies rien compris à ma tentative d'explication fumeuse. :mrgreen:

Je complète ma réponse avec un exemple

Figure asymptote 36c4198ef98becc5e888217bf47080b5
*** 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(100);
  2. draw(unitsquare);
  3. draw("carr\'e",ellipse,(2,2));

Figure asymptote ece579ea2ad2c19a322c3cc77cd39228
*** 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. draw(unitsquare);
  3. draw("carr\'e",ellipse,(2,2));

J'ai changé la taille de ma figure mais l'objet (qui est un "label avec enveloppe (de type ellipse)" n'a pas changé de taille puisque les labels sont de taille indépendante des commandes size ou unitsize).
Tu comprends alors le problème si on veut tracer une flèche entre le carré et l'étiquette qui doit le désigner.
Si le centre de l'ellipse a pour coordonnées (2;2) dans les deux figures, par contre le point de l'ellipse qui est au sud... n'a pas les mêmes coordonnées dans la première et la deuxième figure.

Figure asymptote 1afbf031628ae3968aa6c1f0672a214d
*** 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. draw(unitsquare);
  3. // On nomme cette fois-ci l'objet (qui était implicite dans les figures précédentes)
  4. object etiquette = draw("carr\'e",ellipse,(2,2));
  5. // On demande le dessin différé de la flèche (qui va passer par le biais d'une transformation t qu'Asymptote va calculer
  6. // pour tenir compte du fait que l'ellipse est de taille fixe dans un dessin susceptible de changer de taille via size).
  7. add(new void(picture pic, transform t) {
  8. draw(pic,point(etiquette ,S,t){S}..t*(1,.5),Arrow);
  9. });


Figure asymptote 3886b6403612788493af22343982901e
*** 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(50);
  2. draw(unitsquare);
  3. // On nomme cette fois-ci l'objet (qui était implicite dans les figures précédentes)
  4. object etiquette = draw("carr\'e",ellipse,(2,2));
  5. // On demande le dessin différé de la flèche (qui va passer par le biais d'une transformation t qu'Asymptote va calculer
  6. // pour tenir compte du fait que l'ellipse est de taille fixe dans un dessin susceptible de changer de taille via size).
  7. add(new void(picture pic, transform t) {
  8. draw(pic,point(etiquette ,S,t){S}..t*(1,.5),Arrow);
  9. });
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 10/10/17) :
PC n°1 :Windows 10 - Asymptote(2.41)+MikTeX2.9 - Editeurs : Notepad++ et TeXworks.
Mes autres PC :Ubuntu 16.04LTS - Asymptote(2.42 git) + TexLive2017 - Editeur : TeXworks.
Merci de préciser la votre pour faciliter l'aide des autres !

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

Re: automate

Message non lu par maurice » sam. 15 déc. 2012, 01:37

GM a écrit :Je comprendrais aisément que tu n'aies rien compris à ma tentative d'explication fumeuse. :mrgreen:

Si, si je crois avoir bien compris...
Le schéma construit avec flowchart correspond au même principe !
mais je ne saisis pas vraimen,t l'utilité du type block créé dans flowchart.asy par rapport au type object.
Ils permettent tous les deux la création de labels dans des "enveloppes", mais point de point pour les block et seulement des directions verticales ou horizontales pour les arêtes entre deux blocks.
Dommage ! Ces constructions auraient par exemple pu être de bons début pour la création de graphes ou d'arbres pondérés.

A+ et merci.

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