布局图时,有哪些边缘重叠最小化技术? (最好与GraphViz相关)还有哪些现有的软件能够以平面方式布局图形?
当前布局 - http://www.evecakes.com/doodles/master.gif
左上角的粉红色部分看起来很好,而淡蓝色部分有一些可避免的边缘重叠。
答案 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)
你可能想要做的是使用这样的东西作为第一个“尝试”,确保没有重叠,虽然可能看起来不太好。然后,您可以应用强制定向算法来更公平地分隔节点。
不幸的是,该库刚刚发布,因此文档很少。然而,通过提供一些实际的代码而不仅仅是理论,它可能是有用的。