2011-06-21 17 views
5

que necesito hacer algunos dibujos de diseño gráfico y he estado buscando en el uso de algo así como el algoritmo de diseño de primavera tal como se aplica here y discutido hereprimavera Gráfico Algoritmo w Nodo tamaño

Sin embargo mis nodos tienen una anchura y altura (es un diagrama de entidad). ¿Alguien puede explicar cómo podría incorporar esto en la ecuación?

Respuesta

0

Tomando el Graph JavaScript Framework como punto de partida, puede hacer lo siguiente. Supongo que la clase Node ha sido ampliada por los atributos width y height. Luego, en la función layoutRepulsive, la expresión para el cálculo de las distancias de los nodos tiene que ser cambiados para respetar los tamaños:

var dx = Math.max(0, Math.abs(node2.layoutPosX - node1.layoutPosX) - 0.5*(node2.width+node1.width)); 
var dy = Math.max(0, Math.abs(node2.layoutPosY - node1.layoutPosY) - 0.5*(node2.height+node1.height)); 

La función máxima forza 0 como el valor más bajo posible para la distancia, incluso cuando sus cuadros delimitadores superposición.

0

mirando el interior del primer enlace que procided, no es la línea 240:

var repulsiveForce = this.k * this.k/d; 

que representan el potencial de repulsión (que es la física). Cuanto mayor sea ese número, menos probable es el estado geométrico. d es la distancia entre dos nodos, y this.k es la rigidez de la primavera. Este potencial se vuelve infinito para la distancia d = 0.

Quiere traducir este potencial en una cierta longitud (el tamaño de sus cajas), así que reemplace d por d - length. Eso significa que la fuerza de repulsión se vuelve infinita en la distancia length. Todavía existe el problema, que las fuerzas de repulsión y luego disminuyen las distancias, más pequeño que length, que debe ser cubierto por alguna condicional:

if (d + 0.0001 < length) repulsiveForce = bigbigNumber; 

que añade 0.0001 de manera que la fuerza de repulsión nunca llega a ser infinita, pero sólo es grande, porque las computadoras no manejan el infinito muy bien.

Cuestiones relacionadas