d3-force阻止单个节点移动

时间:2017-04-17 21:38:47

标签: javascript d3.js d3-force-directed

我在具有链接节点和单个节点的网络上使用d3-force仿真。

问题是: 这股力量推动了一切远离。

我想要的是,仅对链接的节点起作用的力,如果它们被推向彼此或两个链接的组件重叠。

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:-1)

我猜你需要使用一个中心力量拉动你的" unlinked" d3.forceCenter([x, y])中的节点。但是这也可以在您的链接节点中绘制,因此可能会调整链接强度(如果需要,还可以调整链接强度)以将链接的节点推回去。

使链接/未链接节点上的强制工作方式不同于我。