Extension(s) sur les graphes

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

Extension(s) sur les graphes

Message non lu par GM » mer. 4 janv. 2012, 17:46

Sur les graphes :

  • Christophe (alias ctop) m'a montré quelque chose d'intéressant, il y a plus d'un an de cela... Je ne sais pas s'il l'a mise en ligne quelque part ;
    Il avait notamment adopté ce genre de syntaxe :

    Code : Tout sélectionner

    string graph="A-[0]B-[120]C-[-120]";
    pour définir la position relative des noeuds.

  • Certains d'entre vous ont déjà vu passer ceci (qui date aussi de près de deux ans)... qui a un peu évolué depuis... mais pas énormément, puisque je n'en ai pas l'usage ;
    J'ai des choses en test, depuis plus d'un an, avec des syntaxes dans le même esprit que la proposition de Christophe... qui m'avaient été inspirées par les l-systems de Philippe.

  • ... et je signale, une nouveauté... encore différente et qui m'a semblé intéressante... même si cela a l'air un peu le fouillis dans la multitude des fichiers que l'on trouve en suivant l'un des liens donnés.

Ce qui m'a attiré dans ce qui est proposé est ce type de syntaxe (qui se passe de chaîne de caractères et utilise un opérateur <<)

Image

pour positionner les noeuds relativement les uns par rapport aux autre.... et qui devrait m'inspirer pour ajouter des syntaxes différentes à ma propre proposition d'extension sur les graphes, pour l'agencement des noeuds...
... sous réserve que cela puisse venir se greffer sur ce que j'ai fait, sans rien casser : je veux conserver mes matrices, en interne, pour des ajouts de calculs de chemins.

Affaire à suivre.

--------

C'est un sujet qui a l'air d'intéresser pas mal de monde... :) Y a t-il un petit cachottier qui a une quatrième façon personnelle de faire des graphes ? :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 !

ctop
Messages : 8
Enregistré le : jeu. 18 mars 2010, 20:32

Re: Extension(s) sur les graphes

Message non lu par ctop » jeu. 5 janv. 2012, 20:13

Bonjour,
en effet j'ai réalisé un petit code du type analyseur syntaxique pour tracer des graphes, voici quelques exemples:
Image

Image

La folie des grandeurs: :D
http://www.imagup.com/data/1140456342.html

J'avais même terminé par compléter mon code pour qu'il me donne automatiquement la matrice d'adjacence de mon graphe
Image

Si certains sont intéressés par le code je peux le fournir sans aucun problème

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

Re: Extension(s) sur les graphes

Message non lu par GM » sam. 14 janv. 2012, 10:22

GM a écrit :... et je signale, une nouveauté... encore différente et qui m'a semblé intéressante.


Son auteur chinois semble particulièrement motivé puisqu'une version 3.0 vient d'arriver : http://code.google.com/p/asy-graphtheory/downloads/list avec beaucoup de fichiers asy à mettre dans ".asy" : cela va être l'occasion de tester si on peut les déporter dans un sous dossier de ".asy".
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 !

ctop
Messages : 8
Enregistré le : jeu. 18 mars 2010, 20:32

Re: Extension(s) sur les graphes

Message non lu par ctop » sam. 14 janv. 2012, 16:51

Tout est question de goût personnellement je préfère dessiner mes circuits avec cette syntaxe :

Code : Tout sélectionner

import ElectricalComponents;
size(300);

Element e1=Circuit(Resistor("$R_2=30\Omega$"),
                        Resistor("$R_1=10\Omega$")
                        ).parallel(20,10,branch=1);

Element e2=Circuit(e1,Resistor("$R_3=2.5\Omega$")).serie(40);

Element e3=Circuit(Resistor("$R_6=20\Omega$"),
                   Resistor("$R_5=5\Omega$"))
                            .parallel(20,10,branch=1);

Element e4=Circuit(Resistor("$R_4=6\Omega$"),
                   e3).serie(40);

