animation - d3.js que controla la animación inicial en diseño de fuerza
force-layout (1)
He leído mucho acerca de cómo influir en la animación inicial del diseño de la fuerza, pero me temo que aún no lo he entendido.
He descubierto (y podría implementar) este ejemplo sobre cómo "detenerlo" efectivamente.
Pero mi pregunta es, ¿es posible controlarla (es decir, influir en cuánto tiempo tarda hasta que "la fuerza se detenga"?).
De la documentación parece que alfa es el parámetro para cambiar, pero no hace la diferencia (probé valores negativos, cero y valor positivo sin ninguna diferencia notable).
Aquí hay una jsdiddle de lo que estoy tratando de hacer: yrscc violín de lo que estoy tratando de hacer.
var force = d3.layout.force()
.nodes(d3.values(datax.nodes))
.links(datax.links)
.size([xViewPortArea.Width, xViewPortArea.Height])
.linkDistance(xGraphParameters.xLinkDistance)
.charge(xGraphParameters.xCharge)
.on("tick", tick)
.alpha(-5) // HERE
.start();
Mis preguntas:
- ¿Qué valor de alfa realmente influiría en el número de iteraciones? (Pensé que era con "* Si el valor no es positivo, y el diseño de la fuerza se está ejecutando, este método detiene el diseño de la fuerza en el siguiente tic y envía un" final " en la documentación
- en esto, esta publicación de una función es propuesta por @JohnS, que aparentemente puede ayudar. Pero no he entendido dónde se supone que debe llamarlo.
PD: otra opción genial es tener una imagen en la pantalla y luego calcular el diseño óptimo en el fondo como aquí . Pero dejé de intentar implementarlo
Una forma de enfriar el diseño de la fuerza es forzar los eventos de tic:
var k = 0;
while ((force.alpha() > 1e-2) && (k < 150)) {
force.tick(),
k = k + 1;
}
el valor alfa mide la temperatura de la fuerza, los valores más bajos indican que el diseño es más estable. El número de ticks para considerarlo estable dependerá de la cantidad de nodos; he tenido buenos resultados con 50-200. El coeficiente de fricción ayudará a estabilizar la fuerza, pero el diseño será menos óptimo.