我仍然是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;
});
}
答案 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];