File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/config/TeX-MML-AM_CHTML/MathJax.js
DGtal 2.0.0
DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger > Struct Template Reference

Aim: a geometric kernel to compute the convex hull of digital points with integer-only arithmetic. More...

#include <DGtal/geometry/tools/QuickHullKernels.h>

Inheritance diagram for DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >:
[legend]

Public Types

typedef ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger > Base
Public Types inherited from DGtal::ConvexHullCommonKernel< dim, DGtal::int64_t, DGtal::int64_t >
typedef DGtal::int64_t CoordinateInteger
typedef DGtal::int64_t InternalInteger
typedef CoordinateInteger CoordinateScalar
typedef InternalInteger InternalScalar
typedef DGtal::PointVector< dim, CoordinateIntegerCoordinatePoint
typedef DGtal::PointVector< dim, CoordinateIntegerCoordinateVector
typedef DGtal::PointVector< dim, InternalIntegerInternalPoint
typedef DGtal::PointVector< dim, InternalIntegerInternalVector
typedef std::size_t Size
typedef Size Index
typedef std::vector< IndexIndexRange
typedef std::array< Index, dimCombinatorialPlaneSimplex
typedef IntegerConverter< dim, CoordinateIntegerOuter
 Converter to outer coordinate integers or lattice points / vector.
typedef IntegerConverter< dim, InternalIntegerInner
 Converter to inner internal integers or lattice points / vector.

Public Member Functions

 ConvexHullIntegralKernel ()=default
 Default constructor.
bool hasInfiniteFacets () const
bool isHalfSpaceFacetInfinite (const HalfSpace &hs) const
template<typename InputPoint>
void makeInput (std::vector< CoordinatePoint > &processed_points, IndexRange &input2comp, IndexRange &comp2input, const std::vector< InputPoint > &input_points, bool remove_duplicates)
template<typename OutputPoint>
void convertPointTo (const CoordinatePoint &p, OutputPoint &out_p) const
HalfSpace compute (const std::vector< CoordinatePoint > &vpoints, const CombinatorialPlaneSimplex &simplex, Index idx_below)
HalfSpace compute (const std::vector< CoordinatePoint > &vpoints, const CombinatorialPlaneSimplex &simplex)
CoordinateVector normal (const HalfSpace &H) const
CoordinateScalar intercept (const HalfSpace &H) const
InternalScalar dot (const HalfSpace &H1, const HalfSpace &H2) const
bool equal (const HalfSpace &H1, const HalfSpace &H2) const
InternalScalar height (const HalfSpace &H, const CoordinatePoint &p) const
InternalScalar volume (const HalfSpace &H, const CoordinatePoint &p) const
bool above (const HalfSpace &H, const CoordinatePoint &p) const
bool aboveOrOn (const HalfSpace &H, const CoordinatePoint &p) const
bool on (const HalfSpace &H, const CoordinatePoint &p) const
Public Member Functions inherited from DGtal::ConvexHullCommonKernel< dim, DGtal::int64_t, DGtal::int64_t >
 BOOST_CONCEPT_ASSERT ((concepts::CInteger< DGtal::int64_t >))
 ConvexHullCommonKernel ()=default
 Default constructor.
HalfSpace compute (const std::vector< CoordinatePoint > &vpoints, const CombinatorialPlaneSimplex &simplex, Index idx_below)
CoordinateVector normal (const HalfSpace &H) const
CoordinateScalar intercept (const HalfSpace &H) const
InternalScalar dot (const HalfSpace &H1, const HalfSpace &H2) const
bool equal (const HalfSpace &H1, const HalfSpace &H2) const
InternalScalar height (const HalfSpace &H, const CoordinatePoint &p) const
InternalScalar volume (const HalfSpace &H, const CoordinatePoint &p) const
bool above (const HalfSpace &H, const CoordinatePoint &p) const
bool aboveOrOn (const HalfSpace &H, const CoordinatePoint &p) const
bool on (const HalfSpace &H, const CoordinatePoint &p) const

Static Public Attributes

static const Dimension dimension
Static Public Attributes inherited from DGtal::ConvexHullCommonKernel< dim, DGtal::int64_t, DGtal::int64_t >
static const Dimension dimension

Detailed Description

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
struct DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >

Aim: a geometric kernel to compute the convex hull of digital points with integer-only arithmetic.

Description of template class 'ConvexHullIntegralKernel'

See also
QuickHull algorithm in arbitrary dimension for convex hull and Delaunay cell complex computation
Template Parameters
dimthe dimension of the space of processed points.
TCoordinateIntegerthe integer type that represents coordinates of lattice points, a model of concepts::CInteger.
TInternalIntegerthe integer type that is used for internal computations of above/below plane tests, a model of concepts::CInteger. Must be at least as precise as TCoordinateInteger.
Examples
geometry/tools/checkLatticeBallQuickHull.cpp.

