drew-physics
Moteur de simulation physique 2D agnostique, déterministe, sans allocation et optimisé f32, conçu pour les environnements contraints ou embarqués (#![no_std]).
Les quatre piliers du moteur
| Composant | Rôle | Caractéristiques |
|---|---|---|
| Stockage statique | Gestion des corps sans allocation mémoire (heap) |
Utilise un tableau à taille fixe générique [Option<Body>; N] |
| Intégration numérique | Calcul des trajectoires vitesse et position | Euler semi-implicite pour une meilleure stabilité dynamique |
| Gestion des bordures | Détection et résolution des collisions | Rebond calculé automatiquement selon la restitution du corps |
| Forces environnementales | Application des contraintes globales | Prise en charge de la gravité et de la viscosité (frottement du milieu) |
Installation
Ajoutez ceci à votre fichier Cargo.toml :
[]
= "0.1"
Aucune dépendance externe : la bibliothèque est 100% autonome et compatible avec toutes les cibles #![no_std].
Utilisation
Initialisation et boucle de simulation
use ;
// Configuration des paramètres environnementaux
let settings = WorldSettings ;
// Instanciation d'un monde d'une capacité maximale de 10 corps
let mut world = new;
// Ajout d'un corps dynamique (masse = 1.0, rayon = 5.0)
let mut body = new;
body.velocity = new;
world.add_body.expect;
// Avancement de la simulation d'un pas de temps (dt = 16ms)
world.step;
Corps statiques et forces appliquées
Pour créer un corps statique (immobile et insensible à la gravité), passez une masse de 0.0 :
use ;
// Corps immobile de rayon 10.0
let static_body = new;
// Pour un corps dynamique, vous pouvez aussi appliquer des impulsions ponctuelles
let mut dynamic_body = new;
dynamic_body.apply_force;
Exemple complet
Pour lancer la démonstration en ligne de commande :
Historique des versions
0.1.0 : Version initiale : support #![no_std], intégration d'Euler semi-implicite, frottement visqueux, limites de boîte et gestion des corps statiques et dynamiques.
Licence
GPL-2.0-or-later
Copyright (C) 2026 Jorge Andre Castro