diff options
author | eug-vs <eugene@eug-vs.xyz> | 2024-12-14 18:35:30 +0100 |
---|---|---|
committer | eug-vs <eugene@eug-vs.xyz> | 2024-12-14 18:35:30 +0100 |
commit | bd9424635e997ce70504b564a3561506ee6d51df (patch) | |
tree | 57f22bf9a98798eb71ba365832023a63b32739fa /src/algebra/line.rs | |
parent | 969507fed807e01b876b05fe0cd00a0e143e9a0d (diff) | |
download | particle-physics-bd9424635e997ce70504b564a3561506ee6d51df.tar.gz |
refactor: add Line struct
Diffstat (limited to 'src/algebra/line.rs')
-rw-r--r-- | src/algebra/line.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/algebra/line.rs b/src/algebra/line.rs new file mode 100644 index 0000000..45733b9 --- /dev/null +++ b/src/algebra/line.rs @@ -0,0 +1,24 @@ +use crate::{particle_system::Scalar, Point, Vector}; + +pub struct Line { + pub point: Point, + + /// Has to be normalized + pub vector: Vector, +} + +impl Line { + pub fn new(point: Point, vector: Vector) -> Self { + Self { + point, + vector: vector.normalize(), + } + } + + pub fn distance_to_point(&self, point: Point) -> Scalar { + let diff = point - self.point; + let lambda = diff.dot(&self.vector); + + (diff - lambda * self.vector).norm() + } +} |