Trait spade::kernels::DelaunayKernel
source · pub trait DelaunayKernel<D: SpadeNum>: Sized + Clone {
fn contained_in_circumference<V: TwoDimensional<Scalar = D>>(
pa: &V,
pb: &V,
pc: &V,
pd: &V
) -> bool { ... }
fn side_query<Ve: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<Ve>,
position: &Ve
) -> EdgeSideInfo<D> { ... }
fn is_ordered_ccw<V: TwoDimensional<Scalar = D>>(
v0: &V,
v1: &V,
v2: &V
) -> bool { ... }
fn point_on_edge<V: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<V>,
position: &V
) -> bool { ... }
}
Expand description
Determines how a delaunay triangulation performs its basic geometry computations.
Every delaunay triangulation is based on two basic geometry operations: orientation tests (on which side of a line lies a point?) and in-circle tests (is a point contained in the circumference of a triangle?). These questions can be answered approximately or precisely, their calculation can or cannot take overflow issues for integer coordinates into account.
Since each application has different needs, a DelaunayKernel
will define how these geometric
queries are calculated for a triangulation. It is recommended to use one of the predefined
kernels that fits your needs.
Provided Methods
sourcefn contained_in_circumference<V: TwoDimensional<Scalar = D>>(
pa: &V,
pb: &V,
pc: &V,
pd: &V
) -> bool
fn contained_in_circumference<V: TwoDimensional<Scalar = D>>(
pa: &V,
pb: &V,
pc: &V,
pd: &V
) -> bool
Returns true if pd is contained in the circumference of the triangle spanned by pa, pb, pc.
pa, pb, pc have to be ordered clockwise, otherwise the result is inverted.
sourcefn side_query<Ve: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<Ve>,
position: &Ve
) -> EdgeSideInfo<D>
fn side_query<Ve: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<Ve>,
position: &Ve
) -> EdgeSideInfo<D>
Returns an EdgeSideInfo
yielding on which side of a line a point lies.
sourcefn is_ordered_ccw<V: TwoDimensional<Scalar = D>>(v0: &V, v1: &V, v2: &V) -> bool
fn is_ordered_ccw<V: TwoDimensional<Scalar = D>>(v0: &V, v1: &V, v2: &V) -> bool
Another formulation of side_query
, will return true
if v0
, v1
and v2
are ordered
counterclockwise.
sourcefn point_on_edge<V: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<V>,
position: &V
) -> bool
fn point_on_edge<V: TwoDimensional<Scalar = D>>(
edge: &SimpleEdge<V>,
position: &V
) -> bool
Returns true
if a point lies on the infinite edge going through
edge.from
and edge.to
.