Definition at line 375 of file QuickHullKernels.h.

Member Typedef Documentation

◆ Base

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
typedef ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger > DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::Base

Definition at line 378 of file QuickHullKernels.h.

Constructor & Destructor Documentation

◆ ConvexHullIntegralKernel()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::ConvexHullIntegralKernel ( )
default

Default constructor.

Member Function Documentation

◆ above()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::above ( const HalfSpace & H,
const CoordinatePoint & p ) const
inline
Parameters
Hthe half-space
pany point
Returns
'true' iff p is strictly above this plane (so in direction N ).

Definition at line 333 of file QuickHullKernels.h.

334 { return height( H, p ) > 0; }
Aim: a geometric kernel to compute the convex hull of digital points with integer-only arithmetic.
InternalScalar height(const HalfSpace &H, const CoordinatePoint &p) const

◆ aboveOrOn()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::aboveOrOn ( const HalfSpace & H,
const CoordinatePoint & p ) const
inline
Parameters
Hthe half-space
pany point
Returns
'true' iff p is above or lies on this plane (so in direction N ).

Definition at line 339 of file QuickHullKernels.h.

340 { return height( H, p ) >= 0; }

◆ compute() [1/2]

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
HalfSpace DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::compute ( const std::vector< CoordinatePoint > & vpoints,
const CombinatorialPlaneSimplex & simplex )
inline

Computes an halfspace from dimension points specified by simplex with vertices in a range vpoints of Point. Orientation is induced by the order of the points. If the simplex is degenrated, the half-space is invalid and has null normal.

Parameters
[in]vpointsa range of points over which the simplex is defined.
[in]simplexa range of dimension indices of points defining an hyperplane.
Returns
the corresponding halfspace (has null normal vector if simplex was not full dimensional)

Definition at line 257 of file QuickHullKernels.h.

259 {
261 Matrix A;
263 for ( Dimension i = 1; i < dimension; i++ )
264 for ( Dimension j = 0; j < dimension; j++ )
265 A.setComponent( i-1, j,
266 Inner::cast( vpoints[ simplex[ i ] ][ j ]
267 - vpoints[ simplex[ 0 ] ][ j ] ) );
268 for ( Dimension j = 0; j < dimension; j++ )
269 N[ j ] = A.cofactor( dimension-1, j );
270 const InternalPoint ip = Inner::cast( vpoints[ simplex[ 0 ] ] );
271 // c = N.dot( vpoints[ simplex[ 0 ] ] );
272 return HalfSpace { N, N.dot( ip ) };
273 }
InternalScalar dot(const HalfSpace &H1, const HalfSpace &H2) const
static const Dimension dimension

◆ compute() [2/2]

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
HalfSpace DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::compute ( const std::vector< CoordinatePoint > & vpoints,
const CombinatorialPlaneSimplex & simplex,
Index idx_below )
inline

Computes an halfspace from dimension points specified by simplex with vertices in a range vpoints of Point. It is oriented such that the point of index idx_below is included in the half-space (i.e. below).

Parameters
[in]vpointsa range of points over which the simplex is defined.
[in]simplexa range of dimension indices of points defining an hyperplane.
[in]idx_belowthe index of a p-oint that is below the hyperplane.
Returns
the corresponding halfspace (has null normal vector if simplex was not full dimensional)

Definition at line 230 of file QuickHullKernels.h.

233 {
234 HalfSpace hs = compute( vpoints, simplex );
235 if ( hs.N != InternalVector::zero )
236 {
238 const InternalScalar nu = hs.N.dot( ip );
239 //const Scalar nu = hs.N.dot( vpoints[ idx_below ] );
240 if ( nu > hs.c ) { hs.N = -hs.N; hs.c = -hs.c; }
241 }
242 return hs;
243 }
HalfSpace compute(const std::vector< CoordinatePoint > &vpoints, const CombinatorialPlaneSimplex &simplex, Index idx_below)

◆ convertPointTo()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
template<typename OutputPoint>
void DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::convertPointTo ( const CoordinatePoint & p,
OutputPoint & out_p ) const
inline
Template Parameters
OutputPointa model of point such that processing type Point is convertible to it.

Definition at line 473 of file QuickHullKernels.h.

474 {
475 for ( Dimension k = 0; k < dimension; k++ )
476 out_p[ k ] = static_cast<typename OutputPoint::Component>(p[ k ]);
477 }

◆ dot()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
InternalScalar DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::dot ( const HalfSpace & H1,
const HalfSpace & H2 ) const
inline

Equivalent of the dot product of the normals of the half-spaces.

Parameters
H1an half-space
H2an half-space
Returns
a positive scalar if both half-spaces points to to the same hemisphere, a negative scalar if they point to opposite hemispheres, and zero if they are orthogonal.

Definition at line 297 of file QuickHullKernels.h.

