2009-09-02 6 views
1

問題は10個のノードがあり、それらの間にいくつかの接続があることです。ここでは、ノードとノードの間の円として円を描いたビジュアルグラフを描きたいと思います。私の問題は、画面上にノードを配置するためのアルゴリズムは何ですか、我々は1つの円を描画し、次に他の円はできるだけ重ならないように描画する必要があります。説明してください。Visual Basicでのノードグラフの描画

答えて

2

graph drawingには多くの目標があり、相互に互換性がないため、この問題にはかなりの方法があります。回避するものが挙げられる

  • 総表面積が占有
  • 横断エッジと全体形状(コンパクトさ、アスペクト比)エッジ間
  • 過度に長い縁
  • 小さな角度(重複エッジ)
  • の数

ここにはいくつかのアプローチがあります。

  • ノードを円に配置して均等に配置するのが簡単です。次に、エッジを直線として追加します。これはほとんど「うまくいく」でしょう。

  • さらに一般的には、お互いに反発するmodel your nodes as springsです。これは例えばKamada-Kawaiアルゴリズムの背後にある考え方です。エッジの長さを最小限に抑えながらノードを離して保持します。

  • 第3のアプローチは、ノードが選択されたルートノードからの距離を示す同心リング上に配置されるradial layoutです。

私はあなたが可能だかのアイデアを得るためにGraphvizパッケージをチェックアウトをお勧めします。使い方が簡単で楽しいです。多くの言語で利用可能なGraphvizライブラリへのバインディングがありますが、残念ながらVisual Basicはそれらの1つではありません。

編集:This questionが関連しています。

+0

私はgraphvizがすべての選択肢の中で最も痛みのないものになると思います。グラフ描画は単純な問題ではありません。 – Daishiman

+0

Graphvizへのバインディングを含む、VB.NETで使用するさまざまなグラフ描画ライブラリがあります。 – reinierpost

+0

@reinerpost:これは素晴らしいことです - あなたはリンクを提供できますか?私は良いものを見つけることができませんでした... –