2013-04-25 66 views
2

基于Michael Bostock的“Molecule”示例,可在此URL中获得:http://bl.ocks.org/mbostock/3037015d3.js - 将链接大小设置为强制布局

我试图用几个值来设置我的链接的大小。为此,我禁用了“重力”,在“充电”中放置了一个重要的负值,并将第一个节点固定到窗口的中心。

var force = d3.layout.force() 
    .size([width, height]) 
    .charge(-800) 
    .friction(0.45) 
    .linkStrength(1) 
    .gravity(0) 
    .linkDistance(function(d) { 
     return radius(d.target.size * 10); 
    }); 

我的问题是(as you can see on the image below)有时链路的大小是型动物,特别是对于具有一个小值定义的链接。

有人知道我的问题有一个很好的解决方案吗?

你可以看到我的代码在这里:http://jsfiddle.net/awPn3/

回答

3

这是力布局的特性,即链路的长度是可变的 - 点是,节点会自动布局,你不必担心它。您可以实施检查,确保距离始终是您希望的距离,但这会非常困难。

您正在使用的linkDistance函数是唯一直接强制执行此限制的方法。如果这还不够,就没有简单的方法来减轻它。您唯一的选择是在模拟的每个勾号处执行像我上面提到的检查。

+0

谢谢。你可以给我一个例子吗? – user1528760 2013-04-25 14:10:01

+0

我不知道有任何这样的例子。这将是相当复杂的实施,我不认为有人做过。 – 2013-04-25 14:18:29

+0

好的谢谢。你怎么看待为每个节点实施排斥力? – user1528760 2013-04-25 14:58:01

0

我想它会帮助你修改你使用的函数,也考虑到两端对象的大小。让解决方案针对设置两个对象之间的“可见”距离进行优化:例如(d.source.size + d.target.size)+ desired_distance

相关问题