Center force directed layout after tick using root node (return to center)

前端 未结 2 601
遥遥无期
遥遥无期 2021-01-05 18:27

I am experimenting with force directed layout using D3.js. What I need is center the layout by root (or other selected node) and return this node to the svg (e.g. canvas) ce

2条回答
  •  不知归路
    2021-01-05 19:17

    Try to change the force event handler like this:

    force.on("tick", function(e) {
    nodes[0].x = w / 2;
    nodes[0].y = h / 2;
    
    var k = 0.05 * e.alpha;
              nodes.forEach(function(o, i) {
                o.y += (nodes[0].y - o.y) * k;
                o.x += (nodes[0].x - o.x) * k;
              });
    
    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("cx", function(d) { return d.x; })
        .attr("cy", function(d) { return d.y; });
     });
    

提交回复
热议问题