117 lines
2.5 KiB
Markdown
117 lines
2.5 KiB
Markdown
# 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 |