【发布时间】:2011-06-29 01:03:36
【问题描述】:
为了简化问题,我有一个图,其中包含位于 2D 平面上的节点和边。
我想要做的是单击一个按钮,它会使图形自动布局看起来干净。我的意思是边的最小交叉,节点之间的良好空间,甚至可能代表图形比例(加权边)。
我知道这对于什么是干净的图形完全是主观的,但是有谁知道从算法开始,而不是重新发明*?
谢谢。
【问题讨论】:
标签: algorithm layout graph nodes edges
为了简化问题,我有一个图,其中包含位于 2D 平面上的节点和边。
我想要做的是单击一个按钮,它会使图形自动布局看起来干净。我的意思是边的最小交叉,节点之间的良好空间,甚至可能代表图形比例(加权边)。
我知道这对于什么是干净的图形完全是主观的,但是有谁知道从算法开始,而不是重新发明*?
谢谢。
【问题讨论】:
标签: algorithm layout graph nodes edges
我建议你看看graphviz。 dot 程序可以采用图形规范并为您生成网络图像,有点“干净”。我已经链接到“理论”页面,如果您对理论背景感兴趣,它会为您提供一些可能相关的链接。如果您只是想要解决您面临的布局问题,那么库和工具本身就足够成熟了。
【讨论】:
您会发现 http://graphdrawing.org/ 和 this tutorial,由布朗大学教授 Roberto Tamassia 提供,非常有帮助。
我很喜欢像 Spring Embedder 这样的 Force-Directed Techniques(教程中的第 66-72 页)。
您假设任何两个相邻节点之间存在弹簧或其他力,并让自然(模拟)完成工作:)
【讨论】:
最流行的布局实际外观的良好视觉指南:关注link
【讨论】:
如果您想要 Java 中的布局,也可以使用 JGraph(我从事该项目)。
【讨论】:
我会说是 Noufal Ibrahim,但您也可以更准确地查看 graphviz 项目的 C API。它包括一个用于构建包含所有节点和边的图形的库 (libgraph.pdf),以及一个用于布局图形的库 (libgvc.pdf)(只需计算每个节点的位置),因此您可以在自己的 UI 中显示它例如。
【讨论】: