diff -r 0a689881b0f1 -r 8264d72aa347 src/sets.rs --- a/src/sets.rs Mon May 12 16:28:50 2025 -0500 +++ b/src/sets.rs Mon May 12 17:10:39 2025 -0500 @@ -72,22 +72,20 @@ /// The halfspace is $H = \\{ t v + a \mid a^⊤ v = 0 \\}$, where $v$ is the orthogonal /// vector and $t$ the offset. #[derive(Clone, Copy, Debug, Serialize, Eq, PartialEq)] -pub struct Halfspace +pub struct Halfspace where - A: Euclidean, - F: Float, + A: Euclidean, { pub orthogonal: A, - pub offset: F, + pub offset: A::Field, } -impl Halfspace +impl Halfspace where - A: Euclidean, - F: Float, + A: Euclidean, { #[inline] - pub fn new(orthogonal: A, offset: F) -> Self { + pub fn new(orthogonal: A, offset: A::Field) -> Self { Halfspace { orthogonal: orthogonal, offset: offset, @@ -96,29 +94,26 @@ } /// Trait for generating a halfspace spanned by another set `Self` of elements of type `U`. -pub trait SpannedHalfspace -where - F: Float, -{ +pub trait SpannedHalfspace { /// Type of the orthogonal vector describing the halfspace. - type A: Euclidean; + type A: Euclidean; /// Returns the halfspace spanned by this set. - fn spanned_halfspace(&self) -> Halfspace; + fn spanned_halfspace(&self) -> Halfspace; } // TODO: Gram-Schmidt for higher N. -impl SpannedHalfspace for [Loc<1, F>; 2] { +impl SpannedHalfspace for [Loc<1, F>; 2] { type A = Loc<1, F>; - fn spanned_halfspace(&self) -> Halfspace { + fn spanned_halfspace(&self) -> Halfspace { let (x0, x1) = (self[0], self[1]); Halfspace::new(x1 - x0, x0[0]) } } // TODO: Gram-Schmidt for higher N. -impl SpannedHalfspace for [Loc<2, F>; 2] { +impl SpannedHalfspace for [Loc<2, F>; 2] { type A = Loc<2, F>; - fn spanned_halfspace(&self) -> Halfspace { + fn spanned_halfspace(&self) -> Halfspace { let (x0, x1) = (&self[0], &self[1]); let d = x1 - x0; let orthog = loc![d[1], -d[0]]; // We don't normalise for efficiency @@ -127,10 +122,9 @@ } } -impl Set for Halfspace +impl Set for Halfspace where - A: Euclidean, - F: Float, + A: Euclidean, { #[inline] fn contains>(&self, item: I) -> bool { @@ -139,17 +133,10 @@ } /// Polygons defined by `N` `Halfspace`s. -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub struct NPolygon(pub [Halfspace; N]) -where - A: Euclidean, - F: Float; +#[derive(Clone, Copy, Debug, PartialEq)] +pub struct NPolygon(pub [Halfspace; N]); -impl Set for NPolygon -where - A: Euclidean, - F: Float, -{ +impl Set for NPolygon { fn contains>(&self, item: I) -> bool { let r = item.ref_instance(); self.0.iter().all(|halfspace| halfspace.contains(r))