script_304cvmn_304.py

49,00 

Simuler et visualiser en temps réel le comportement physique de particules de fluide interagissant entre elles et avec leur environnement.

UGS : script_304cvmn_304.py Catégorie : Étiquettes : , ,

🔷 INFORMATIONS GÉNÉRALES

Champ Détail

Nom du script script_304cvmn_304.py

Version 1.0.0

Date de création 09/03/2026

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

Objectif principal Simuler et visualiser en temps réel le comportement physique de particules de fluide interagissant entre elles et avec leur environnement.

🎯 DESCRIPTION FONCTIONNELLE

📌 Que fait ce script ?

Ce script utilise une approche de système de particules pour simuler un fluide simplifié. Il calcule les forces de répulsion (pour éviter l’empilement), la viscosité (pour lisser les mouvements) et la gravité, puis affiche le résultat sous forme d’une animation interactive via matplotlib.

📌 Problème résolu

Il permet de modéliser visuellement des comportements physiques complexes (dynamique des fluides simplifiée) sans nécessiter de moteurs physiques lourds, en utilisant la vectorisation pour optimiser les calculs de voisinage.

⚙️ SPÉCIFICATIONS TECHNIQUES

🐍 Environnement

Élément Valeur

Version Python 3.x

OS cible Tous (Windows, Linux, MacOS)

Mode d’exécution GUI (Interface Graphique via Matplotlib)

📦 Dépendances / Librairies

Librairies externes (pip install) :

numpy (Calcul matriciel et vectorisation)

matplotlib (Moteur de rendu graphique et animation)

📥 ENTRÉES (INPUTS)

📂 Paramètres de classe (Initialisation)

# Nom Type Obligatoire Description Exemple

1 n_particles int ❌ Non Nombre de points à simuler 50

2 dt float ❌ Non Pas de temps de la simulation 0.1

3 viscosity float ❌ Non Coefficient de frottement interne 0.1

📤 SORTIES (OUTPUTS)

📂 Données en sortie

Type Chemin / Format Description

Rendu Visuel Fenêtre interactive Animation FuncAnimation montrant le mouvement des particules.

🧱 STRUCTURE DU SCRIPT

script_304cvmn_304.py

├── 📌 IMPORTS (numpy, matplotlib)

├── 📌 CLASSE FluidSimulation

│ ├── __init__() → Init. positions, vitesses et limites.

│ └── apply_physics() → Moteur de calcul (forces + collisions).

├── 📌 VISUALISATION (Setup de la figure)

└── 📌 MAIN / ANIMATION (update() + plt.show())

🔧 Détail des fonctions principales

Fonction Paramètres Retour Rôle

apply_physics() Aucun None Calcule les interactions, applique la gravité et gère les rebonds.

update(frame) int tuple Met à jour les données du graphique pour l’animation.

🔄 LOGIQUE / ALGORITHME

ÉTAPE 1 → Calcul des distances relatives entre toutes les particules (Matrice de distance).

ÉTAPE 2 → Application d’un masque de voisinage (Rayon < 1.5). ÉTAPE 3 → Calcul des vecteurs de Répulsion (anti-collision) et de Viscosité (alignement). ÉTAPE 4 → Intégration de la Gravité et mise à jour de la position (pos=pos+vel×dt). ÉTAPE 5 → Vérification des limites du bac (x∈[0,10],y∈[0,10]) avec inversion de vitesse (coefficient -0.5). 🚨 GESTION DES ERREURS Instabilité numérique : Si dt est trop élevé, les particules peuvent traverser les murs ou "exploser". Performance : Le script utilise une boucle for sur N particules, ce qui peut ralentir si N>200. Une vectorisation totale via des matrices 3D NumPy serait préférable pour une grande volumétrie.

✅ CONTRAINTES & RÈGLES MÉTIER

Règle 1 : Les particules perdent 50% de leur énergie cinétique lors d’un impact contre une paroi.

Règle 2 : La force de répulsion est inversement proportionnelle au carré de la distance.

🧪 TESTS ATTENDUS

# Cas de test Entrée Résultat attendu Statut

1 Cas nominal 50 particules Mouvement fluide vers le bas avec accumulation ⬜ À tester

2 Limites du bac Particule à x=11 Rebond immédiat vers l’intérieur (x=10) ⬜ À tester

📝 EXEMPLE D’UTILISATION

▶️ Lancement direct

Bash

python script_304cvmn_304.py

💻 Exemple d’instanciation

Python

sim = FluidSimulation(n_particles=100)

sim.apply_physics() # Calcule un step

print(sim.pos) # Affiche les nouvelles coordonnées

Avis

Il n’y a pas encore d’avis.

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

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