javascript - D3 物理重力

标签 javascript d3.js physics gravity force-layout

我正在尝试使用 D3 库设计一个物理重力模拟,但运气不佳。 'layout' API reference声明物理重力可以通过正“电荷”参数实现,但我不确定这将如何工作。

我现在尝试实现的是一个 SVG 元素,它包含多个可变权重和大小的矩形,它们以不同的速度上升,最终离开视口(viewport)——它们的权重将定义它们上升的速度. (基本上,我只是想在视口(viewport)顶部之外实现全局引力。)

按照D3的兵力布局,有没有可行的办法呢?我只是在寻找概念性的解决方案,但也欢迎示例和代码片段。

提前致谢!

最佳答案

这里有几个想法:

  1. 您可以直接在 tick 事件处理程序中修改节点的垂直位置:

    force.on("tick", function(e) {
        nodes.forEach(function(o, i) {
            o.y -= o.weight / 30;
         });
    
         node.attr("cx", function(d) { return d.x; })
             .attr("cy", function(d) { return d.y; });
    });
    

    您需要为此方法设置 force.gavity(0)。

  2. 或者您可以使用 force.gravity:它将节点拉向布局中心,您可以指定 svg transfromation 以在视口(viewport)上方移动布局中心

关于javascript - D3 物理重力,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12572219/

相关文章:

c# - 面向对象游戏编程中的物理

swift - Spritekit - 移动物理世界问题

javascript - 如何在 JavaScript 中扩展 XMLHttpRequest 对象?

javascript - d3.js 在不同选择之间混合数据

javascript - 将两个条形图组合在一个页面上

floating-point - 对于接近统一的值, float 学是否更精确?

javascript - 为什么即使设置了 OnPush 标志,Angular2 在更改检测期间也会捕获引用更改和原始更改?

javascript - 在 Javascript 中对输入字段进行分组

javascript - d3 js 中的 selectAll() 也可以将 css 样式作为参数吗?