use crate::point::Point; pub struct Line<'a> { p1: &'a Point, p2: &'a Point, } impl<'a> Line<'a> { pub fn new(p1: &'a Point, p2: &'a Point) -> Self { Self { p1, p2 } } pub fn vec(&self) -> Point { Point::new(self.p2.x - self.p1.x, self.p2.y - self.p1.y) } pub fn angle_between(&self, other: &Self) -> f64 { let v1 = self.vec(); let v2 = other.vec(); (v1.dot(&v2) / (v1.mag() * v2.mag())).acos() } }