Loading [MathJax]/extensions/TeX/AMSsymbols.js
DGtal 2.0.0
ConvexityHelper.h
1
16
17#pragma once
18
30
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 < >
83
89 template < >
93
99 template < >
103
109 template < >
113
122 template < bool safe >
126
127 } // namespace detail
128
130 // template class ConvexityHelper
151 template < int dim,
152 typename TInteger = DGtal::int32_t,
153 typename TInternalInteger = DGtal::int64_t >
156 // Integer must be a model of the concept CInteger.
158 // Integer must be a model of the concept CInteger.
160
161 static const Dimension dimension = dim;
162
163 typedef TInteger Integer;
164 typedef TInternalInteger InternalInteger;
166 typedef typename Space::Point Point;
167 typedef typename Space::Vector Vector;
168 typedef typename Space::RealPoint RealPoint;
170 typedef std::size_t Size;
171 typedef std::size_t Index;
172 typedef std::vector< Index > IndexRange;
173 typedef std::vector< Point > PointRange;
184
185 // ----------------- lattice convex hull services -------------------------
186 public:
189
207 static
209 computeLatticePolytope( const PointRange& input_points,
210 bool remove_duplicates = true,
211 bool make_minkowski_summable = false );
212
225 static
228 bool remove_duplicates = true );
229
230
252 template < typename TSurfaceMesh >
253 static
254 bool
255 computeConvexHullBoundary( TSurfaceMesh& mesh,
256 const PointRange& input_points,
257 bool remove_duplicates = true );
258
276 static
277 bool
279 const PointRange& input_points,
280 bool remove_duplicates = true );
281
297 static
298 bool
300 const PointRange& input_points,
301 bool remove_duplicates = true );
302
323 static
325 computeSimplex( const PointRange& input_points,
326 bool remove_duplicates = true );
327
347 static
350
369 static
372
388 static
390 compute3DTriangle( const Point& a, const Point& b, const Point& c,
391 bool make_minkowski_summable = false );
392
402 static
404 computeDegeneratedTriangle( const Point& a, const Point& b, const Point& c );
405
414 static
416 computeSegment( const Point& a, const Point& b );
417
419
420 // ----------------- lattice Delaunay services -------------------------
421 public:
424
441 static
442 bool
444 const PointRange& input_points,
445 bool remove_duplicates = true );
446
448
449 // ----------------- rational convex hull services -------------------------
450 public:
453
475 static
477 computeRationalPolytope( const std::vector< RealPoint >& input_points,
478 Integer denominator,
479 bool remove_duplicates = true,
480 bool make_minkowski_summable = false );
481
508 template < typename TSurfaceMesh >
509 static
510 bool
511 computeConvexHullBoundary( TSurfaceMesh& mesh,
512 const std::vector< RealPoint >& input_points,
513 double precision = 1024.0,
514 bool remove_duplicates = true );
515
536 static
537 bool
539 const std::vector< RealPoint >& input_points,
540 double precision = 1024.0,
541 bool remove_duplicates = true );
542
563 static
564 bool
566 const std::vector< RealPoint >& input_points,
567 double precision = 1024.0,
568 bool remove_duplicates = true );
569
571
572
573 // ----------------- real Delaunay services -------------------------
574 public:
577
599 static
600 bool
602 const std::vector< RealPoint >& input_points,
603 double precision = 1024.0,
604 bool remove_duplicates = true );
605
607
608 // ----------------- utility services -------------------------
609 public:
612
628 template < typename QHull >
629 static
630 void
632 std::vector< IndexRange >& cell_vertices,
633 std::map< typename QHull::Ridge, Index >& r2f,
634 std::vector< IndexRange >& face_vertices );
635
637
638 }; // class ConvexityHelper
639
640
641} // namespace DGtal
642
644// Includes inline functions.
645#include "ConvexityHelper.ih"
646
647// //
649
650#endif // !defined ConvexityHelper_h
651
652#undef ConvexityHelper_RECURSES
653#endif // else defined(ConvexityHelper_RECURSES)
Aim: Represents a polygon mesh, i.e. a 2-dimensional combinatorial surface whose faces are (topologic...
PointVector< dim, Integer > Point
Definition SpaceND.h:110
PointVector< dim, double > RealPoint
Definition SpaceND.h:117
PointVector< dim, double > RealVector
Definition SpaceND.h:121
PointVector< dim, Integer > Vector
Definition SpaceND.h:113
detail namespace gathers internal classes and functions.
DGtal is the top-level namespace which contains all DGtal functions and types.
std::int32_t int32_t
signed 32-bit integer.
Definition BasicTypes.h:71
std::int64_t int64_t
signed 94-bit integer.
Definition BasicTypes.h:73
DGtal::uint32_t Dimension
Definition Common.h:119
boost::multiprecision::number< boost::multiprecision::cpp_int_backend<>, boost::multiprecision::et_off > BigInteger
Definition BasicTypes.h:75
Aim: represents a d-dimensional complex in a d-dimensional space with the following properties and re...
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
static LatticePolytope computeSegment(const Point &a, const Point &b)
static LatticePolytope computeDegeneratedTriangle(const Point &a, const Point &b, const Point &c)
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 LatticePolytope compute3DTriangle(const Point &a, const Point &b, const Point &c, bool make_minkowski_summable=false)
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: Concept checking for Integer Numbers. More precisely, this concept is a refinement of both CEucl...
Definition CInteger.h:88