D3.js用于力导向图的算法是什么?

时间:2012-10-16 14:30:57

标签: javascript algorithm d3.js graph-algorithm force-layout

我很想知道D3用什么算法来实现库中的力导向图功能。阅读Kobourov's summary力导向图的历史让我有点困惑的是,库中使用的确切算法或方法(算法/启发式的组合)是什么。

D3 API reference表示Barnes-Hut算法用于计算作用于物体的电荷,即O(N * log(N))运算。 Kobourov的文章提到Quigley-Eades算法和Hu的算法是利用Barnes-Hut的多级算法。其中一个是在D3中以某种方式使用的吗?

API wiki进一步说,Verlet集成用于粒子定位。 source code提到了Gauss-Seidel算法,后者又在Hu's algorithm和Dwyer的graph layout paper中提到。我想我正在寻找答案的问题是D3使用的“综合”算法; Kobourov的文章列出了几个和D3力导向的特征似乎并不适合任何一个。

3 个答案:

答案 0 :(得分:3)

在最初的d3 paper中,Mike Bostock&人。写道,Dwyer的实现用于强制图布局:

  

力布局结合了物理模拟和迭代约束松弛[7],用于稳定的图形布局。

     

[7] T. Dwyer。可扩展,通用且简单的约束图形布局。在EuroVis,2009年。

有关详细信息,Dwyer's paper详细介绍了整个算法。

答案 1 :(得分:2)

嗯,这不是你的具体问题的答案,但在他的demo page for force-directed layout,他说,“布局算法的灵感来自Tim DwyerThomas Jakobsen。”

答案 2 :(得分:0)

可以在以下位置找到Force-Layout算法的概述   https://github.com/mbostock/d3/wiki/Force-Layout