diff --git a/experiments/2025-03-18/src/extra/triangulate.rs b/experiments/2025-03-18/src/extra/triangulate.rs index fe597e60d..9183afb1b 100644 --- a/experiments/2025-03-18/src/extra/triangulate.rs +++ b/experiments/2025-03-18/src/extra/triangulate.rs @@ -91,8 +91,18 @@ fn approximate_half_edge( end_vertex: end, }: HalfEdgeWithEndVertex, ) -> Vec> { - let [start, _] = [&half_edge.start, end].map(|vertex| vertex.point); - vec![start] + let [start, end] = [&half_edge.start, end].map(|vertex| vertex.point); + + let points_local = half_edge.curve.geometry.approximate([start, end].map( + |point_global| half_edge.curve.geometry.project_point(point_global), + )); + + let mut points_global = vec![start]; + points_global.extend(points_local.into_iter().map(|point_local| { + half_edge.curve.geometry.point_from_local(point_local) + })); + + points_global } fn polygon_from_half_edges( diff --git a/experiments/2025-03-18/src/geometry/curve.rs b/experiments/2025-03-18/src/geometry/curve.rs index 462efd756..b984a2df8 100644 --- a/experiments/2025-03-18/src/geometry/curve.rs +++ b/experiments/2025-03-18/src/geometry/curve.rs @@ -5,6 +5,7 @@ pub trait CurveGeometry { fn point_from_local(&self, point: Point<1>) -> Point<3>; fn project_point(&self, point: Point<3>) -> Point<1>; fn translate(&self, offset: Vector<3>) -> Box; + fn approximate(&self, boundary: [Point<1>; 2]) -> Vec>; } impl CurveGeometry for Line<3> { @@ -24,4 +25,8 @@ impl CurveGeometry for Line<3> { let translated = self.transform(&Transform::translation(offset)); Box::new(translated) } + + fn approximate(&self, _: [Point<1>; 2]) -> Vec> { + vec![] + } }