在Danny Holten和Jarke van Wijk多次阅读文章“Force-Directed Edge Bundling for Graph Visualization”之后,我仍然无法弄清楚算法描述的一个方面,我可能会误读 - 或者如果没有,可能含糊不清。
首先,一些免责声明:我是R编程语言的中级用户。在我搜索实现时,我发现了一些Java,C ++和JavaScript代码,但无法解释其含义(here,here和here)。我提前为这个限制道歉,很乐意接受“翻译”的帮助。尽管如此,我认为这个问题与算法的逻辑有关,而不是与其他程序员制定的特定解决方案有关。
算法首先将边缘细分为细分点,这是我理解的清晰指令。但是,在“3.3。计算“文章的一部分,作者提出了一个”迭代细化方案“,通过该方案执行几个循环的迭代。当从一个周期传递到另一个周期时,他们建议每个边缘的细分点数P加倍,但不指定如何实现这一点。
我已经对如何做到这一点提出了不同的解释,并尝试了其中的一些,遗憾的是没有取得好成绩。我提出的主要疑问如下:
1)在考虑新周期中的细分数量时,我是否应该重复使用旧周期的细分?如果我重新使用它们,这将导致在下一个周期出现奇怪的配置,因为那时会有任意的“边”,我可以将边缘细分。请考虑下面的图片,其中我从周期0(P = 1)到周期1(P = 2)说明了这个问题: Figure 1
2)如果我不重述旧的细分,则问题会发生变化。我完全丢弃它们还是将它们留在那里?
(a)如果我把它们留在那里,这种情况对我来说似乎很奇怪,因为它意味着细分点的总数在每个周期都不会翻倍,因为文章陈述但是相反会得到P + 1更多的细分点当传递到下一个周期。因此,如果在周期0,P = 1,则在周期1,P = 3,在周期2,P = 7,在周期3,P = 15,依此类推。无论如何,如果我这样做,我必须做出另一个决定:我是否冻结了旧的细分,还是根据各自的联合力量的应用不断更新各自的位置? (请参见此处的图片:Figure 2。)
(b)如果我完全丢弃它们,那么我有不同的决定。由于旧循环中不会留下任何细分,因此几个几何顶点会松散。 (这些不是网络“节点”意义上的“顶点”。)我是否将它们弄平或者将它们留在那里? (请参见此处的图片:Figure 3。)在我看来,将它们留在适当的位置会产生与冻结旧的细分点相同的效果,相当于上面的情况(a)。然而,扁平化将导致边缘总几何长度减小,这增强了局部弹簧常数并削弱了先前循环的结果。静电力,从而严重改变可视化。
(c)在任何情况下,产生第1项的同样问题:我应该使用哪个标准来放置新的细分?在这里,我设计了两个明智的选择:要么找到每个边缘子段的中点,要么平均划分旧周期变形边缘的总几何长度,并在每个分区放置新点。 (请参见下图,并附有案例(a)的例子:Figure 4。可能属于案例(b)。)
我弄错了吗?还有另一种方法吗?哪一个是正确的 - 或者你认为更好?