summaryrefslogtreecommitdiff
path: root/src/algebra
diff options
context:
space:
mode:
authoreug-vs <eugene@eug-vs.xyz>2024-12-14 18:35:30 +0100
committereug-vs <eugene@eug-vs.xyz>2024-12-14 18:35:30 +0100
commitbd9424635e997ce70504b564a3561506ee6d51df (patch)
tree57f22bf9a98798eb71ba365832023a63b32739fa /src/algebra
parent969507fed807e01b876b05fe0cd00a0e143e9a0d (diff)
downloadparticle-physics-bd9424635e997ce70504b564a3561506ee6d51df.tar.gz
refactor: add Line struct
Diffstat (limited to 'src/algebra')
-rw-r--r--src/algebra/line.rs24
-rw-r--r--src/algebra/mod.rs2
-rw-r--r--src/algebra/plane.rs6
3 files changed, 32 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()
+ }
+}
diff --git a/src/algebra/mod.rs b/src/algebra/mod.rs
new file mode 100644
index 0000000..884ccfc
--- /dev/null
+++ b/src/algebra/mod.rs
@@ -0,0 +1,2 @@
+pub mod plane;
+pub mod line;
diff --git a/src/algebra/plane.rs b/src/algebra/plane.rs
new file mode 100644
index 0000000..e82c843
--- /dev/null
+++ b/src/algebra/plane.rs
@@ -0,0 +1,6 @@
+use crate::{Point, Vector};
+
+pub struct Plane {
+ point: Point,
+ vectors: [Vector; 2],
+}