Element e5=Circuit(e4,e2).parallel(30,15,branch=1);      
pair A=(0,0), B=(70,70);

e5.addLabel(Label("Un sous circuit",fontsize(16)+blue));
join(A,B,e5);
shipout(bbox(2mm,invisible));


Image

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

Re: Extension(s) sur les graphes

Message non lu par chellier » dim. 4 nov. 2012, 19:41

Bonjour,
J'ai utilisé l'extension gm_graphes pour la première fois (nouveau programme de spé Maths oblige...). C'est bien sympa, il y a juste que je n'ai pas trouvé comment modifier les labels sur les arêtes, à part le faire pour chaque arête avec "modif_a".

Je ne sais pas s'il y a eu une nouvelle version de l'extension, en cherchant un peu je n'ai pas trouvé. La solution que j'ai trouvée est de rajouter une troisième syntaxe dans la structure GRAPHE en rajoutant a_lab:

Code : Tout sélectionner

    void operator init(pair[]      s_xy,
                       string[]    s_lab  = new string[],
                       real[][]    a_k,
                       string[][]  a_lab,
                       stylegraphe grstyle = stylepardefaut
                       ) {write("ko");
            int n      = s_xy.length;
            this.s_xy  = s_xy;
            this.s_lab = s_lab;
            this.a_k   = new real[n][n];
            this.a_lab = new string[n][n];
            this.grstyle= grstyle;
            initialisations(n);
            for(int i=0; i<n; ++i)
            {
                this.s_lab[i]    = (i<s_lab.length) ? s_lab[i]:format("$S_%i$",i);
                this.s_env[i]    = grstyle.s_env;
                this.s_penlab[i] = grstyle.s_penlab;
                this.s_penenv[i] = grstyle.s_penenv;
                this.s_fill[i]   = grstyle.s_fill;
                for(int j=0; j<n; ++j)
                {
                    this.a_k[i][j]       = (i<a_k.length && j<a_k[0].length) ? a_k[i][j]:0;
                    this.a_lab[i][j]     = a_lab[i][j];
                    this.a_ang[i][j]     = grstyle.a_ang;
                    this.a_labpos[i][j]  = grstyle.a_labpos;
                    this.a_labdir[i][j]  = grstyle.a_labdir;
                    this.a_pen[i][j]     = grstyle.a_pen;
                    this.a_penbelow[i][j]= grstyle.a_penbelow;
                    this.a_penlab[i][j]  = grstyle.a_penlab;
                    this.a_arrow[i][j]   = grstyle.a_arrow;
                    this.a_labfill[i][j] = grstyle.a_labfill;
                }
            }
    }


Ce qui peux donner par exemple :

Code : Tout sélectionner

import gm_graphes;
import gm_graphes_styles;
size(6cm);

pair A=(0,0), B=(2,0), C=(1,-2);
pair[] sommets={A,B,C};
string[] noms={"$1$","$2$","$3$"};
real[][] matadj={{0,1,1},
                 {1,0,1},
                 {0,1,1}};
string[][] noms_a={{"","$1/2$","$1/2$"},
                   {"$3/10$","","$7/10$"},
                   {"","$2/5$","$3/5$"}};

GRAPHE gr=GRAPHE(sommets,noms,
                 matadj,noms_a,
                 style_boule_2);
draw(gr,aff_a_lab=true);


Voila, s'il y a une "meilleur solution, je suis preneur !

Christophe

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

Re: Extension(s) sur les graphes

Message non lu par GM » dim. 4 nov. 2012, 22:48

Bonsoir,

une remarque préalable à une question : ne soyons pas étonnés qu'il manque des choses... étant donné que j'ai créé cela pour m'amuser sans jamais en avoir eu besoin jusqu'à présent. C'est quand on m'en signalera.... ou quand je mettrai moi-même à l'utiliser que je réaliserai ce qu'il faut ajouter.

La question : ton souhait était d'avoir des fractions ?
Car sinon... ceci n'allait pas ?

