DGtal  1.2.0
InexactPredicateLpSeparableMetric.h
1 
17 #pragma once
18 
31 #if defined(InexactPredicateLpSeparableMetric_RECURSES)
32 #error Recursive header files inclusion detected in InexactPredicateLpSeparableMetric.h
33 #else // defined(InexactPredicateLpSeparableMetric_RECURSES)
35 #define InexactPredicateLpSeparableMetric_RECURSES
36 
37 #if !defined InexactPredicateLpSeparableMetric_h
39 #define InexactPredicateLpSeparableMetric_h
40 
42 // Inclusions
43 #include <iostream>
44 #include <cmath>
45 #include "DGtal/base/Common.h"
46 #include "DGtal/kernel/CSpace.h"
47 #include "DGtal/kernel/CEuclideanRing.h"
49 
50 namespace DGtal
51 {
52 
54 // template class InexactPredicateLpSeparableMetric
80  template <typename TSpace, typename TValue = double>
82  {
83  // ----------------------- Standard services ------------------------------
84  public:
85 
87  typedef TSpace Space;
88 
91 
93  typedef typename Space::Point Point;
95  typedef typename Point::Coordinate Abscissa;
97  typedef typename Space::Vector Vector;
99  typedef TValue Value;
101  typedef TValue RawValue;
102 
106  InexactPredicateLpSeparableMetric( const double anExponent );
107 
108 
113 
119  {
120  myExponent = other.myExponent;
121  }
122 
129  {
130  myExponent = other.myExponent;
131  return *this;
132  }
133 
134  // ----------------------- Interface --------------------------------------
135  public:
136 
137  // ----------------------- CMetric --------------------------------------
146  Value operator()(const Point & aP, const Point &aQ) const;
147 
156  RawValue rawDistance(const Point & aP, const Point &aQ) const;
157 
169  Closest closest(const Point &origin,
170  const Point &first,
171  const Point &second) const;
172 
173  // ----------------------- CSeparableMetric --------------------------------------
194  bool hiddenBy(const Point &u,
195  const Point &v,
196  const Point &w,
197  const Point &startingPoint,
198  const Point &endPoint,
199  const typename Point::UnsignedComponent dim) const;
200 
201 
206  void selfDisplay ( std::ostream & out ) const;
207 
212  bool isValid() const;
213 
214  // ------------------------- Protected Datas ------------------------------
215  private:
216 
226  Value distanceLp(const Point &aP, const Point &aQ) const;
227 
228 
249  const Abscissa &vdim,
250  const Value &nu,
251  const Value &nv,
252  const Abscissa &lower,
253  const Abscissa &upper) const;
254 
255 
256  // ------------------------- Private Datas --------------------------------
257  private:
258 
261 
262  }; // end of class InexactPredicateLpSeparableMetric
263 
270  template <typename T, typename V>
271  std::ostream&
272  operator<< ( std::ostream & out, const InexactPredicateLpSeparableMetric<T,V> & object );
273 
274 } // namespace DGtal
275 
276 
278 // Includes inline functions.
279 #include "DGtal/geometry/volumes/distance/InexactPredicateLpSeparableMetric.ih"
280 
281 // //
283 
284 #endif // !defined InexactPredicateLpSeparableMetric_h
285 
286 #undef InexactPredicateLpSeparableMetric_RECURSES
287 #endif // else defined(InexactPredicateLpSeparableMetric_RECURSES)
Aim: implements separable l_p metrics with approximated predicates.
InexactPredicateLpSeparableMetric(const InexactPredicateLpSeparableMetric &other)
RawValue rawDistance(const Point &aP, const Point &aQ) const
bool hiddenBy(const Point &u, const Point &v, const Point &w, const Point &startingPoint, const Point &endPoint, const typename Point::UnsignedComponent dim) const
Value distanceLp(const Point &aP, const Point &aQ) const
InexactPredicateLpSeparableMetric & operator=(const InexactPredicateLpSeparableMetric &other)
Closest closest(const Point &origin, const Point &first, const Point &second) const
BOOST_CONCEPT_ASSERT((concepts::CSpace< TSpace >))
Abscissa binarySearchHidden(const Abscissa &udim, const Abscissa &vdim, const Value &nu, const Value &nv, const Abscissa &lower, const Abscissa &upper) const
BOOST_CONCEPT_ASSERT((concepts::CEuclideanRing< TValue >))
Value operator()(const Point &aP, const Point &aQ) const
void selfDisplay(std::ostream &out) const
InexactPredicateLpSeparableMetric(const double anExponent)
Component Coordinate
Type for Point elements.
Definition: PointVector.h:617
NumberTraits< Component >::UnsignedVersion UnsignedComponent
Unsigned version of the components.
Definition: PointVector.h:620
DGtal is the top-level namespace which contains all DGtal functions and types.
Closest
Definition: Common.h:147
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
Aim: Defines the mathematical concept equivalent to a unitary commutative ring with a division operat...
Aim: Defines the concept describing a digital space, ie a cartesian product of integer lines.
Definition: CSpace.h:106
unsigned int dim(const Vector &z)
Vector lower(const Vector &z, unsigned int k)
Vector upper(const Vector &z, unsigned int k)