我很想知道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力导向的特征似乎并不适合任何一个。
答案 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 Dwyer和Thomas Jakobsen。”
答案 2 :(得分:0)
可以在以下位置找到Force-Layout算法的概述 https://github.com/mbostock/d3/wiki/Force-Layout