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