计算d3力布局节点坐标的平均值

时间:2014-06-18 02:42:56

标签: javascript d3.js force-layout

我仍然是javascript和d3的新手。我想计算d3力布局节点的坐标的平均值(请记住,这些节点是灵活的,即可以通过鼠标拖动来移动)。我在其中一个答案中看到.map的用法,并尝试使用它,但似乎有一些问题。现在我的代码片段如下所示:

        function tick() {
          var positions = finalNodeSet.map(function(d) { 
          return [d.x, d.y]; 
        });

        var x1 = 0;
        var y1 = 0;

        for(var i=0; i<positions.length; i++){
            x1+=positions[[i][0]];
            y1+=positions[[i][1]]; 
            } 

似乎positions属于object类型,并且它包含所有节点的所有坐标,每个节点都有#tick;&#39;。现在我想要的是只存储坐标的最终值并得到坐标的平均值。任何人都可以帮我解决这个问题吗?

 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.each(collide(.5))
            .attr("cx", function (d) {
                return d.x;
            })
            .attr("cy", function (d) {
                return d.y;
            });

    }

1 个答案:

答案 0 :(得分:0)

这对我来说:我不需要最后两个节点的x,y坐标(因为它们具有固定值),因此排除。

var positions = finalNodeSet.map(function(d) { 

            return [d.x, d.y]; 


        });
        var x1 = 0;
        var y1 = 0;
        var xbar=0;
        var ybar=0;

        for(var i=0; i<positions.length-2 ; i++){
            x1+=positions[[i]][0];
            y1+=positions[[i]][1];

            var xbar=x1/positions.length-2;

            var ybar=y1/positions.length-2;
            }

            ax1=positions[positions.length-2][0];
            ay1=positions[positions.length-2][1];
            ax2=positions[positions.length-1][0];
            ay1=positions[positions.length-1][1];