Ver demostración · Informe de error · Función de solicitud

Este es un programa de Python para simular las interacciones de los planetas
Significa que puede ingresar a las masas de los planetas y las posiciones y velocidades iniciales y nuestro programa le mostrará cómo interactuarían con los demás en una buena simulación.
Nuestro programa le mostrará un escenario esperado, pero puede que no sea 100% preciso.
¡Hay muchas demostraciones preparadas para impresionarlo!
Algunas de las cosas que puedes hacer con nuestra aplicación:
Asegúrese de haber instalado todos los siguientes requisitos previos en su máquina de desarrollo:
pip --version
Primero abra CMD en el lugar en el que desea descargar el proyecto y luego escriba estos comandos:
Clonar el repositorio de su máquina local:
git clone https://github.com/suliman-99/Space-Simulation.git
Navegue al directorio del proyecto:
cd Space-Simulation
Luego, para instalar el módulo PIPENV por PIP, simplemente escriba este comando en su CMD
pip install pipenv
Instale las dependencias requeridas usando Pipenv:
pipenv install
Ejecute el proyecto:
Windows:
python main.py
Linux o Mac:
python3 main.py
El primer paso es ejecutar el programa siguiendo la instalación de la sección anterior.
Una aplicación se abrirá con botones de remolque: haga clic en Create new Simulation para hacer una nueva o elegir Simulation From File para abrir una demostración preparada o para abrir sus demostraciones o estados guardados
Luego haga clic Run Simulation para iniciar la simulación
Su navegador predeterminado se abrirá con la página de simulación
Puede guardar el estado actual haciendo clic en el botón Save State y se guardará en el archivo demos/saved_state.txt , y puede usarlo nuevamente desde allí
Si quieres probar una nueva demostración, lamento decir que necesitas cerrar el programa y abrirlo de nuevo.
Ley de gravitación universal de Newton
F = (G * m1 * m2) / r^2
G : La constante gravitacional
m1 , m2 : las masas de estos dos objetos
r : La distancia entre los centros de las masas
F : La fuerza gravitacional que actúa entre ellos
Usamos esta fórmula para calcular la fuerza entre cada par de planetas
Actualizamos la fuerza total para planeets por este método:
def apply_gravity(planet1: Planet, planet2: Planet) -> None:
u = planet2.pos - planet1.pos
grav = g * planet1.mass * planet2.mass / (u.length() ** 2)
planet1.add_force(u.scale_to(grav))
planet2.add_force(u.scale_to(-grav))
La segunda ley de movimiento de Newton
F = m * a => a = F / m
m : Misa del objeto
F : Fuerza total aplicada sobre él
a : la aceleración de la misma
Utilizamos esta fomula para calcular la aceleración de cada planeta dependiendo de la fuerza total aplicada en él
Después de eso, podemos calcular la nueva velocidad (vector de velocidad) dependiendo de la velocidad actual y la aceleración
Después de eso, podemos calcular la nueva posición (x, y, z) dependiendo de la posición actual y la velocidad
Entonces podemos volver a renderizar el objeto en el nuevo lugar
Podemos hacerlo mucho tiempo en el mismo segundo (más esa 10 veces) y tendremos una buena visualización
Actualizamos los datos de Palnet mediante este método:
def update(self, dt: float) -> None:
self.pos += (self.velocity * dt) + (self.acceleration * ((dt ** 2) / 2))
self.velocity += self.acceleration * dt
self.acceleration = self.force / self.mass
Otro tema de colisión
Project Name
│ main.py
└───core
│ │ camera.py
│ │ environment.py
│ │ file.py
│ │ physics.py
│ │ planet.py
│ │ vector.py
│
└───gui
│ screens
│ app.py
│ controls.py
assets Aquí están nuestras imágenesdemos aquí son nuestras demostraciones y los estados se guardan como archivosresources aquí algunas variables globales estómicastesting esta es nuestra carpeta de prueba Si tiene sugerencias sobre cómo se podría mejorar la simulación de espacio, o desea informar un error, ¡abra un problema! Nos encantaría todos y cualquier contribución.
Para obtener más información, consulte la guía contribuyente.
Suliman Awad - [email protected] - LinkedIn
Enlace del proyecto: https://github.com/suliman-99/space-simulation
Licencia de MIT
Copyright (c) 2023 Suliman Awad
Para obtener más información, consulte el archivo de licencia.