問題を単純化するために、2D平面上にあるノードとエッジを含むグラフがあります。
ボタンをクリックすると、グラフが自動的にレイアウトされてきれいに見えるようになります。つまり、エッジの交差が最小限であり、ノード間のスペースが適切であり、グラフのスケール(重み付きエッジ)を表すことさえあります。
これはすっきりとしたグラフとは何かを完全に主観的に示していることは知っていますが、車輪の再発明ではなく、最初からアルゴリズムを知っている人はいますか?
ありがとう。
http://graphdrawing.org/と、ブラウン大学の教授であるRobertoTamassiaによるこのチュートリアルは非常に役立ちます。
Spring EmbedderのようなForce-DirectedTechniques(チュートリアルの66-72ページ)が大好きです。
隣接する2つの節点の間にばねまたはその他の力があると想定し、自然(シミュレーション)に作業を任せます:)
graphvizをご覧になることをお勧めします。プログラムはグラフのdot
仕様を取り、ネットワークの画像をいくらか「きれいに」生成することができます。理論的背景に興味がある場合に関連する可能性のあるいくつかのリンクを提供する「理論」ページにリンクしました。直面しているレイアウトの問題の解決策が必要な場合は、ライブラリとツール自体が十分に成熟しています。
また、Javaでのレイアウトが必要な場合はJGraph (私はプロジェクトに取り組んでいます)。
Noufal Ibrahimと言いますが、graphvizプロジェクトのCAPIをより正確に見ることもできます。これには、すべてのノードとエッジを含むグラフを作成するためのlib(libgraph.pdf )と、グラフをレイアウトするためのlib( libgvc.pdf)(各ノードの位置を計算するだけ)が含まれているため、独自のUIで表示できます。例えば。
最も人気のあるレイアウトが実際にどのように見えるかを示す優れたビジュアルガイド:リンクをたどる