Figure asymptote 655044d993504f2a568190878962c9a8
*** 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 gm_graphes;
  2. import gm_graphes_styles;
  3. size(6cm);
  4.  
  5. pair A=(0,0), B=(2,0), C=(1,-2);
  6. pair[] sommets={A,B,C};
  7. string[] noms={"$1$","$2$","$3$"};
  8. real[][] matadj={{0,1/2,1/2},
  9. {3/10,0,7/10},
  10. {0,2/5,3/5}};
  11. GRAPHE gr=GRAPHE(sommets,noms,
  12. matadj,
  13. style_boule_2);
  14. draw(gr,aff_a_lab=true);


Si tel est le cas (l'absence d'écriture fractionnaire), je devrais pouvoir rajouter un booléen Fraction qui à true exploiterait ceci :

Figure asymptote c3aa4154f54db764a9ff812fc8fd9dfa
*** 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 base_pi;
  2. size(5cm);
  3. label(texfrac(rational(0.5)),(0,0));
  4. label(texfrac(rational(.3)),(1,-1));
  5. label(texfrac(rational(2)),(2,-2));
  6. label(texfrac(rational(-.125)),(3,-3));
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: Extension(s) sur les graphes

Message non lu par GM » lun. 5 nov. 2012, 00:05

Je viens d'ajouter la structure rational et les fonctions pgcd et texfrac issus de l'extension base_pi.asy de Philippe à la nouvelle version de gm_graphes.asy (déjà en ligne sur le dépôt SVN).
Et j'ai ajouté un booléen texfrac (par défaut à false) pour pouvoir choisir de les utiliser, ainsi :

Edition du 06/11/12 : ATTENTION ! L'exemple ci-dessous est caduque ! L'option texfrac de la commande GRAPHE a existé moins d'une journée ! Cf. en page 2 de ce sujet, pour la solution finalement adoptée.

Code : Tout sélectionner

import gm_graphes;
import gm_graphes_styles;
size(6cm);
pair A=(0,0), B=(2,0), C=(1,-2);
pair[] sommets={A,B,C};
string[] noms={"$1$","$2$","$3$"};
real[][] matadj={{0,1/2,1/2},
                 {3/10,0,7/10},
                 {0,2/5,3/5}};
GRAPHE gr=GRAPHE(sommets, noms, matadj, texfrac=true, style_boule_2);
draw(gr,aff_a_lab=true);
Edition du 06/11/12 : ATTENTION ! L'exemple ci-dessus est caduque ! L'option texfrac de la commande GRAPHE a existé moins d'une journée ! Cf. en page 2 de ce sujet, pour la solution finalement adoptée.

Mais il faudra probablement aussi quelque chose dans le genre de ce que tu proposais (je dis "dans le genre" pour l'unique raison que je n'ai pas regardé en détail ce que tu proposais par manque de temps) pour pouvoir mettre des étiquettes d'arêtes "déconnectées" des valeurs... sans devoir y aller, arête par arête.

Suggestion : en plus de la meilleure idée qui consiste à me demander d'ajouter à gm_graphes ce qui vous manque... une autre idée pour ajouter (si je ne suis pas assez réactif à une demande) des surcharges personnelles aux fonctions déjà créées, c'est de rajouter ce qu'il faut dans un fichier personnel :

Code : Tout sélectionner

import gm_graphes;
import gm_graphes_ajouts_persos_tant_que_gm_ne_les_aura_pas_pris_en_compte_dans_le_fichier_precedent;
import gm_graphes_styles;
...
Mais j'espère demeurer assez réactif (sous réserve que les demandes soient compatibles avec d'autres choses que j'ai prévues) pour que ce second fichier reste vide. ;-)
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: Extension(s) sur les graphes

Message non lu par GM » lun. 5 nov. 2012, 10:05

