🔷 INFORMATIONS GÉNÉRALES
Champ Détail
Nom du script script_299cvmn_299.py
Version 1.0.0
Date de création 09/03/2026
Auteur / Demandeur IA Généré (Gemini)
Objectif principal Simulation interactive d’un bras articulé utilisant l’algorithme de cinématique inverse FABRIK avec contraintes angulaires.
🎯 DESCRIPTION FONCTIONNELLE
📌 Que fait ce script ?
Ce script crée une interface graphique interactive (via Pygame) affichant une chaîne cinématique (un bras) qui tente de suivre le curseur de la souris en temps réel. Il simule des articulations complexes avec des limites d’angles pour reproduire un mouvement humain ou robotique réaliste.
📌 Problème résolu
Il résout le problème de la Cinématique Inverse (IK) : calculer les angles et positions de chaque segment d’un bras pour que son extrémité (l’effecteur) atteigne un point précis, tout en respectant des contraintes physiques (longueur fixe des segments et limites de rotation).
⚙️ SPÉCIFICATIONS TECHNIQUES
🐍 Environnement
Élément Valeur
Version Python 3.x
OS cible Tous (Windows, Linux, MacOS)
Mode d’exécution Interface Graphique (GUI)
📦 Dépendances / Librairies
Librairies standard : math
Librairies externes :
pygame (Moteur graphique et gestion des événements)
numpy (Calculs mathématiques et clamping)
📥 ENTRÉES (INPUTS)
# Nom Type Obligatoire Description
1 mouse_pos Vector2 ✅ Oui Position de la souris (cible de l’effecteur)
2 K_PLUS / K_MINUS Key ❌ Non Ajout ou retrait de segments à la volée
3 Right Click Mouse ❌ Non Déplacement de l’origine (l’épaule)
📤 SORTIES (OUTPUTS)
# Nom Type Description
1 Screen Display Rendu visuel 60 FPS du bras articulé
2 reachable bool État interne : la cible est-elle physiquement atteignable ?
🧱 STRUCTURE DU SCRIPT
Plaintext
script_299cvmn_299.py
│
├── 📌 IMPORTS (pygame, numpy, math)
├── 📌 CLASS JOINT (Stocke position et limites [min_angle, max_angle])
├── 📌 CLASS FABRIKCHAIN (Cœur algorithmique de la cinématique inverse)
├── 📌 CLASS RENDERER (Gestion du dessin : capsules, ombres, traînées)
├── 📌 CLASS SIMULATION (Boucle principale et gestion des événements)
└── 📌 MAIN (Initialisation et lancement)
🔧 Détail des fonctions principales
Fonction Paramètres Retour Rôle
solve(target) target: Vector2 bool Exécute l’algorithme FABRIK (Forward/Backward)
constrain_angle() curr, prev, next None Applique les limites de rotation entre 3 joints
draw_capsule() p1, p2, thick, color None Dessine un segment avec effet 3D et ombre
update_trail() joints, color None Génère l’effet de flou de mouvement (motion blur)
🔄 LOGIQUE / ALGORITHME
Vérification de portée : Si la cible est trop loin, le bras s’étend au maximum vers elle.
Backward Pass : On place l’extrémité sur la cible, puis on tire chaque segment vers l’arrière en appliquant les contraintes d’angle.
Forward Pass : On replace la base à son origine fixe, puis on réaligne chaque segment vers l’avant.
Itération : On répète les étapes 2 et 3 jusqu’à ce que l’erreur soit < 1px ou que le nombre max d'itérations soit atteint. 🚨 GESTION DES ERREURS Cible hors de portée : Le script détecte la distance maximale et passe en mode "extension totale" sans planter. Division par zéro : Gérée via l'utilisation de normalize() de Pygame sur les vecteurs. ✅ CONTRAINTES & RÈGLES MÉTIER Règle 1 : L'origine (joint 0) est fixe sauf si déplacée par l'utilisateur. Règle 2 : La distance entre deux joints doit toujours être égale à segment_length. Règle 3 : Les angles sont normalisés entre −π et π. 🧪 TESTS ATTENDUS # Cas de test Entrée Résultat attendu 1 Cible proche Souris à 100px Convergence rapide, bras plié naturellement. 2 Hors portée Souris à 2000px Bras tendu au maximum, couleur passe au rouge. 3 Stress test 20 segments Maintien de la performance (60 FPS). 📝 EXEMPLE D'UTILISATION ▶️ Lancement : Bash python script_299cvmn_299.py Espace : Effacer la traînée. R : Réinitialiser la chaîne. + / - : Changer le nombre de segments.



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