2017-04-17 108 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));