在有向图中布置(大量)并行连接的算法

时间:2019-04-05 11:42:15

标签: algorithm graph drawing

我正在从事这个项目,我们从有向图生成图像。图中的顶点通过定位算法进行布局,而边(或连接器)在之后进行布局。

连接器的最佳路径已经通过A *算法计算出来,并且效果很好。注意:“最佳”取决于我们拥有的流程图,并且在视觉方面是“最佳”,而不是原始距离。

还要注意的一点是,渲染之前我们没有任何实际像素的概念。每个顶点都位于整数(x,y)位置,并且连接器只是包含该位置的分数的简单列表。分数,因为我们的连接器在“网格”单元之间移动,并且我们将运动限制为1/2。每个角度都是直角。

因此,从(1,1)到(3,2),连接器将很简单:[[1,1),(3 / 2,1),(2,1),(5/2, 1),(3,1),(3,3 / 2),(3,2)]。

这很好用。

对于在某些部分平行运行的线,我做了一个简单的算法,为连接器的每个部分(两个角之间的直线部分)指定了索引。因此,并行运行的4个段的索引为0.3.3。

在渲染阶段,将这些简单的整数和分数渲染为像素,从而确定并行索引的偏移量。

现在的问题是: 在许多平行线(> 10)的情况下,偏移开始分解,因为平行线的总宽度开始超过渲染顶点的宽度。除此之外,还需要进行多项光学改进:

  • 无角的直线应位于直线组的中间。或尽可能接近。
  • 在拐角处的一组平行连接器应保持其各自位置在曲线的外部。因此,如果向上和向下依次连接10个连接器,则最左侧的连接器应在折弯之后位于顶部,而最右侧的连接器应在折弯之后位于底部。

当我看流程图软件,尤其是电气图表软件时,我意识到这个问题已经被很多人解决了。

所以我想问的是:在这样的用例中,是否有一种已知的算法可以对段进行排序?我一直在网上搜索,但是我只找到与电路图相关的工具以及简单的流程图。

当然,大多数算法都不是插件,我根本不介意。我需要根据自己的需要进行量身定制。

EDIT :我现在找到了此链接:http://cs.brown.edu/people/rtamassi/papers/gd-tutorial/gd-constraints.pdf,其中包含许多文献数据。会调查的:-)

0 个答案:

没有答案