0

我在具有链接节点和单个节点的网络上使用 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();
4

2 回答 2

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));
于 2018-01-18T05:29:23.473 回答
-1

我想您需要使用定心力将“未链接”节点拉入d3.forceCenter([x, y]). 但这也会吸引您的链接节点,因此可能会调整链接强度(必要时 -ve)以将链接节点推开。

使力在链接/未链接节点上以不同方式工作超出了我的范围。

于 2017-05-16T08:22:31.383 回答