2014-06-18 3 views
0

Je suis encore un débutant avec javascript et d3. Je voulais calculer la valeur moyenne des coordonnées du noeud de disposition de la force d3 (souvenez-vous que ces nœuds sont flexibles, c'est-à-dire qu'ils peuvent être déplacés avec la souris). J'ai vu l'utilisation de .map dans l'une des réponses et essayé de l'utiliser, mais il semble y avoir un problème. En ce moment, mon extrait de code ressemble à ceci:Calcul de la valeur moyenne des coordonnées du noeud de mise en forme 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]]; 
      } 

Il semble que positions est de type object et il contient toutes les coordonnées de tous les nœuds avec chaque « tick ». Maintenant, ce que je voudrais, c'est stocker uniquement les valeurs finales des coordonnées et obtenir la valeur moyenne des coordonnées. Est-ce que quelqu'un pourrait m'aider avec ceci?

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

Aucune idée de ce qu'est 'finalNodeSet'. Pouvez-vous nous montrer le code que vous utilisez pour définir les positions des nœuds dans le gestionnaire 'tick'? –

Répondre

0

Cela fait pour moi: je ne demande pas les coordonnées x, y des deux derniers noeuds (car ils ont une valeur fixe) et donc l'exclusion.

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