Skip to content

Scripts escritos en Python para generar simulaciones y animar los resultados de la dinámica de masas y resortes.

Notifications You must be signed in to change notification settings

ffiza/mass-and-spring

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Animaciones de masas y resortes

Códigos de Python para resolver y animar la dinámica de masas y resortes. El script principal es code/simulation.py, que simula la evolución de un sistema de masas y resortes usando un integrador temporal tipo leapfrog. El script code/animation.py puede utilizarse para generar una animación de los resultados obtenidos utilizando PyGame. El script code/utils.py contiene algunas funciones útiles y code/ui/ contiene scripts para la interfaz gráfica de PyGame. Todas las unidades están en el sistema internacional.

Para correr estos códigos es necesario instalar las siguientes librerías: NumPy, PyGame, pandas, tqdm y PyYAML, lo cual puede hacerse mediante el comando:

pip install numpy pygame-ce pandas tqdm pyyaml

Clonar o descargar este repositorio

Para tener una copia de este repositorio en tu sistema, podés clonar el mismo usando

git clone https://github.com/ffiza/mass-and-spring.git

o bien descargar el repositorio comprimido en formato ZIP yendo a Code > Download ZIP.

Cómo animar las simulaciones incluidas

Para animar las simulaciones inlcuidas en este repositorio (cuyos resultados están almacenados en el directorio results/, en una archivo CSV por simulación) sólo es necesario ejecutar

python code/animation.py --result [nombre_resultados]

Por ejemplo, para animar los resultados dentro del directorio run_05, ejecutar

python code/animation.py --result run_05

La simulación incia pausada y puede activarse presionando P. Además, R resetea la animación y D muestra o esconde el panel del debugger.

Cómo ejecutar tus propias simulaciones

Para ejecutar tus propias simulaciones, es necesario que crees una nueva carpeta dentro del directorio configs/ y agregues archivos de configuración según se describe en la sección siguiente. Luego, simplemente podés correr

python code/simulation.py --config [nombre_carpeta_config]

Python va a correr toda la simulación (tené en cuenta que cuantas más partículas haya más lenta va a ser la ejecución) y guardar los resultados en el directorio results/, en un archivo CSV con el mismo nombre de la carpeta donde pusiste los archivos de configuración.

Finalmente, para animar tus resultados, podés correr

python code/animation.py --result [nombre_carpeta_config]

Sobre los archivos de configuración

Para correr tus propias simulaciones tenés que crear una nueva carpeta en configs/ que debe contener varios archivos relacionados con la configuración. Los mismos son los siguientes.

  • physics.yml: Archivo que contiene el paso temporal de la simulación (TIMESTEP), la cantidad de pasos (N_STEPS), la aceleración de la gravedad (GRAV_ACCELERATION) y el coeficiente de fricción (FRICTION_COEF).
  • ic.csv: Archivo que contiene la condición inicial de cada partícula (posiciones y velocidades) y su masa. Además, el campo DynamicParticle indica si la partícula es dinámica (1) o estática (0), en cuyo caso se mantendrá fija durante toda la simulación.
  • elastic_constants.csv: Archivo que contiene la constante elástica de cada resorte. En esta matriz, el par (i, j) indica el valor de la constante elástica del resorte que une la partícula i con la partícula j. Tanto la diagonal como el triángulo inferior deben ser nulos porque la fuerza elástica es antisimétrica.
  • natural_lengths.csv: Archivo que contiene la longitud natural de cada resorte. En esta matriz, el par (i, j) indica el valor de la longitud natural del resorte que une la partícula i con la partícula j. Tanto la diagonal como el triángulo inferior deben ser nulos porque la fuerza elástica es antisimétrica.

Ejemplos

El repositorio incluye algunos ejemplos, sus condiciones iniciales y los resultados. A continuación se muestran algunas imagenes de las simulaciones incluidas.

About

Scripts escritos en Python para generar simulaciones y animar los resultados de la dinámica de masas y resortes.

Topics

Resources

Stars

Watchers

Forks

Languages