La cartografía de la interacción entre partículas es un problema común en Física, pero puede ser difícil de visualizar. D3 es una herramienta que puede ayudar a resolver esta cuestión mediante la simulación de partículas de forma sencilla.
Así es como funciona D3.
La física detrás de D3
D3 (Data-Driven Documents) es una biblioteca de JavaScript para visualizar datos mediante SVG, Canvas y HTML. D3 crea todo tipo de visualizaciones, desde los típicos gráficos de barras hasta los mapas. Para simular las partículas tenemos que centrarnos en el trazado del gráfico dirigido por la fuerza. El módulo se llama d3-force. Con esto, puede hacer cosas increíbles como este ejemplo o proyectos como este juego sobre la prevención de epidemias.
Este módulo utiliza el método numérico de "integración de Verlet" , que integra las ecuaciones de movimiento de Newton.
La integral de la aceleración es siempre la velocidad v(t), cuya integral es siempre la posición, x(t). Si conocemos la posición inicial (x_0), y la velocidad, así como el número infinito de derivadas, y luego integramos cada una para obtener su contribución a la posición, podríamos conocer la posición en cualquier momento,
Ahora bien, si llevamos esta ecuación hacia adelante en el tiempo y hacia atrás en el tiempo por una pequeña Δt, las ecuaciones se verían así,
después de simplificar la ecuación se obtiene,
Se puede calcular la posición en el futuro simplemente conociendo la posición anterior y la aceleración. Hay derivadas superiores como el rebote, pero al tratar con la mecánica clásica hay fuerzas nulas asociadas a derivadas superiores a la aceleración, por lo que se puede omitir el término O.
Para facilitar los cálculos, D3 hace algunas suposiciones,
- paso de tiempo unitario constante Δt = 1 para cada paso
- masa unitaria constante m = 1 para todas las partículas
Considerando que F=ma, la fuerza tendrá el valor de solo la aceleración. Como estamos tomando Δt=1s podemos tener la velocidad de cada paso en el tiempo y luego la posición de la partícula.
Se puede simular la acción de cualquier fuerza en múltiples partículas suponiendo que la interacción entre una partícula y las demás no afecta a la interacción de todo el sistema, esto se llama el principio de superposición.
Partículas y código
El D3 tiene múltiples tipos de fuerzas: carga, enlace, posicionamiento, colisión, etc. Si elige la fuerza de enlace, puede simular no solo partículas, sino estructuras más complejas como las moléculas. Quedémonos con eso.
En este tipo de fuerza, se tienen partículas que interactúan con otras partículas mediante un "palo" que las une entre sí.
Hay que definir los nodos y las partículas que se unen a ellos.
Ahora, D3 actualiza la posición en algún intervalo de tiempo ( Δ"t=1) simplemente añadiendo la velocidad. La biblioteca tiene en cuenta que la distancia entre ellos tiene que ser la misma.
En el código anterior, tenemos dos bucles. Primero hay que hacer los cálculos para cada nodo (en este caso llamado enlace) y luego para cada partícula a la que está ligado.
Cada enlace tiene su nodo origen y destino, y cada nodo tiene una posición x e y (target.x target.y source.x source.y) y su velocidad x e y (target.vx target.vy source.vx source.vy). También tiene sus fuerzas asociadas al palo que modificarán el comportamiento de las distancias entre los nodos (l).
Hay mucho más que puedes hacer con D3, además de sumar y restar velocidades, como combinar diferentes tipos de fuerzas, e incluso interactuar con las partículas.
Y este es un ejemplo sencillo utilizando la carga y la fuerza de enlace, ¡inténtelo!
Finalmente...
D3 es una herramienta potente para crear visualizaciones de datos interactivas e incluso juegos. Se puede utilizar en cualquier entorno profesional o también para proyectos escolares (lo he utilizado un par de veces).
Referencias: