# Orbital Simulator A fast N-body orbital mechanics simulator written in Rust. Simulate the motion of celestial bodies under Newtonian gravity, with easy configuration and efficient output for visualization. --- ## Features - **N-body simulation** - **Configurable initial conditions** via JSON - **Binary trajectory files** - **Progress bar** - **Unit normalization** - **Ready for visualization** (Coming Soon) --- ## Getting Started ### Prerequisites - [Rust](https://www.rust-lang.org/tools/install) (edition 2021 or later) - Python (optional, for animation/visualization) ### Build ```bash cargo build --release ``` ### Run ```bash cargo run --release -- \ --config path/to/your_config.json \ --time 30d \ --step-size 10.0 \ --output-file trajectory.bin ``` **Arguments:** - `--config` (required): Path to your JSON config file with initial body states. - `--time` (required): Total simulation time (e.g. `10s`, `5m`, `2h`, `100d`). - `--step-size`: Simulation step size in seconds (default: `10.0`). - `--output-file` (required): Where to save the trajectory data. - `--steps-per-save`: How often to update the progress bar and save (default: `1000`). --- ## Configuration The config file is a JSON file describing the initial state of each body. Examples provided in config/ ```json { "bodies": [ { "name": "BodyName", "mass": 1e10, //kg "position": [0.0, 0.0, 0.0], //meters "velocity": [0.0, 0.0, 0.0] // m/s }, ... ] } ``` - **Units:** - Mass: kilograms (kg) - Position: meters (m) - Velocity: meters per second (m/s) --- ## Output - The simulator writes binary snapshots of the system state to the output file using [bincode](https://docs.rs/bincode/). - Each snapshot contains the simulation time and the real (de-normalized) positions, velocities, and masses of all bodies. --- ## Animation Coming soon. --- ## Extending - Add more bodies or change initial conditions in the config file. - Adjust step size and simulation time for accuracy/performance trade-offs. - The code is modular and ready for extension (e.g., new force laws, output formats, or integrators). --- ## License MIT License --- ## Acknowledgments - [Rust](https://www.rust-lang.org/) - [glam](https://crates.io/crates/glam) for fast vector math - [clap](https://crates.io/crates/clap) for CLI parsing - [indicatif](https://crates.io/crates/indicatif) for progress bars - [serde](https://crates.io/crates/serde) and [bincode](https://crates.io/crates/bincode) for serialization --- ## Author - Thomas Faour