Added a readme

This commit is contained in:
Thomas Faour 2025-06-19 23:56:14 -04:00
parent eb40043bbe
commit 82c69b7ae1
2 changed files with 119 additions and 2 deletions

117
README.md Normal file
View File

@ -0,0 +1,117 @@
# 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

View File

@ -49,7 +49,7 @@ impl Simulation {
for i in 0..steps {
debug!("Step: {}", i);
self.reset_accelerations();
self.caclulate_accelerations();
self.calculate_accelerations();
self.step_bodies();
if i % self.steps_per_save == 0 {
//save the state
@ -68,7 +68,7 @@ impl Simulation {
}
}
fn caclulate_accelerations(&mut self) {
fn calculate_accelerations(&mut self) {
let r_hat_over_r3 = self.get_rhat_over_r_three();
let n = self.bodies.len();
for i in 0..(n-1) {