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))