update deps; tweak constants
This commit is contained in:
parent
57e28360a0
commit
de5f28b4f7
4 changed files with 101 additions and 55 deletions
33
src/link.rs
33
src/link.rs
|
|
@ -1,36 +1,35 @@
|
|||
use crate::particle::Particle;
|
||||
use std::rc::Rc;
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct Link {
|
||||
p1: Rc<RefCell<Particle>>,
|
||||
p2: Rc<RefCell<Particle>>,
|
||||
length: f32
|
||||
length: f32,
|
||||
}
|
||||
|
||||
impl Link {
|
||||
pub fn new(p1: Rc<RefCell<Particle>>, p2: Rc<RefCell<Particle>>, length: f32) -> Self {
|
||||
Link {
|
||||
p1: p1,
|
||||
p2: p2,
|
||||
length: length
|
||||
}
|
||||
Link { p1, p2, length }
|
||||
}
|
||||
|
||||
pub fn solve(&mut self) {
|
||||
let vec = self.p2.borrow().pos - self.p1.borrow().pos;
|
||||
let vec_len = (vec.x*vec.x + vec.y*vec.y).sqrt();
|
||||
let vec_norm = vec/vec_len;
|
||||
let vec_len = (vec.x * vec.x + vec.y * vec.y).sqrt();
|
||||
|
||||
let max_stretch = 50.;
|
||||
let clamped_len = vec_len.min(self.length + max_stretch);
|
||||
if vec_len > self.length {
|
||||
let vec_norm = vec / vec_len;
|
||||
|
||||
let displacement = clamped_len - vec_len;
|
||||
let stiffness = 99.;
|
||||
let vec_scaled = vec_norm * displacement * stiffness;
|
||||
let max_stretch = 0.5;
|
||||
let clamped_len = vec_len.min(self.length + max_stretch);
|
||||
|
||||
let damping = 0.98;
|
||||
self.p1.borrow_mut().apply_force(-vec_scaled * damping);
|
||||
self.p2.borrow_mut().apply_force(vec_scaled * damping);
|
||||
let displacement = clamped_len - vec_len;
|
||||
let stiffness = 999.;
|
||||
let vec_scaled = vec_norm * displacement * stiffness;
|
||||
|
||||
let damping = 0.99;
|
||||
self.p1.borrow_mut().apply_force(-vec_scaled * damping);
|
||||
self.p2.borrow_mut().apply_force(vec_scaled * damping);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue