问题描述
我希望节点排斥svg的边缘。我一直在迷恋链接的强度和forceManyBody()
的强度,但是每当我与具有大量链接的节点进行交互时,它都会从屏幕上发送较小的节点群集。我希望节点均匀分离而不会像火箭一样被炸开。
运行模拟而不进行交互时,它是这样的:
这是在一个大型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 (将#修改为@)