DGtal 1.3.0
Loading...
Searching...
No Matches
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
55namespace 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;
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
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
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
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:137
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