298 {
299 return H1.N.dot( H2.N );
300 }

◆ equal()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::equal ( const HalfSpace & H1,
const HalfSpace & H2 ) const
inline
Parameters
H1an half-space
H2an half-space
Returns
'true' if the half-spaces have the smae members.
Note
two half-spaces may be not equal but may represent the same set of points. For instance H1={{1,0},3} and H1={{2,0},6}.

Definition at line 310 of file QuickHullKernels.h.

311 {
312 return H1.c == H2.c && H1.N == H2.N;
313 }

◆ hasInfiniteFacets()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::hasInfiniteFacets ( ) const
inline
Returns
'true' if a kernel may induce infinite facets. This is typically the case of a Delaunay computation kernel, which casts points in higher dimension.

Definition at line 414 of file QuickHullKernels.h.

415 { return false; }

◆ height()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
InternalScalar DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::height ( const HalfSpace & H,
const CoordinatePoint & p ) const
inline
Parameters
Hthe half-space
pany point
Returns
the (signed) height of p wrt this plane.

Definition at line 318 of file QuickHullKernels.h.

319 { return H.N.dot( Inner::cast( p ) ) - H.c; }

◆ intercept()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
CoordinateScalar DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::intercept ( const HalfSpace & H) const
inline
Parameters
Hthe half-space
Returns
the intercept of this facet.

Definition at line 284 of file QuickHullKernels.h.

285 {
286 return Outer::cast( H.c );
287 }

◆ isHalfSpaceFacetInfinite()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::isHalfSpaceFacetInfinite ( const HalfSpace & hs) const
inline
Parameters
[in]hsan half-space corresponding to a facet.
Returns
'true' if the facet associated to this half-space corresponds to an infinite facet.

Definition at line 421 of file QuickHullKernels.h.

422 {
423 (void) hs; // unused parameter
424 return false;
425 }

◆ makeInput()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
template<typename InputPoint>
void DGtal::ConvexHullIntegralKernel< dim, TCoordinateInteger, TInternalInteger >::makeInput ( std::vector< CoordinatePoint > & processed_points,
IndexRange & input2comp,
IndexRange & comp2input,
const std::vector< InputPoint > & input_points,
bool remove_duplicates )
inline

Transforms a range input_points of input points to a range processed_points of points adapted to a processing by QuickHull convex hull algorithm. Keep the mapping information between input and processed points.

Template Parameters
InputPointany model of point whose components are convertible to Scalar.
Parameters
[out]processed_pointsthe range of points prepared for a process by QuickHull.
[out]input2compthe surjective mapping between the input_points range and the processed_points range used for computation.
[out]comp2inputthe injective mapping between the processed_points range used for computation and the input_points range.
[in]input_pointsthe range of input points.
[in]remove_duplicateswhen 'true', this method removes possible duplicates in input_points and processed_points may thus be of smaller size, otherwise, when 'false', it means that there are no duplicates in input_points.

Definition at line 453 of file QuickHullKernels.h.

457 {
458 const auto F = [&] ( InputPoint input ) -> CoordinatePoint
459 {
461 for ( Dimension i = 0; i < dimension; i++ )
462 p[ i ] = CoordinateScalar( input[ i ] );
463 return p;
464 };
466 input_points.cbegin(), input_points.cend(),
468 }
void transform(std::vector< OutputValue > &output_values, std::vector< std::size_t > &input2output, std::vector< std::size_t > &output2input, ForwardIterator itb, ForwardIterator ite, const ConversionFct &F, bool remove_duplicates)

◆ normal()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
CoordinateVector DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::normal ( const HalfSpace & H) const
inline
Parameters
Hthe half-space
Returns
the normal to this facet.

Definition at line 277 of file QuickHullKernels.h.

278 {
279 return Outer::cast( H.N );
280 }

◆ on()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
bool DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::on ( const HalfSpace & H,
const CoordinatePoint & p ) const
inline
Parameters
Hthe half-space
pany point
Returns
'true' iff p lies on this plane.

Definition at line 345 of file QuickHullKernels.h.

346 { return height( H, p ) == 0; }

◆ volume()

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
InternalScalar DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::volume ( const HalfSpace & H,
const CoordinatePoint & p ) const
inline
Parameters
Hthe half-space
pany point
Returns
the volume of the vectors spanned by the simplex and this point.

Definition at line 324 of file QuickHullKernels.h.

325 {
326 InternalScalar v = height( H, p );
327 return v < InternalScalar( 0 ) ? -v : v;
328 }

Field Documentation

◆ dimension

template<Dimension dim, typename TCoordinateInteger = DGtal::int64_t, typename TInternalInteger = DGtal::int64_t>
const Dimension DGtal::ConvexHullCommonKernel< dim, TCoordinateInteger, TInternalInteger >::dimension
static

Definition at line 196 of file QuickHullKernels.h.


The documentation for this struct was generated from the following file: