MAR
23
Dessiner un réseau de données en PHP
23.03.2008 | | Auteur : Ayashi | Catégorie : Programmation


Si vous avez déja eu l'occasion de travailler avec des réseaux de données ( une liste d'objet et de liens entre ces objets ) vous avez du être confronté à la difficultée de les représenter graphiquement. Il existe plusieurs algorithmes plus ou moins adaptés mettant en oeuvre des modèles de forces ( électrique, magnétique, gravitationnelles,.. ) A ma connaissance, ces algorithmes n'ont pas été portés en PHP.

Le code que je vous propose ici permet de représenter des réseaux de données en utilisant une implémentation de l'algorithme de force / répulsion ( aussi appelé Spring forces ). Le rendus est effectué via la librairie GD2. Quelques images illustrent cette articles, elles ont toutes été générées par ce script.

Le modèle d'attraction / répulsion est simple à construire, il consiste à calculer les vecteurs de forces appliqués à chaques noeuds provenant de chaques autre noeuds.

Deux règles s'appliquent :
  • Deux noeuds liés subiront une force d'attraction proportionelle à la distance qui les sépare.
  • Deux noeuds appliqueront l'un par rapport à l'autre une force de répulsion inversement proportionelle à la distance qui les sépare.
Pour calculer ces vecteurs il est nécessaire de faire quelques calculs trigonométriques.

Les vecteurs sont caractérisés par un angle et une force. La force doit dépendre de la distance entre les objets. Pour environ 20 objets, les valeurs suivantes permettent d'obtenir des graphs de qualité :
Une fois tous les vecteurs calculés pour chaques noeuds, il reste à les appliquer. Les étapes calcul / déplacement doivent être répétées suffisamment de fois pour que l'équilibre des noeuds soit atteint. Dans certaines configuration cela est impossible.


Je vous invite à télécharger ce script pour essayer de jouer avec les différents paramètres ( principalement $RepulsionFactor, $RepulsionAtt, $AttractionFactor, $AttractionAtt ). Il convient des les adapter suivant le nombre de noeuds et de liaisons.

Pour télécharger ce script, cliquez ici.

Au début du script vous trouverez 3 méthodes pour générer des réseaux : "Every nodes connected to all nodes" génère un réseau ou tous les noeuds sont reliés à tous les noeuds, "All nodes connected to a single same node" génère un réseau ou tous les noeuds sont reliés à un noeud central, "All nodes with random connection to another node" probablement le plus intéressant car les connections sont aléatoires. Le nombre de noeuds est définis par la variable $MaxNodes. Vous pouvez exécuter ce script en utilisant PHP-CLI :

php -q vectors.php

Le fichier final.jpg sera alors généré dans le même répertoire.
Tags : php, gd, spring, forces | Digg!
Commentaires  | Ajouter un commentaire
Daniele
03.12.09 / 18:00
Agree with ernest, for what i'd understand, its really interesting!Hope google translate can help me ;)
Kevin Campion
18.12.08 / 21:10
Bon boulot !! Très impressionnant.Il y a quelque correction à y apporter :- pour éviter des erreur warning php (division par zéro)- pour que le script trouve le fichier myriad.ttf (chez moi cela posait problème)J'ai les sources modifiées si vous le souhaitez, contactez-moi par email ;)
Ayashi
06.10.08 / 14:44
Wow Impressionnant! (faut-il comprendre quelque chose?) Je ne connaissait pas ce logiciel (viens de regarder le site), le concept à l'air sympa mais je n'en ai pas l'utilité.
moi
04.10.08 / 22:47
c'est vraiment moyen ton blog et arrête de te faire passer pour moi chez valdo et autres je t'ai reconnu espèce de faux-c... t'as beau utiliser tor tu t'es trahi toi-même.ne m'adresse plus la parole !
_argos
03.07.08 / 3:10
Hi, your scripts are very interesting, good work.
Ernest
27.06.08 / 20:55
Hello! I barely understand french but I am really impressed with your work. I'll try your charts library in my next project. Au revoir.
Rechercher sur internet  ?  | Rechercher!
Trackback
Utilisez le lien http://www.sunyday.net/trackback-Dessiner-un-reseau-de-donnees-en-PHP pour faire un trackback vers cette article depuis votre site web. Les trackbacks sont soumis à une approbation mutuelle et susceptibles d'être supprimés si jugés indésirables.
Retrieve RSS feed. Get notified by eMail. Meteo Parser.
Computing widgets...
Jean-Damien POGOLOTTI© 2k6-2k7 | Design // Code

Qui suis-je?

Touche à tout restant bouche bée devant la complexité et la cohérence de ce monde je m'évertue à essayer d'en comprendre les rouages. En passant par la météorologie, la physique ou bien l'informatique, tout est une raison d'apprendre!
Comment les gens arrivent-il ici?
 couche  lldp  convertisseur  image  avec  trou  regex  gd  nuls  menu  fading  resize  sunyday  synop  sunyday.net  web  +  anim%C3%A9  d%27ozone  photovoltaique  browser  script  ad  magn%C3%A9tique  et  map  active  regexp  en  conversion  longitude  champ  google  dans  mercator  ajax  latitude  cli  url  la  convertir  www.sunyday.net  coordonn%C3%A9es  line  PAGE  php  directory  une  explication  de  CODE  html  gps  snmp  module  ldap  un  fade  pour  terrestre  javascript  authentification  le  ntfs  metar  les  protocole  SUR  adresse  des  

Sunyday.net