script_257cvmn_257.py

49,00 

Simuler et animer la dynamique orbitale de N corps célestes via les lois de la gravitation universelle.

UGS : script_257cvmn_257.py Catégorie : Étiquette :

🔷 INFORMATIONS GÉNÉRALES

Champ Détail

Nom du script script_257cvmn_257.py

Version 1.0.0

Date de création 07/03/2026

Auteur / Demandeur IA Générée (Gemini)

Objectif principal Simuler et animer la dynamique orbitale de N corps célestes via les lois de la gravitation universelle.

🎯 DESCRIPTION FONCTIONNELLE

📌 Que fait ce script ?

Ce script modélise les interactions gravitationnelles entre plusieurs objets massifs (système à 3 corps par défaut). Il calcule les forces d’attraction mutuelles, met à jour les trajectoires en temps réel à l’aide d’un algorithme d’intégration physique, et génère une animation visuelle 2D des orbites et des mouvements.

📌 Problème résolu

Il permet de visualiser des problèmes complexes de mécanique céleste (comme le problème des trois corps) qui n’ont pas de solution analytique simple, en utilisant une résolution numérique vectorisée pour optimiser les performances.

⚙️ SPÉCIFICATIONS TECHNIQUES

🐍 Environnement

Élément Valeur

Version Python 3.8+

OS cible Tous (Windows / Linux / MacOS)

Mode d’exécution CLI avec rendu graphique (Matplotlib)

📦 Dépendances / Librairies

numpy : Calcul matriciel et vectorisation des forces.

matplotlib : Moteur de rendu graphique et module FuncAnimation.

📥 ENTRÉES (INPUTS)

# Nom Type Obligatoire Description Exemple

1 positions list[list] ✅ Oui Coordonnées (x,y,z) initiales [[0,0,0], [1,0,0]]

2 velocities list[list] ✅ Oui Vecteurs vitesse (vx,vy,vz) [[0,0,0], [0,0.5,0]]

3 masses list[float] ✅ Oui Masse de chaque corps [10.0, 0.1]

📤 SORTIES (OUTPUTS)

# Nom Type Description

1 self.history list[array] Historique complet des positions pour chaque pas de temps.

2 Animation Figure Fenêtre interactive Matplotlib affichant le mouvement.

🧱 STRUCTURE DU SCRIPT

script_257cvmn_257.py

├── 📌 IMPORTS (numpy, matplotlib)

├── 📌 CONSTANTE (G=1.0)

├── 📌 CLASSE NBodySimulation

│ ├── __init__() → Initialise l’état et l’historique.

│ ├── calculate_acceleration() → Calcul vectorisé des forces (1/r2).

│ ├── step() → Intégrateur Leapfrog.

│ ├── run_simulation() → Boucle temporelle principale.

│ └── animate() → Configuration du rendu Matplotlib.

└── 📌 MAIN (Configuration des paramètres et lancement)

🔄 LOGIQUE / ALGORITHME

Initialisation : Chargement des vecteurs d’état initiaux.

Calcul de l’accélération : Utilisation de la loi de Newton : ai​=G∑j=i​∣rj​−ri​∣3mj​(rj​−ri​)​.

Intégration Leapfrog :

Mise à jour de la vitesse à t+2dt​.

Mise à jour de la position à t+dt.

Nouvelle accélération et finalisation de la vitesse à t+dt.

Rendu : Animation par rafraîchissement des coordonnées des points (scatter) et des lignes (trajectoires).

🚨 GESTION DES ERREURS

Cas d’erreur Type d’exception Comportement attendu

Collision (r=0) Division par zéro Géré par un mask et une constante d’adoucissement (implicite/zéro) pour éviter les NaN.

Types de données TypeError Forçage en dtype=float lors de la création des tableaux NumPy.

🧪 TESTS ATTENDUS

# Cas de test Entrée Résultat attendu

1 Stabilité v=0, m=10 Le corps central doit rester immobile.

2 Orbite circulaire Vitesse tangentielle équilibrée Trajectoire fermée stable.

3 Évasion Vitesse > Vitesse de libération Le corps quitte le cadre de simulation.

📝 EXEMPLE D’UTILISATION

▶️ Lancement en ligne de commande

Bash

python script_257cvmn_257.py

📋 Sortie console attendue

Plaintext

Démarrage de la simulation N=3 corps sur un temps total de 50.00

[La fenêtre graphique Matplotlib s’ouvre et affiche l’animation]

Avis

Il n’y a pas encore d’avis.

Soyez le premier à laisser votre avis sur “script_257cvmn_257.py”

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *