如何使用d3.js,force和network设置只有一个函数的cx和cy?

时间:2014-09-03 14:56:45

标签: javascript d3.js

我发现所有这样的内容都要改变cx,cy

  .attr("cx", function(d) {var x... return x; })
  .attr("cy", function(d) {var y... return y; })

但是我有一个函数F(x,y),它返回{X:value, Y:value}

由于此F函数的计算成本很高,我无法将其调用两次。

我需要这样的东西:

 node.attr("[cx,cy]", function(d){ return F(d.x,d.y) }

只需为每个节点设置cxcy调用函数F一次。 它在功能tick()中。我认为node.attr(...)会自动调用每个节点的函数,这就是为什么我不能在F行之前执行函数node.attr(...)

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以预先计算一次值并将其存储在数据对象中:

data.forEach(function (d) {
    var result = F(d.x, d.y);
    d.computedX = result[0];
    d.computedY = result[1];
});

然后是:

node.attr("cx", function(d) { return d.computedX; })
    .attr("cy", function(d) { return d.computedY; })
相关问题