1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#[derive(Clone, Debug, PartialEq)]
pub enum ImtGeometry {
    Line([ImtPoint; 2]),
    Curve([ImtPoint; 3]),
}

#[derive(Clone, Debug, PartialEq)]
pub struct ImtPosition {
    pub x: f32,
    pub y: f32,
}

#[derive(Clone, Debug, PartialEq)]
pub struct ImtPoint {
    pub x: f32,
    pub y: f32,
}

impl ImtPoint {
    pub fn lerp(&self, t: f32, other: &Self) -> Self {
        ImtPoint {
            x: self.x + ((other.x - self.x) * t),
            y: self.y + ((other.y - self.y) * t),
        }
    }

    pub fn dist(&self, other: &Self) -> f32 {
        ((self.x - other.x).powi(2) + (self.y - other.y).powi(2)).sqrt()
    }
}