From d9e568491cd8d4b9d7b79e70506380ae53bcf714 Mon Sep 17 00:00:00 2001 From: CptCaptain Date: Wed, 15 Jul 2020 00:42:23 +0200 Subject: [PATCH] Not really an improvement, but at least not significantly worse... --- src/main.rs | 56 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 16 deletions(-) diff --git a/src/main.rs b/src/main.rs index 891c1be..9cc6611 100644 --- a/src/main.rs +++ b/src/main.rs @@ -126,13 +126,7 @@ impl Object { .map( |obj_pos| { - obj_pos - .iter() - .zip(&this_pos) - .map( - |(obj, this)| - { obj - this } - ).collect() + Object::calc_xy_distances(&this_pos, obj_pos) } ).collect(); for dist in distances { @@ -143,18 +137,48 @@ impl Object { } } + fn calc_xy_distances(this_pos: &Vec, obj_pos: &Vec) -> Vec { + obj_pos + .iter() + .zip(this_pos) + .map( + |(obj, this)| + { obj - this } + ).collect() + } + fn repel(&mut self, obj_pos: &mut Vec>) { let this_pos: Vec = self.get_pos(); - for pos in obj_pos { - let mut dist_vec: Vec = Vec::new(); - for i in 0..2 { - dist_vec.push(this_pos[i] - pos[i]); - } - let amount = calc_amount(&dist_vec); + obj_pos + .iter() + .for_each( + |pos| + { + let dist_vec: Vec = this_pos.iter().zip(pos).map(|(t, p)| {t - p}).collect(); + // let mut dist_vec: Vec = Vec::new(); + // for i in 0..2 { + // dist_vec.push(this_pos[i] - pos[i]); + // } + let amount = calc_amount(&dist_vec); + + self.apply_force_to_self(&dist_vec, amount) + } + ) + // for pos in obj_pos { + // let mut dist_vec: Vec = Vec::new(); + // for i in 0..2 { + // dist_vec.push(this_pos[i] - pos[i]); + // } + // let amount = calc_amount(&dist_vec); + // + // self.apply_force_to_self(&mut dist_vec, amount) + // } + } - for (i, d) in dist_vec.iter().enumerate() { - self.vel[i] += 1.5 * d.min(150.0).max(-150.0) / (amount).max(0.01); - } + fn apply_force_to_self(&mut self, dist_vec: &Vec, amount: f64) { + for (i, d) in dist_vec.iter().enumerate() { + let repel_force = 1.5 * d.min(150.0).max(-150.0) / (amount).max(0.01); + self.vel[i] += repel_force; } }