平面图布局

时间:2010-02-27 15:03:00

标签: algorithm graph graphviz graph-layout planar-graph

布局图时,有哪些边缘重叠最小化技术? (最好与GraphViz相关)还有哪些现有的软件能够以平面方式布局图形?

当前布局 - http://www.evecakes.com/doodles/master.gif

左上角的粉红色部分看起来很好,而淡蓝色部分有一些可避免的边缘重叠。

2 个答案:

答案 0 :(得分:11)

对于一般图,确定具有最小边交叉(Crossing Number)的图的平面布局的问题是NP难的。因此使用了一些启发式方法(如Force based layout算法)。

下面的页面简要介绍了graphviz算法,并提出了一些使用它们获益的方法。它还包含指向pdfs的链接,其中应包含有关算法的更多信息:

  

http://rss.acs.unt.edu/Rdoc/library/Rgraphviz/html/GraphvizLayouts.html

希望有所帮助。

答案 1 :(得分:5)

以下开源Java库有几种算法可能有助于布局平面图。 http://open.trickl.com/trickl-graph/index.html

特别是,以下类提供了解决问题的分析解决方案:

ChrobakPayneLayout (基于Aaron Windsor的Boost C ++实现) http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/straight_line_drawing.html

FoldFreeLayout (基于传感器网络中的无锚分布式本地化)  * Nissanka B. Priyantha,Hari Balakrishnan,Erik Demaine和Seth Teller)

你可能想要做的是使用这样的东西作为第一个“尝试”,确保没有重叠,虽然可能看起来不太好。然后,您可以应用强制定向算法来更公平地分隔节点。

不幸的是,该库刚刚发布,因此文档很少。然而,通过提供一些实际的代码而不仅仅是理论,它可能是有用的。