web-dev-qa-db-fra.com

Algorithme de mise en page automatique du graphique

Pour simplifier le problème, j'ai un graphique qui contient des nœuds et des arêtes qui sont sur un plan 2D.

Ce que je veux pouvoir faire, c'est de cliquer sur un bouton et cela rendra automatiquement la disposition du graphique plus nette. J'entends par là un croisement minimal des bords, un bel espace entre les nœuds, peut-être même représenter l'échelle du graphique (bords pondérés).

Je sais que cela est complètement subjectif de ce qu'est un graphique propre, mais quelqu'un connaît-il un algorithme pour commencer, plutôt que de réinventer la roue?

Merci.

59
Cheetah

Je vous suggère de jeter un œil à graphviz . Le programme dot peut prendre une spécification de graphique et générer une image du réseau pour vous quelque peu "proprement". Le lien "théorie" sur cette page vous donne quelques liens qui pourraient être pertinents si vous êtes intéressé par le contexte théorique.

19
Noufal Ibrahim

Vous trouverez http: // graphdrawing.org / et ce tutoriel , par Roberto Tamassia , professeur à l'Université Brown, très utile.

J'aime beaucoup les techniques dirigées par la force (pp. 66-72 dans le tutoriel) comme le Spring Embedder .

Vous supposez qu'il existe un ressort ou une autre force entre deux nœuds adjacents et laissez la nature (simulation) faire le travail :)

74
ypercubeᵀᴹ

Aussi JGraph si vous voulez les mises en page dans Java (je travaille sur le projet).

4
David

Je dirais que Noufal Ibrahim, mais vous pouvez également regarder plus précisément l'API C du projet graphviz . Il comprend une bibliothèque pour construire votre graphique ( libgraph.pdf ) avec tous les nœuds et bords, et une bibliothèque pour mettre en page le graphique ( libgvc.pdf ) (il suffit de calculer chaque position des nœuds), vous pouvez donc l'afficher dans votre propre interface utilisateur par exemple.

2
jslap

Un bon guide visuel à quoi ressemblent les mises en page les plus populaires: suivez le lien

1
Diana Jobs