我正在使用D3.js库来开发一个气泡图。我从互联网上得到了一些样本,用力模拟来显示气泡节点。我非常喜欢它,并认为它包括在我的项目,但有一个问题,有时气泡被切割周围的SVG框架/边界。我试着理解和调试代码,并得出结论,气泡的最终位置是由力模拟决定的。我想到了以下两种解决方案:
有什么方法可以实现我提到的2种解决方案之一?有没有其他解决方案来防止力模拟气泡不接触SVG框架/边界?
发布于 2021-01-09 11:21:17
第二种方法是不可行的,因为力的模拟是非线性和不可预测的,无法预先确定其作用区域。此外,取决于所起作用的力量,节点可以无限期地排斥自己,因此在仿真期间扩展SVG可以创建一个不断扩展的SVG元素。
第一种方法就是要走的路。为了限制气泡,您可以编辑更新位置的函数(在示例中通常称为ticked() ),可以使用 Math.min() 和手动添加边界。
下面的代码是来自https://bl.ocks.org/mbostock/1129492的片段
function tick() {
node
.attr("cx", function(d) { return d.x = Math.max(radius, Math.min(width - radius,
d.x)); })
.attr("cy", function(d) { return d.y = Math.max(radius, Math.min(height - radius,
d.y)); });
}要注意的事情:
https://stackoverflow.com/questions/65640424
复制相似问题