4

所以目前我正在尝试创建一个由几千个节点和大约 30k 个链接组成的力导向图。正如您可能猜到的那样,模拟非常非常慢。我想做的是预先计算节点的所有位置,然后只渲染一个静态(但交互式)图。有没有办法使用 d3.js 计算力导向图而不渲染它(使其更快),然后只从预先计算的值渲染静态图?我的代码目前基于 Mike Bostock 的示例。

4

1 回答 1

3

d3 用于力有向图布局的方法是标准的排斥力和吸引力模型,您可以在维基百科上找到伪代码(http://en.wikipedia.org/wiki/Force-based_algorithms_%28graph_drawing%29#Pseudocode)或查看 d3 源本身 (https://github.com/mbostock/d3/blob/master/src/layout/force.js)。

该算法每个滴答声(或时间片)的复杂度为 O(n^2),大约需要 n 个滴答声才能达到平衡,因此整个布局过程的复杂度为 O(n^3)(http://www.ecs.umass .edu/ece/labs/vlsicad/ece665/presentations/Force-Directed-Adel.ppt)。对于数千个节点,这是不切实际的。


要尝试回答您的具体问题,只需在您的 SVG 容器元素上使用 CSS, display: none 即可。一旦初始模拟“最终”完成,您就可以获取 SVG 元素的 HTML 源代码,并将其用作静态但交互式表示的基础。(一旦您拥有所有元素的 html,您只需将鼠标悬停事件添加到它们上即可让它们显示其详细信息。

于 2012-12-27T13:20:43.873 回答