From a5326b00b44bb15e6906074e53f554792b82e143 Mon Sep 17 00:00:00 2001 From: Hanno Braun Date: Mon, 28 Apr 2025 13:13:43 +0200 Subject: [PATCH] Add `geometry::Circle` --- experiments/2025-03-18/src/geometry/circle.rs | 18 ++++++++++++++++++ experiments/2025-03-18/src/geometry/curve.rs | 11 ++++++++--- experiments/2025-03-18/src/geometry/mod.rs | 5 +++-- 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 experiments/2025-03-18/src/geometry/circle.rs diff --git a/experiments/2025-03-18/src/geometry/circle.rs b/experiments/2025-03-18/src/geometry/circle.rs new file mode 100644 index 000000000..005b4e894 --- /dev/null +++ b/experiments/2025-03-18/src/geometry/circle.rs @@ -0,0 +1,18 @@ +use fj_math::{Point, Vector}; + +pub struct Circle { + pub a: Vector<3>, + pub b: Vector<3>, +} + +impl Circle { + pub fn vector_from_local_point( + &self, + point: impl Into>, + ) -> Vector<3> { + let angle = point.into().t; + let (sin, cos) = angle.sin_cos(); + + self.a * cos + self.b * sin - self.a + } +} diff --git a/experiments/2025-03-18/src/geometry/curve.rs b/experiments/2025-03-18/src/geometry/curve.rs index 551a4a281..cef7464a9 100644 --- a/experiments/2025-03-18/src/geometry/curve.rs +++ b/experiments/2025-03-18/src/geometry/curve.rs @@ -1,7 +1,7 @@ use fj_interop::{CircleApproxParams, Tolerance}; use fj_math::{Point, Transform, Vector}; -use super::Line; +use super::{Circle, Line}; /// # Curve geometry that has a fixed position (is _anchored_) in space /// @@ -104,9 +104,14 @@ impl CurveGeometry for (Point<3>, fj_math::Circle<3>) { } fn point_from_local(&self, point: Point<1>) -> Point<3> { - let (_, circle) = *self; + let (offset, circle) = *self; - circle.point_from_circle_coords(point) + let circle = Circle { + a: circle.a(), + b: circle.b(), + }; + + offset + circle.vector_from_local_point(point) } fn project_point(&self, point: Point<3>) -> Point<1> { diff --git a/experiments/2025-03-18/src/geometry/mod.rs b/experiments/2025-03-18/src/geometry/mod.rs index 5b0c5f88e..c02d50b41 100644 --- a/experiments/2025-03-18/src/geometry/mod.rs +++ b/experiments/2025-03-18/src/geometry/mod.rs @@ -1,3 +1,4 @@ +mod circle; mod curve; mod line; mod sketch; @@ -6,6 +7,6 @@ mod swept_curve; mod tri_mesh; pub use self::{ - curve::AnchoredCurve, line::Line, sketch::Sketch, surface::SurfaceGeometry, - swept_curve::SweptCurve, tri_mesh::ToTriMesh, + circle::Circle, curve::AnchoredCurve, line::Line, sketch::Sketch, + surface::SurfaceGeometry, swept_curve::SweptCurve, tri_mesh::ToTriMesh, };