DGtal  1.2.0
Preimage2D.h
1 
17 #pragma once
18 
31 #if defined(Preimage2D_RECURSES)
32 #error Recursive header files inclusion detected in Preimage2D.h
33 #else // defined(Preimage2D_RECURSES)
35 #define Preimage2D_RECURSES
36 
37 #if !defined Preimage2D_h
39 #define Preimage2D_h
40 
42 // Inclusions
43 #include <iostream>
44 #include <list>
45 #include "DGtal/base/Common.h"
46 #include "DGtal/base/OpInSTLContainers.h"
47 #include "DGtal/shapes/fromPoints/Point2ShapePredicate.h"
48 #include "DGtal/io/Color.h"
50 
51 namespace DGtal
52 {
53 
55  // template class Preimage2D
92  template <typename Shape>
93  class Preimage2D
94  {
95 
96 
97  // ----------------------- Types ------------------------------
98  public:
99 
100  typedef typename Shape::Point Point;
101  typedef typename Shape::Point Vector;
102  //container of points
103  typedef std::list<Point> Container;
104 
105 
106  private:
107 
108  //Iterators on the container
109  typedef typename std::list<Point>::iterator ForwardIterator;
110  typedef typename std::list<Point>::reverse_iterator BackwardIterator;
111  typedef typename std::list<Point>::const_iterator ConstForwardIterator;
112  typedef typename std::list<Point>::const_reverse_iterator ConstBackwardIterator;
113 
114  //Predicates used to decide whether the preimage
115  //has to be updated or not
124  //Predicates used to update the hulls
133 
134 
135 
136  // ----------------------- Standard services ------------------------------
137  public:
138 
145  Preimage2D(const Point & firstPoint, const Point & secondPoint, const Shape & aShape );
146 
151 
156  Preimage2D ( const Preimage2D & other );
157 
163  Preimage2D & operator= ( const Preimage2D & other );
164 
175  bool operator==( const Preimage2D & other) const;
176 
182  bool operator!=( const Preimage2D & other) const;
183 
195  bool isLeftExteriorAtTheFront(const Point & aP, const Point & aQ);
196 
208  bool isLeftExteriorAtTheBack(const Point & aP, const Point & aQ);
209 
221  bool isRightExteriorAtTheFront(const Point & aP, const Point & aQ);
222 
234  bool isRightExteriorAtTheBack(const Point & aP, const Point & aQ);
235 
247  bool canBeAddedAtTheFront(const Point & aP, const Point & aQ);
248 
260  bool canBeAddedAtTheBack(const Point & aP, const Point & aQ);
261 
276  bool addFront(const Point & aP, const Point & aQ);
277 
292  bool addBack(const Point & aP, const Point & aQ);
293 
294  // ----------------------- Interface --------------------------------------
295  public:
296 
301  void selfDisplay ( std::ostream & out ) const;
302 
307  bool isValid() const;
308 
312  Point Uf() const;
313 
317  Point Ul() const;
318 
322  Point Lf() const;
323 
327  Point Ll() const;
328 
335  void getSeparatingStraightLine(double& alpha, double& beta, double& gamma) const;
336 
340  const Shape & shape() const
341  {
342  return myShape;
343  };
344 
348  const Container & pHull() const
349  {
350  return myPHull;
351  };
352 
356  const Container & qHull() const
357  {
358  return myQHull;
359  };
360 
361  //------------------ display -------------------------------
366  //DrawableWithBoard2D* defaultStyle( std::string mode="" ) const;
367 
371  std::string className() const;
372 
373  // ------------------------- Protected Datas ------------------------------
374  private:
375  // ------------------------- Private Datas --------------------------------
376  private:
377 
382 
383  //lists of the vertices of the preimage
394 
395  // ------------------------- Hidden services ------------------------------
396  protected:
397 
398 
399  private:
400 
415  template <typename Iterator, typename Predicate>
416  void update(const Point & aPoint,
417  Container & aContainer,
418  Iterator & anIterator,
419  const Iterator & anEndIterator);
420 
421 
422 
423  // ------------------------- Internals ------------------------------------
424  private:
425 
426  }; // end of class Preimage2D
427 
428 
435  template <typename Shape>
436  std::ostream&
437  operator<< ( std::ostream & out, const Preimage2D<Shape> & object );
438 
439 
440 } // namespace DGtal
441 
442 
444 // Includes inline functions.
445 #include "DGtal/geometry/tools/Preimage2D.ih"
446 
447 // //
449 
450 #endif // !defined Preimage2D_h
451 
452 #undef Preimage2D_RECURSES
453 #endif // else defined(Preimage2D_RECURSES)
Aim: Computes the preimage of the 2D Euclidean shapes crossing a sequence of n straigth segments in O...
Definition: Preimage2D.h:94
functors::Point2ShapePredicate< Shape, true, true > QHullBackPHullFrontPred
Definition: Preimage2D.h:119
functors::Point2ShapePredicate< Shape, true, true > PHullFrontQHullBackPred
Definition: Preimage2D.h:121
bool addBack(const Point &aP, const Point &aQ)
Preimage2D(const Preimage2D &other)
functors::Point2ShapePredicate< Shape, false, false > BackPHullUpdatePred
Definition: Preimage2D.h:130
bool operator!=(const Preimage2D &other) const
std::list< Point >::iterator ForwardIterator
Definition: Preimage2D.h:109
bool addFront(const Point &aP, const Point &aQ)
void selfDisplay(std::ostream &out) const
functors::Point2ShapePredicate< Shape, false, true > PHullBackQHullFrontPred
Definition: Preimage2D.h:117
const Shape & shape() const
Definition: Preimage2D.h:340
Container myQHull
Definition: Preimage2D.h:393
void update(const Point &aPoint, Container &aContainer, Iterator &anIterator, const Iterator &anEndIterator)
Point Lf() const
bool isRightExteriorAtTheFront(const Point &aP, const Point &aQ)
void getSeparatingStraightLine(double &alpha, double &beta, double &gamma) const
Preimage2D(const Point &firstPoint, const Point &secondPoint, const Shape &aShape)
functors::Point2ShapePredicate< Shape, false, false > FrontQHullUpdatePred
Definition: Preimage2D.h:128
bool isValid() const
std::list< Point > Container
Definition: Preimage2D.h:103
Point Ul() const
bool canBeAddedAtTheFront(const Point &aP, const Point &aQ)
Shape::Point Point
Definition: Preimage2D.h:100
functors::Point2ShapePredicate< Shape, false, true > QHullFrontPHullBackPred
Definition: Preimage2D.h:123
bool operator==(const Preimage2D &other) const
Point Ll() const
std::string className() const
bool isLeftExteriorAtTheFront(const Point &aP, const Point &aQ)
Shape::Point Vector
Definition: Preimage2D.h:101
bool canBeAddedAtTheBack(const Point &aP, const Point &aQ)
const Container & pHull() const
Definition: Preimage2D.h:348
std::list< Point >::const_iterator ConstForwardIterator
Definition: Preimage2D.h:111
std::list< Point >::reverse_iterator BackwardIterator
Definition: Preimage2D.h:110
const Container & qHull() const
Definition: Preimage2D.h:356
functors::Point2ShapePredicate< Shape, true, false > BackQHullUpdatePred
Definition: Preimage2D.h:132
Point Uf() const
Preimage2D & operator=(const Preimage2D &other)
bool isRightExteriorAtTheBack(const Point &aP, const Point &aQ)
bool isLeftExteriorAtTheBack(const Point &aP, const Point &aQ)
std::list< Point >::const_reverse_iterator ConstBackwardIterator
Definition: Preimage2D.h:112
functors::Point2ShapePredicate< Shape, true, false > FrontPHullUpdatePred
Definition: Preimage2D.h:126
Container myPHull
Definition: Preimage2D.h:388
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
MyPointD Point
Definition: testClone2.cpp:383
const Point aPoint(3, 4)