DGtal  1.4.beta
ConvexityHelper.h
1 
17 #pragma once
18 
31 #if defined(ConvexityHelper_RECURSES)
32 #error Recursive header files inclusion detected in ConvexityHelper.h
33 #else // defined(ConvexityHelper_RECURSES)
35 #define ConvexityHelper_RECURSES
36 
37 #if !defined ConvexityHelper_h
39 #define ConvexityHelper_h
40 
42 // Inclusions
43 #include <iostream>
44 #include <string>
45 #include <vector>
46 #include "DGtal/base/Common.h"
47 #include "DGtal/kernel/CInteger.h"
48 #include "DGtal/kernel/SpaceND.h"
49 #include "DGtal/geometry/tools/QuickHull.h"
50 #include "DGtal/geometry/volumes/BoundedLatticePolytope.h"
51 #include "DGtal/geometry/volumes/BoundedRationalPolytope.h"
52 #include "DGtal/geometry/volumes/ConvexCellComplex.h"
53 #include "DGtal/shapes/PolygonalSurface.h"
54 
55 namespace DGtal
56 {
57 
58  namespace detail {
59 
69  template < typename TIntegerCoordinate, bool safe >
71  typedef TIntegerCoordinate Type;
72  };
73 
79  template < >
81 #ifdef WITH_BIGINTEGER
83 #else
84  typedef DGtal::int64_t Type;
85 #endif
86  };
87 
93  template < >
96  };
97 
103  template < >
105 #ifdef WITH_BIGINTEGER
107 #else
108  typedef DGtal::int64_t Type;
109 #endif
110  };
111 
117  template < >
120  };
121 
122 #ifdef WITH_BIGINTEGER
131  template < bool safe >
134  };
135 #endif
136 
137  } // namespace detail
138 
140  // template class ConvexityHelper
161  template < int dim,
162  typename TInteger = DGtal::int32_t,
163  typename TInternalInteger = DGtal::int64_t >
166  // Integer must be a model of the concept CInteger.
168  // Integer must be a model of the concept CInteger.
170 
171  static const Dimension dimension = dim;
172 
173  typedef TInteger Integer;
174  typedef TInternalInteger InternalInteger;
176  typedef typename Space::Point Point;
177  typedef typename Space::Vector Vector;
178  typedef typename Space::RealPoint RealPoint;
179  typedef typename Space::RealVector RealVector;
180  typedef std::size_t Size;
181  typedef std::size_t Index;
182  typedef std::vector< Index > IndexRange;
183  typedef std::vector< Point > PointRange;
194 
195  // ----------------- lattice convex hull services -------------------------
196  public:
199 
217  static
219  computeLatticePolytope( const PointRange& input_points,
220  bool remove_duplicates = true,
221  bool make_minkowski_summable = false );
222 
235  static
236  PointRange
237  computeConvexHullVertices( const PointRange& input_points,
238  bool remove_duplicates = true );
239 
240 
262  template < typename TSurfaceMesh >
263  static
264  bool
265  computeConvexHullBoundary( TSurfaceMesh& mesh,
266  const PointRange& input_points,
267  bool remove_duplicates = true );
268 
286  static
287  bool
289  const PointRange& input_points,
290  bool remove_duplicates = true );
291 
307  static
308  bool
310  const PointRange& input_points,
311  bool remove_duplicates = true );
312 
333  static
335  computeSimplex( const PointRange& input_points,
336  bool remove_duplicates = true );
337 
357  static
360 
379  static
380  PointRange
382 
383 
385 
386  // ----------------- lattice Delaunay services -------------------------
387  public:
390 
407  static
408  bool
410  const PointRange& input_points,
411  bool remove_duplicates = true );
412 
414 
415  // ----------------- rational convex hull services -------------------------
416  public:
419 
441  static
443  computeRationalPolytope( const std::vector< RealPoint >& input_points,
444  Integer denominator,
445  bool remove_duplicates = true,
446  bool make_minkowski_summable = false );
447 
474  template < typename TSurfaceMesh >
475  static
476  bool
477  computeConvexHullBoundary( TSurfaceMesh& mesh,
478  const std::vector< RealPoint >& input_points,
479  double precision = 1024.0,
480  bool remove_duplicates = true );
481 
502  static
503  bool
505  const std::vector< RealPoint >& input_points,
506  double precision = 1024.0,
507  bool remove_duplicates = true );
508 
529  static
530  bool
532  const std::vector< RealPoint >& input_points,
533  double precision = 1024.0,
534  bool remove_duplicates = true );
535 
537 
538 
539  // ----------------- real Delaunay services -------------------------
540  public:
543 
565  static
566  bool
568  const std::vector< RealPoint >& input_points,
569  double precision = 1024.0,
570  bool remove_duplicates = true );
571 
573 
574  // ----------------- utility services -------------------------
575  public:
578 
594  template < typename QHull >
595  static
596  void
597  computeFacetAndRidgeVertices( const QHull& hull,
598  std::vector< IndexRange >& cell_vertices,
599  std::map< typename QHull::Ridge, Index >& r2f,
600  std::vector< IndexRange >& face_vertices );
601 
603 
604  }; // class ConvexityHelper
605 
606 
607 } // namespace DGtal
608 
610 // Includes inline functions.
611 #include "ConvexityHelper.ih"
612 
613 // //
615 
616 #endif // !defined ConvexityHelper_h
617 
618 #undef ConvexityHelper_RECURSES
619 #endif // else defined(ConvexityHelper_RECURSES)
Aim: Represents an nD lattice polytope, i.e. a convex polyhedron bounded with vertices with integer c...
Aim: Represents an nD rational polytope, i.e. a convex polyhedron bounded by vertices with rational c...
Aim: Represents a polygon mesh, i.e. a 2-dimensional combinatorial surface whose faces are (topologic...
DGtal is the top-level namespace which contains all DGtal functions and types.
boost::int64_t int64_t
signed 94-bit integer.
Definition: BasicTypes.h:74
DGtal::uint32_t Dimension
Definition: Common.h:136
boost::int32_t int32_t
signed 32-bit integer.
Definition: BasicTypes.h:72
mpz_class BigInteger
Multi-precision integer with GMP implementation.
Definition: BasicTypes.h:79
Aim: represents a d-dimensional complex in a d-dimensional space with the following properties and re...
Aim: a geometric kernel to compute the convex hull of digital points with integer-only arithmetic.
Aim: a geometric kernel to compute the convex hull of floating points with integer-only arithmetic....
Aim: Provides a set of functions to facilitate the computation of convex hulls and polytopes,...
static PointRange computeConvexHullVertices(const PointRange &input_points, bool remove_duplicates=true)
static bool computeDelaunayCellComplex(ConvexCellComplex< Point > &cell_complex, const PointRange &input_points, bool remove_duplicates=true)
static void computeFacetAndRidgeVertices(const QHull &hull, std::vector< IndexRange > &cell_vertices, std::map< typename QHull::Ridge, Index > &r2f, std::vector< IndexRange > &face_vertices)
TInternalInteger InternalInteger
static bool computeDelaunayCellComplex(ConvexCellComplex< RealPoint > &cell_complex, const std::vector< RealPoint > &input_points, double precision=1024.0, bool remove_duplicates=true)
static bool computeConvexHullBoundary(PolygonalSurface< RealPoint > &polysurf, const std::vector< RealPoint > &input_points, double precision=1024.0, bool remove_duplicates=true)
static LatticePolytope computeSimplex(const PointRange &input_points, bool remove_duplicates=true)
DelaunayIntegralKernel< dim, Integer, InternalInteger > LatticeDelaunayKernel
static PointRange computeDegeneratedConvexHullVertices(PointRange &input_points)
BOOST_CONCEPT_ASSERT((concepts::CInteger< TInteger >))
Space::RealPoint RealPoint
Space::RealVector RealVector
static const Dimension dimension
BoundedRationalPolytope< Space > RationalPolytope
ConvexHullRationalKernel< dim, Integer, InternalInteger > RealConvexHullKernel
static RationalPolytope computeRationalPolytope(const std::vector< RealPoint > &input_points, Integer denominator, bool remove_duplicates=true, bool make_minkowski_summable=false)
static bool computeConvexHullCellComplex(ConvexCellComplex< Point > &cell_complex, const PointRange &input_points, bool remove_duplicates=true)
static LatticePolytope computeDegeneratedLatticePolytope(PointRange &input_points)
static bool computeConvexHullBoundary(PolygonalSurface< Point > &polysurf, const PointRange &input_points, bool remove_duplicates=true)
static bool computeConvexHullBoundary(TSurfaceMesh &mesh, const std::vector< RealPoint > &input_points, double precision=1024.0, bool remove_duplicates=true)
ConvexHullIntegralKernel< dim, Integer, InternalInteger > LatticeConvexHullKernel
std::vector< Index > IndexRange
BOOST_CONCEPT_ASSERT((concepts::CInteger< TInternalInteger >))
static bool computeConvexHullBoundary(TSurfaceMesh &mesh, const PointRange &input_points, bool remove_duplicates=true)
BoundedLatticePolytope< Space > LatticePolytope
DelaunayRationalKernel< dim, Integer, InternalInteger > RealDelaunayKernel
static LatticePolytope computeLatticePolytope(const PointRange &input_points, bool remove_duplicates=true, bool make_minkowski_summable=false)
std::vector< Point > PointRange
static bool computeConvexHullCellComplex(ConvexCellComplex< RealPoint > &cell_complex, const std::vector< RealPoint > &input_points, double precision=1024.0, bool remove_duplicates=true)
SpaceND< dim, Integer > Space
Aim: a geometric kernel to compute the Delaunay triangulation of digital points with integer-only ari...
Aim: a geometric kernel to compute the Delaunay triangulation of a range of floating points with inte...
Aim: Concept checking for Integer Numbers. More precisely, this concept is a refinement of both CEucl...
Definition: CInteger.h:88
unsigned int dim(const Vector &z)