summaryrefslogtreecommitdiff
path: root/physics/src/solver/midpoint.rs
diff options
context:
space:
mode:
authoreug-vs <eugene@eug-vs.xyz>2024-12-15 13:17:43 +0100
committereug-vs <eugene@eug-vs.xyz>2024-12-15 13:17:43 +0100
commit70afc5a7d871919776a64782e8b93404e6b0defd (patch)
treec3d8a273bddf4cbc3c55d06c751766b93b961a1f /physics/src/solver/midpoint.rs
parent297efa5127e83bea57132c503680dd348a725db5 (diff)
downloadparticle-physics-70afc5a7d871919776a64782e8b93404e6b0defd.tar.gz
feat!: add raylib rendering
Diffstat (limited to 'physics/src/solver/midpoint.rs')
-rw-r--r--physics/src/solver/midpoint.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/physics/src/solver/midpoint.rs b/physics/src/solver/midpoint.rs
new file mode 100644
index 0000000..2d71758
--- /dev/null
+++ b/physics/src/solver/midpoint.rs
@@ -0,0 +1,18 @@
+use crate::{algebra::Scalar, particle_system::ParticleSystem};
+use super::{PhaseSpace, Solver};
+
+impl Solver for ParticleSystem {
+ fn step(&mut self, dt: Scalar) {
+ let mut state = self.collect_phase_space();
+
+ // Shift to the midpoint
+ self.scatter_phase_space(&PhaseSpace {
+ 0: state.0.clone() + self.compute_derivative().0 * dt / 2.0,
+ });
+
+ state.0 += self.compute_derivative().0 * dt;
+ self.scatter_phase_space(&state);
+
+ self.t += dt;
+ }
+}