embedded-so3-f32
Représentation et manipulation du groupe de rotation SO(3) via des quaternions unitaires, optimisée pour les systèmes embarqués no_std.
Ce projet garantit des rotations 3D stables, sans blocage de cardan (gimbal lock), sans utilisation de la bibliothèque standard (std) et sans aucune section unsafe.
✨ Caractéristiques
no_std: Conçu pour le bare-metal (Cortex-M, RISC-V, etc.).- Zéro
unsafe: Sécurité mémoire totale garantie par le compilateur Rust. - Stabilité numérique : Ré-normalisation systématique lors des compositions pour éviter la dérive flottante.
- Performance : Formule de Rodrigues pour l'application des rotations (15 multiplications au lieu de 28).
- Robuste : Gestion stricte des erreurs via
So3Error(rejet desNaN,±infet normes nulles).
🚀 Utilisation rapide
Ajoutez à votre Cargo.toml :
[]
= "0.1.0"
Exemple de rotation
use ;
Composition avec l'opérateur *
let s = FRAC_1_SQRT_2;
let r90 = new?; // 90° autour de X
let r180 = ?; // 180° autour de X
let back = ?; // retour à 90°
🛠 API
| Méthode / Constante | Description |
|---|---|
Rotation::new(w, x, y, z) |
Crée une rotation normalisée. Retourne Err si les entrées sont invalides. |
Rotation::IDENTITY |
Constante pour la rotation nulle [1, 0, 0, 0]. |
compose(&other) |
Compose deux rotations : self ∘ other. |
r1 * r2 |
Sucre syntaxique pour compose (par valeur ou par référence). |
rotate_vector([x, y, z]) |
Applique la rotation à un vecteur [f32; 3]. |
inverse() |
Retourne la rotation inverse (conjugué, sans coût de normalisation). |
as_array() |
Retourne les composants bruts sous la forme [w, x, y, z]. |
⚠️ Gestion des erreurs
Toutes les fonctions qui peuvent échouer retournent Result<Rotation, So3Error>.
inverse() et rotate_vector() sont infaillibles car elles opèrent sur des quaternions déjà validés.
⚖️ Licence
Copyright (C) 2026 Jorge Andre Castro
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation, soit la version 2 de la licence, soit (à votre choix) n'importe quelle version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais sans aucune garantie ; sans même la garantie implicite de commercialisation ou d'adéquation à un usage particulier. Voir la Licence Publique Générale GNU pour plus de détails.