2017-04-17 6 views
0

私はリンクされたノードと単一ノードを持つネットワークでd3-forceシミュレーションを使用しています。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)); 
関連する問題