2011-09-14 9 views
5

Estoy tratando de usar y comprender el D3 visualization library (http://mbostock.github.com/d3/), y estoy buscando en their force directed code y parece que están usando un quadtree para calcular la fuerza en una partícula. El código esEntender Javascript D3 quadtree de visualización

 var k = kc * quad.count * dn * dn; 
     node.px -= dx * k; 
     node.py -= dy * k; 

donde parece que quad.count es el número de partículas en el nodo quadtree. Pero mirando su quadtree code en https://github.com/mbostock/d3/blob/master/d3.geom.js#L696, no puedo encontrar ninguna referencia a count, y cómo se está calculando. Lo pregunto porque quiero modificar algunas cosas para quizás cambiar el "peso" o "carga" de cada nodo.

+1

Los enlaces ya no funcionan, @highBandWidth. ¿Y cuál fue tu experiencia con quadtree en d3.js, desde esta pregunta? :) – VividD

Respuesta

5

Tome un vistazo a la d3_layout_forceAccumulate método:

https://github.com/mbostock/d3/blob/master/src/layout/force.js#L294-324

El árbol cuádruple por sí mismo no computa el centro de la carga de sus partículas (porque el árbol cuádruple sólo conoce posiciones de las partículas, y no lo hace hacer alguna suposición sobre sus cargos). Después de que se genere el árbol cuádruple, el diseño de fuerza calcula recursivamente el centro de carga para cada cuadrante.

+0

¡Gracias, lo tengo! Tal vez el método debería llamarse algo así como 'd3_layout_quadCenterAccumulate', ya que no está realmente acumulando fuerzas, simplemente calculando' cx', 'cy', y' count'. – highBandWidth

+0

Los valores globales privados en D3 tienen el alcance correspondiente a su clase asociada, para evitar posibles colisiones de nombres. Entonces, cualquier cosa definida en src/layout/force debería tener el prefijo d3_layout_force. – mbostock

+0

ohh la fuerza es solo un prefijo para la función Acumular. – highBandWidth

Cuestiones relacionadas