1

グラフのノードを表すために100x40の長方形を描画するJavaコンポーネントがあります。新しいノードが追加されたら、それを便利な位置に配置できるようにしたいと思います。現在、x軸で次に使用可能なスペースを選択するだけです。ただし、これは、グラフをロードすると、右側のビューにまたがるノードの大きなチェーンが表示されることを意味します。これは理想的ではありません。

より良い解決策は、ユーザーのビューの中心点に最も近いポイントにノードを追加することです。この問題には多くの解決策があると確信しています。これを達成するための合理的な方法を考えることはできません。

この問題に関連する3つの方法があります。

positionNode(Node) // which tries to find suitable x,y to place a node
setPos(x,y) // which moves a node to the respective position
findElementAt(x,y) // which returns a node's model if such a node exists at (x,y)

考えられる解決策は、どういうわけか中心点の周りをらせん状にすることを含むかもしれませんが、これを実行するための良い解決策を想像することはできません。

4

2 に答える 2

2

力ベースのレイアウトの機会のように聞こえます:

http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing

グラフと言うとき、ノードは互いに接続されていると思います。そのため、ノードの線が最小限に交差するようにノードを描画して、グラフが重要だと言っていることを視覚化しやすくします。強制ベースのレイアウトは、グラフを配置するのに役立ち、多くの線が互いに交差する「ストレス」がかかっていないようにします。

于 2012-09-27T15:00:08.670 に答える
2

グラフのレンダリングは難しい問題であり、多くの研究の対象となっています。

ノードをノードのラインではなく一種のバンドルにしたい場合、主な欠点は、ノードから出てくるラインが他の子とオーバーラップすることです。

正方形の束または円形の束を作ることができます。正方形のバンドルを作成するには、ノード数の平方根を取り、1つ追加します。たとえば、17個のノードがある場合、正方形の辺は4 + 1 = 5になります。つまり、5x5の正方形になります。正方形のセルに各ノードを配置します。

丸い束を作るには、同心円を描きます。したがって、最初のノードは中央にあります。次に、そのノードの周りの仮想円を計算します。必要なスペースの量に応じて、円を度単位のセグメントに分割します。次に、各セグメントの中央に追加の各ノードを配置します。

ノードをオーバーラップさせたい場合があることに注意してください。インターフェイスの動作によっては、オーバーラップにより、より多くのノードをに収めることができる場合があります。

于 2012-09-27T15:48:18.573 に答える