Added a readme
This commit is contained in:
parent
eb40043bbe
commit
82c69b7ae1
117
README.md
Normal file
117
README.md
Normal 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
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user