2017-04-17 4 views
0

Ich verwende die d3-force-Simulation in einem Netzwerk mit verknüpften Knoten und einzelnen Knoten. Das Problem ist: Die Kraft schiebt alles weit weg.d3-force verhindert die Bewegung einzelner Knoten

Was ich möchte, ist die Kraft, nur auf Knoten zu wirken, die verbunden sind und wenn sie aufeinander zu geschoben werden oder sich 2 verknüpfte Komponenten überlappen.

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(); 

Antwort

-1

Ich denke, Sie brauchen eine zentrierende Kraft zu verwenden, um Ihren „unverbundenen“ Knoten in d3.forceCenter([x, y]) zu ziehen. Aber dies würde auch Ihre verknüpften Knoten einbeziehen, also vielleicht die Verbindungsstärke anpassen (-je falls erforderlich), um die verbundenen wieder auseinander zu schieben.

Die Kraft auf verknüpfte/nicht verbundene Knoten anders arbeiten ist weit jenseits von mir.

0

Append forceX und forceY zu Ihrer Kraftsimulation kann das Problem beheben. Hier ein Beispiel:

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)); 
Verwandte Themen