在d3力模拟中,是否有办法使力远离某些固定点?

问题描述

我希望节点排斥svg的边缘。我一直在迷恋链接的强度和forceManyBody()的强度,但是每当我与具有大量链接的节点进行交互时,它都会从屏幕上发送较小的节点群集。我希望节点均匀分离而不会像火箭一样被炸开。

运行模拟而不进行交互时,它是这样的:

enter image description here

这是在一个大型svg(2400,1600)上,该大小可能会减小到一半。

我在想,如果我强迫离开拐角和每个拐角之间的中点,它们仍将分开,但不会从屏幕上发射出去。

这是当前的力模拟代码:

var force = d3
    .forceSimulation(data.nodes)
    .force(
      "link",d3
        .forceLink()
        .id(function (d) {
          return d.name;
        })
        .strength(0.4)
        .links(data.links)
    )
    .force("charge",d3.forceManyBody().strength(-20))
    .force("center",d3.forceCenter(1200,800))
    .force(
      "collision",d3.forceCollide().radius((node) => {
        return node.type === "application" ? 50 : 30;
      })
    )
    .on("tick",function () {
      link
        .attr("x1",function (d) {
          return d.source.x;
        })
        .attr("y1",function (d) {
          return d.source.y;
        })
        .attr("x2",function (d) {
          return d.target.x;
        })
        .attr("y2",function (d) {
          return d.target.y;
        });
      node.attr("transform",function (d) {
        return "translate(" + d.x + "," + d.y + ")";
      });
    });

那么,是否有一种方法可以使节点远离边缘,或者有一种更好的方法来实现分离而不丢失节点?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...