drew-physics 0.1.0

Moteur de simulation physique 2D agnostique, no_std, sans allocation et optimisé f32
Documentation
  • Coverage
  • 100%
    29 out of 29 items documented0 out of 13 items with examples
  • Size
  • Source code size: 20.02 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 370.26 kB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 28s Average build duration of successful builds.
  • all releases: 28s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • jorgeandrecastro/drew-physics
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • jorgeandrecastro

drew-physics

Crates.io Downloads docs.rs License

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 :

[dependencies]
drew-physics = "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 drew_physics::{Body, Vec2, World, WorldSettings};

// Configuration des paramètres environnementaux
let settings = WorldSettings {
    gravity: Vec2::new(0.0, 9.81),
    viscosity: 0.05,
    bounds_min: Vec2::ZERO,
    bounds_max: Vec2::new(800.0, 600.0),
};

// Instanciation d'un monde d'une capacité maximale de 10 corps
let mut world = World::<10>::new(settings);

// Ajout d'un corps dynamique (masse = 1.0, rayon = 5.0)
let mut body = Body::new(Vec2::new(100.0, 100.0), 1.0, 5.0);
body.velocity = Vec2::new(50.0, 0.0);

world.add_body(body).expect("Capacité du monde atteinte");

// Avancement de la simulation d'un pas de temps (dt = 16ms)
world.step(0.016);

Corps statiques et forces appliquées

Pour créer un corps statique (immobile et insensible à la gravité), passez une masse de 0.0 :

use drew_physics::{Body, Vec2};

// Corps immobile de rayon 10.0
let static_body = Body::new(Vec2::new(400.0, 300.0), 0.0, 10.0);

// Pour un corps dynamique, vous pouvez aussi appliquer des impulsions ponctuelles
let mut dynamic_body = Body::new(Vec2::new(100.0, 100.0), 2.0, 5.0);
dynamic_body.apply_force(Vec2::new(10.0, -50.0));

Exemple complet

Pour lancer la démonstration en ligne de commande :


cargo run --example demo

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