src/fe_model/p2_local_model.rs

changeset 90
b3c35d16affe
parent 63
f7b87d84864d
child 86
d5b0e496b72f
equal deleted inserted replaced
25:d14c877e14b7 90:b3c35d16affe
4 4
5 use crate::types::*; 5 use crate::types::*;
6 use crate::loc::Loc; 6 use crate::loc::Loc;
7 use crate::sets::{Set,NPolygon,SpannedHalfspace}; 7 use crate::sets::{Set,NPolygon,SpannedHalfspace};
8 use crate::linsolve::*; 8 use crate::linsolve::*;
9 use crate::euclidean::Dot; 9 use crate::euclidean::Euclidean;
10 use crate::instance::Instance;
10 use super::base::{LocalModel,RealLocalModel}; 11 use super::base::{LocalModel,RealLocalModel};
11 use crate::sets::Cube; 12 use crate::sets::Cube;
12 use numeric_literals::replace_float_literals; 13 use numeric_literals::replace_float_literals;
13 14
14 /// Type for simplices of arbitrary dimension `N`. 15 /// Type for simplices of arbitrary dimension `N`.
28 (a+b)/2.0 29 (a+b)/2.0
29 } 30 }
30 31
31 impl<'a, F : Float> Set<Loc<F,1>> for RealInterval<F> { 32 impl<'a, F : Float> Set<Loc<F,1>> for RealInterval<F> {
32 #[inline] 33 #[inline]
33 fn contains(&self, &Loc([x]) : &Loc<F,1>) -> bool { 34 fn contains<I : Instance<Loc<F, 1>>>(&self, z : I) -> bool {
35 let &Loc([x]) = z.ref_instance();
34 let &[Loc([x0]), Loc([x1])] = &self.0; 36 let &[Loc([x0]), Loc([x1])] = &self.0;
35 (x0 < x && x < x1) || (x1 < x && x < x0) 37 (x0 < x && x < x1) || (x1 < x && x < x0)
36 } 38 }
37 } 39 }
38 40
39 impl<'a, F : Float> Set<Loc<F,2>> for PlanarSimplex<F> { 41 impl<'a, F : Float> Set<Loc<F,2>> for PlanarSimplex<F> {
40 #[inline] 42 #[inline]
41 fn contains(&self, x : &Loc<F,2>) -> bool { 43 fn contains<I : Instance<Loc<F, 2>>>(&self, z : I) -> bool {
42 let &[x0, x1, x2] = &self.0; 44 let &[x0, x1, x2] = &self.0;
43 NPolygon([[x0, x1].spanned_halfspace(), 45 NPolygon([[x0, x1].spanned_halfspace(),
44 [x1, x2].spanned_halfspace(), 46 [x1, x2].spanned_halfspace(),
45 [x2, x0].spanned_halfspace()]).contains(x) 47 [x2, x0].spanned_halfspace()]).contains(z)
46 } 48 }
47 } 49 }
48 50
49 trait P2Powers { 51 trait P2Powers {
50 type Output; 52 type Output;

mercurial