2014-06-18 95 views
0

我仍然是一個javascript和d3的新手。我想計算d3力佈局節點座標的平均值(請記住,這些節點是靈活的,即可以通過鼠標拖動來移動)。我在其中一個答案中看到了.map的用法,並嘗試使用它,但似乎存在一些問題。現在我的代碼片段看起來是這樣的:計算d3力佈局節點座標的平均值

 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]]; 
      } 

似乎positionsobject型的,它包含了所有的所有節點的座標與每一個「滴答」。現在我想要的是隻存儲座標的最終值並獲得座標的平均值。任何人都可以幫我解決這個問題嗎?

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

不知道'finalNodeSet'是什麼。你能告訴我們你用來設置'tick'處理程序中節點位置的代碼嗎? –

回答

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];