Une remarque sur les noms des sommets : quand on n'en précise pas... ils s'appellent S_0, S_1, S_2, ... pour permettre (en mettant temporairement en commentaire la liste des noms que l'on a choisis) de savoir quels sont les indices utiles dans l'utilisation des commandes modif_s et modif_a. J'ai démarré à zéro car cela correspond à la réalité du code Asymptote qui se cache derrière.

Edition du 06/11/12 : ATTENTION ! L'exemple ci-dessous est caduque ! L'option texfrac de la commande GRAPHE a existé moins d'une journée ! Cf. en page 2 de ce sujet, pour la solution finalement adoptée.

Code : Tout sélectionner

import gm_graphes;
import gm_graphes_styles;
size(6cm);
pair A=(0,0), B=(2,0), C=(1,-2);
pair[] sommets={A,B,C};
string[] noms={"$1$","$2$","$3$"};
real[][] matadj={{0,1/2,1/2},
                 {3/10,0,7/10},
                 {0,2/5,3/5}};
GRAPHE gr=GRAPHE(sommets, //noms, 
                 matadj, texfrac=true //, style_boule_2
                 );
modif_a(gr,0,2,"$x$?",1bp+red+dashed);
draw(gr,aff_a_lab=true);
Edition du 06/11/12 : ATTENTION ! L'exemple ci-dessus est caduque ! L'option texfrac de la commande GRAPHE a existé moins d'une journée ! Cf. en page 2 de ce sujet, pour la solution finalement adoptée.

Mais s'il devait être pratique d'avoir d'autres "numérotations" automatiques possibles (par exemples où le premier sommet est noté 1, S_1 ou A) pourquoi pas les ajouter plus tard.
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
chellier
Messages : 101
Enregistré le : jeu. 18 mars 2010, 17:30

Re: Extension(s) sur les graphes

Message non lu par chellier » lun. 5 nov. 2012, 10:53

GM a écrit :La question : ton souhait était d'avoir des fractions ?
Car sinon... ceci n'allait pas ?

Non, au départ je n'en voulais pas, pensant que ça ferait trop chargé, mais vu les exemples que tu donnes après, ça convient bien ! Et sinon j'aime pas trop les points à la place des virgules, ça doit être mon côté franchouillard ;)

Le booléen texfrac fait parfaitement ce qu'il faut ! Quant à d'autres numérotations automatiques, ça peut être pratique en effet.

Merci pour la réactivité !

Christophe

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

Re: Extension(s) sur les graphes

Message non lu par GM » lun. 5 nov. 2012, 11:08

chellier a écrit :Et sinon j'aime pas trop les points à la place des virgules, ça doit être mon côté franchouillard ;)

Je sais... mais le problème et/ou sa résolution dépendent (je pense) du système.
Et je n'avais pas trop envie d'utiliser un usepackage (icomma) dans une extension Asymptote... donc j'ai laissé le problème en suspens.
Je peux peut-être aussi ajouter un booléen icomma (ou virgule) (par défaut à false, pour ne pas imposer l'utilisation d'un package latex.

Test...

Figure asymptote 6e59e05bbb568b203823a6f07d1aa4c7
*** 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. // une façon d'obtenir des écritures décimales avec virgule :
  2. usepackage("icomma");
  3. locale("fr_FR");
  4.  
  5. size(7cm,5cm,IgnoreAspect);
  6.  
  7. int k=0;
  8. label(string(pi),(0,k));
  9. label(format(pi),(0,--k)); // << on devrait avoir une virgule !
  10. label(format("%f",pi),(0,--k)); // << on devrait avoir une virgule !
  11. label(format("%.2f",pi),(0,--k)); // << on devrait avoir une virgule !
  12. label(format("%.5f",pi),(0,--k)); // << on devrait avoir une virgule !
  13.  
  14. shipout(bbox(.5cm,Fill(white)));


... non concluant ! :-(
Il faut que j'enquête pour savoir pourquoi cet exemple de la galerie (vieux de trois ans) ne fonctionne pas (ou plus ?) directement sur le forum.
Ai-je changé quelque chose sur mon serveur depuis la mise en ligne de l'exemple ? Affaire à suivre.
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 !

Répondre