2009-09-02 9 views
1

Le problème est que j'ai 10 nœuds (disons) et qu'il y a des connexions entre eux. Maintenant, je veux dessiner un graphique visuel illustrant ce qui précède avec des cercles comme des nœuds et des lignes comme des connexions entre eux. Mon problème est quel est l'algorithme pour le placement des nœuds à l'écran, disons que nous avons dessiné un cercle, alors l'autre cercle doit être dessiné comme non chevauchant que possible. S'il vous plaît, expliquez.Dessiner un graphe de nœud en Visual Basic

Répondre

2

Il existe plusieurs manières d'aborder ce problème, car il existe un certain nombre d'objectifs dans graph drawing qui ne sont pas compatibles entre eux. Ce qu'il faut éviter comprennent

  • le nombre d'arêtes croisant
  • la surface totale occupée et forme globale (compacité, le rapport d'aspect)
  • arêtes trop longues
  • petits angles entre les bords (bords qui se chevauchent)

Voici quelques approches.

  • Une simple codification consiste à placer vos nœuds sur un cercle et à les espacer uniformément. Puis ajoutez vos bords comme des lignes droites. Cela fonctionnera principalement.

  • Plus général est à model your nodes as springs qui se repoussent mutuellement. C'est l'idée derrière l'algorithme Kamada-Kawai, par exemple. Il maintient les noeuds séparés tout en minimisant la longueur des arêtes.

  • Une troisième approche est radial layout, où les nœuds sont placés sur des anneaux concentriques qui indiquent leur distance par rapport à un nœud racine choisi.

Je vous recommande de vérifier le paquet Graphviz pour avoir une idée de ce qui est possible. C'est facile à utiliser et amusant à jouer avec. Il existe des liens vers les bibliothèques Graphviz disponibles dans un certain nombre de langues, mais malheureusement, Visual Basic ne semble pas être l'un d'entre eux.

Modifier:This question est liée.

+0

Je pense que graphviz sera le plus libre de tous les choix. Le dessin graphique n'est pas un problème simple. – Daishiman

+0

Il existe différentes bibliothèques de dessins graphiques à utiliser avec VB.NET, y compris les liaisons à Graphviz. – reinierpost

+0

@reinerpost: C'est génial - pouvez-vous fournir un lien? Je ne pouvais pas trouver un bon ... –