🔷 INFORMATIONS GÉNÉRALES
Champ Détail
Nom du script script_307cvmn_307.py
Version 1.0.0
Date de création 09/03/2026
Auteur / Demandeur IA Généré (Gemini)
Objectif principal Simuler et animer graphiquement les interactions gravitationnelles de type N-corps (système stellaire complexe) en utilisant l’intégration numérique de haute précision Runge-Kutta 4.
🎯 DESCRIPTION FONCTIONNELLE
📌 Que fait ce script ?
Ce script modélise un système dynamique composé de plusieurs corps célestes (étoiles, planète, lune). Il calcule les forces gravitationnelles mutuelles et prédit leurs trajectoires futures, tout en affichant une animation fluide en temps réel avec des tracés de traîne (trails) pour visualiser les orbites.
📌 Problème résolu
Il permet de simuler des systèmes instables ou complexes (comme un système stellaire binaire avec une lune) que les équations de Kepler classiques ne peuvent pas résoudre analytiquement, en utilisant une méthode d’intégration robuste (RK4) pour éviter les dérives numériques rapides.
⚙️ SPÉCIFICATIONS TECHNIQUES
🐍 Environnement
Élément Valeur
Version Python 3.8+
OS cible Windows / Linux / MacOS
Mode d’exécution Script graphique (GUI via Matplotlib)
📦 Dépendances / Librairies
Librairies standard (built-in)
Aucune (uniquement des bibliothèques scientifiques tierces).
Librairies externes (pip install)
numpy (Calcul vectorisé des accélérations)
matplotlib (Moteur de rendu graphique et animation)
📥 ENTRÉES (INPUTS)
📂 Fichiers / Sources de données en entrée
Le script est auto-contenu. Les données sont injectées via la méthode add_body.
# Nom Type Obligatoire Description Exemple
1 name str ✅ Oui Nom de l’astre « Étoile A »
2 mass float ✅ Oui Masse de l’objet 500
3 pos list ✅ Oui Coordonnées [x, y] [-5, 0]
4 vel list ✅ Oui Vecteur vitesse [vx, vy] [0, 5]
📤 SORTIES (OUTPUTS)
📂 Fichiers / Données en sortie
Type Chemin / Format Description
Visuel Fenêtre interactive Matplotlib Animation 2D des trajectoires orbitale.
🧱 STRUCTURE DU SCRIPT
script_307cvmn_307.py
│
├── 📌 IMPORTS (numpy, matplotlib)
├── 📌 CLASSE AdvancedOrbitalSim (Moteur physique)
│ ├── __init__ → Initialisation de la constante G et de la liste des corps
│ ├── add_body() → Ajout d’objets au système
│ ├── _compute_accel() → Calcul gravitationnel vectorisé (Loi de Newton)
│ └── step_rk4() → Intégrateur numérique Runge-Kutta d’ordre 4
├── 📌 CONFIGURATION (Instanciation du système solaire binaire)
├── 📌 ANIMATION
│ ├── Initialisation des tracés (lines, points, trail_data)
│ └── update() → Fonction de rafraîchissement par frame (5 sous-étapes physiques)
└── 📌 MAIN (Appel de plt.show())
🔧 Détail des fonctions principales
Fonction Paramètres Retour Rôle
_compute_accel pos, masses ndarray Calcule l’accélération de chaque corps avec un « softening » (1e-6) pour éviter les divisions par zéro lors de collisions.
step_rk4 dt ndarray Calcule l’état suivant (pos/vel) en moyennant 4 estimations de pente (précision O(dt4)).
update frame list Gère l’évolution temporelle et la mise à jour des coordonnées des tracés sur le graphique.
🔄 LOGIQUE / ALGORITHME
Initialisation : Création des objets avec masses et vecteurs initiaux.
Boucle d’Animation :
Physique : Exécution de 5 micro-pas de temps RK4 pour garantir la stabilité visuelle.
Stockage : Ajout des nouvelles positions dans un historique de traîne (limité à 60 points).
Rendu : Effacement et redessin des points et des lignes de trajectoire.
Affichage : Projection 2D sur un fond noir.
🚨 GESTION DES ERREURS
Cas d’erreur Type d’exception Comportement attendu
Collision parfaite ZeroDivisionError Prévenu par le softening (10−6) dans le calcul de distance.
Masse nulle LogicError L’astre n’exercera aucune force mais subira celle des autres.
Données non-numériques ValueError NumPy lèvera une erreur lors de la conversion en array.
✅ CONTRAINTES & RÈGLES MÉTIER
Règle 1 : Utilisation du « Softening » pour éviter les accélérations infinies à distance quasi-nulle.
Règle 2 : La traîne est limitée à 60 points pour éviter la saturation de la mémoire et du rendu graphique.
Règle 3 : Le calcul de l’accélération est vectorisé via NumPy pour supporter un grand nombre de corps sans ralentissement majeur.
🧪 TESTS ATTENDUS
# Cas de test Entrée Résultat attendu Statut
1 Conservation énergie Système stable L’orbite ne doit pas « s’envoler » après 200 frames. ⬜ À tester
2 Système à 1 corps 1 étoile seule Immobilité totale (accel = 0). ⬜ À tester
3 Performance 50 corps Fluidité de l’animation > 20 FPS. ⬜ À tester
📝 EXEMPLE D’UTILISATION
▶️ Lancement direct
Bash
python script_307cvmn_307.py
📋 Sortie console/graphique attendue
Ouverture d’une fenêtre titrée « Simulateur N-Corps Avancé (RK4) ».
Visualisation de deux étoiles centrales en rotation mutuelle.
Une planète cyan décrivant une trajectoire complexe autour du binôme.
Une petite lune blanche orbitant autour de la planète.



Avis
Il n’y a pas encore d’avis.