D3.js力导向图中的LinkDistance和LinkStrength之间的关系

9

在D3.js的力导向布局中,LinkDistance和LinkStrength有什么关系?我假设它们是相关的,如果我错了,请纠正我。

我知道linkDistance定义了任意一对节点之间的长度,并且在力导向布局中起到了约束作用。但是linkStrength扮演了什么角色呢?D3.js的API文档将其定义为“链接刚度(strength)以指定范围[0,1]的值”,这里的“刚度”具体指什么呢?

1个回答

9
你可以将链接距离看作期望的距离,将强度视为在每次迭代中达到目标距离所需的速度。

如果你查看力导向布局的源代码,你会找到以下这行代码:

l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;

这个算法是一个优化算法,因此,在每次迭代中,您都会修改 l。现在问题是,您必须指定要修改多少。

在基本算法中,为了优化距离,您需要以下步骤:
l = ((l = Math.sqrt(l)) - distances[i]) / l;  

然而,您可能希望对每个链接以及每个单独的链接都有更多的控制。因此,您可以将alpha属性视为固定参数,将strength属性视为每个链接变化的参数。
如果您想了解所使用的优化方法的更多信息,我建议您查看高斯-赛德尔维基百科页面

谢谢你的回答!请问这个 alpha 是不是指 D3.js 中力导向布局 API 中提供的冷却参数? - vijay
1
没错!我真的建议你查看源代码,以了解它是如何实际工作的。 - Christopher Chiche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接