graphics自动布局algorithm

为了简化问题,我有一个包含在2D平面上的节点和边的图。

我想要做的是点击一个button,它会自动布局图看起来干净。 通过这个,我意味着最小的边缘交叉,节点之间的漂亮的空间,甚至可以表示graphics比例(加权的边缘)。

我知道这完全是一个干净的图表的主观,但是有没有人知道一个algorithm开始,而不是重新发明轮子?

谢谢。

我build议你看看graphviz 。 dot程序可以采取一个graphics的规格,并为您产生一个networking的图像有点“干净”。 如果您对理论背景感兴趣,那么该页面上的“理论”链接将为您提供一些可能相关的链接。

你会发现http:// graphdrawing.org /尤其是这个教程相当有帮助。

我喜欢Spring Embedder中的很多力量导向技术(教程中的第66-72页)。

你假设任何两个相邻的节点之间有一个弹簧或其他力量,让自然(模拟)做工作:)

我会说Noufal Ibrahim,但你也可以更精确地看一下graphviz项目的C API。 它包含一个lib,用于创build包含所有节点和边的图( libgraph.pdf ),以及一个用于布局图( libgvc.pdf )的lib(仅计算每个节点的位置),然后可以在自己的UI中显示例如。

另外JGraph,如果你想在Java中的布局(我在项目上工作)。

一个很好的视觉指南如何最stream行的布局实际上看起来:遵循链接