2017-04-17 62 views
0

我在具有链接以及单个节点的网络上使用d3力仿真。d3-force防止单个节点移动

问题是: 这个力量将所有的东西都推得很远。

我想要的是,力量只作用于链接的节点,如果它们被推向彼此或2个链接的组件重叠。

var simulation = d3Force.forceSimulation() 
     .alphaDecay(0) 
     .force("link", d3Force.forceLink() 
           .distance(60) 
           .strength(0.5) 
           .id(function(d) { return d.index; })) 
.force("charge", d3Force.forceManyBody().strength(-1000)) 
       .restart(); 

回答

-1

我猜你需要使用集中力拉你的“无关联”节点d3.forceCenter([x, y])。但是这也会吸引你的链接节点,所以也许可以调整链接强度(如果有必要的话),以便将链接的链接推回去。

使链接/非链接节点上的力的工作方式不同于我。

0

附加forceXforceY给你的力仿真可以解决问题。这里是一个例子:

var simulation = d3.forceSimulation() 
    .force("link", d3.forceLink().id(function (d) { 
     return d.id; 
    })) 
    .force("charge", d3.forceManyBody().strength(-50)) 
    .force("center", d3.forceCenter(width/2, height/2)) 
    .force("x", d3.forceX().strength(0.1)) 
    .force("y", d3.forceY().strength(0.1));