35#if defined(AlphaThickSegmentComputer_RECURSES)
36#error Recursive header files inclusion detected in AlphaThickSegmentComputer.h
39#define AlphaThickSegmentComputer_RECURSES
41#if !defined AlphaThickSegmentComputer_h
43#define AlphaThickSegmentComputer_h
48#include "DGtal/base/Common.h"
49#include "DGtal/base/ReverseIterator.h"
50#include "DGtal/kernel/SpaceND.h"
51#include "DGtal/geometry/surfaces/ParallelStrip.h"
52#include "DGtal/geometry/tools/MelkmanConvexHull.h"
53#include "DGtal/geometry/tools/determinant/InHalfPlaneBySimple3x3Matrix.h"
124template <
typename TInputPoint,
125 typename TConstIterator =
typename std::vector< TInputPoint >::const_iterator >
144 typedef typename InputPointContainer::size_type
Size;
148 typedef typename InputPointContainer::iterator
Iterator;
198 const double thickCompPrecision=1e-6);
434 std::pair<std::pair<InputPoint, InputPoint>,
InputPoint>
523 PointD &pt1LongestSegment1,
524 PointD &pt2LongestSegment1,
525 PointD &pt3LongestSegment2,
526 PointD &pt4LongestSegment2,
527 double minVisibleWidthBounds = 0.2)
const;
549 PointD &pt2LongestSegment1,
550 PointD &pt3LongestSegment2,
551 PointD &pt4LongestSegment2)
const;
665 template<
typename TPo
int,
typename TPo
intD>
667 const TPoint & ptC, TPointD & ptProjected)
const;
681 template<
typename TConstIteratorG>
698template <
typename TInputPo
int,
typename TConstIterator>
708#if !defined(BUILD_INLINE)
709#include "DGtal/geometry/curves/AlphaThickSegmentComputer.ih"
718#undef AlphaThickSegmentComputer_RECURSES
Aim: This class is devoted to the recognition of alpha thick segments as described in fauretangential...
AlphaThickSegmentComputer(const double maximalThickness=1.0, const ThicknessDef &thicknessDefinition=functions::Hull2D::HorizontalVerticalThickness, const double thickCompPrecision=1e-6)
ThicknessDef myThicknessDefinition
AlphaThickSegmentComputer< InputPoint, ReverseIterator< ConstIterator > > Reverse
ConstIterator end() const
std::pair< InputPoint, InputPoint > getExtremityPoints() const
double myThicknessCompPrecision
AlphaThickSegmentComputer & operator=(const AlphaThickSegmentComputer &other)
void getBoundingBox(PointD &pt1LongestSegment1, PointD &pt2LongestSegment1, PointD &pt3LongestSegment2, PointD &pt4LongestSegment2) const
DGtal::MelkmanConvexHull< InputPoint, Functor >::ConstIterator ConvexhullConstIterator
std::vector< InputPoint > getConvexHull() const
TConstIterator ConstIterator
ContainerConstIterator containerBegin() const
bool isExtendableFront(const InputPoint &aPoint)
void init(const ConstIterator &it)
AlphaThickSegmentComputer< InputPoint, ConstIterator > Self
bool isStoringSegmentPoints() const
bool extendFront(const InputPoint &aPoint)
double updateMainHeightAndAntiPodal()
ConvexhullConstIterator convexhullEnd() const
Reverse getReverse() const
std::vector< InputPoint > InputPointContainer
void computeExtremaPoints(const TConstIteratorG &itBegin, const TConstIteratorG &itEnd, InputPoint &aFirstExtrPt, InputPoint &aLastExtrPt) const
bool operator!=(const AlphaThickSegmentComputer &other) const
void selfDisplay(std::ostream &out) const
bool operator==(const AlphaThickSegmentComputer &other) const
AlphaThickSegmentComputer(const AlphaThickSegmentComputer &other)
ParallelStrip< SpaceND< 2, DGtal::int32_t >,true, true > Primitive
std::string className() const
unsigned int myNbPointsAddedFromIterators
InputPointContainer::const_iterator ContainerConstIterator
unsigned int getNumberSegmentPoints() const
InputPointContainer::size_type Size
Primitive primitive() const
InputPointContainer::iterator Iterator
InputPointContainer myPointContainer
ConvexhullConstIterator convexhullBegin() const
BOOST_CONCEPT_ASSERT((boost_concepts::ReadableIterator< TConstIterator >))
BOOST_STATIC_ASSERT((TInputPoint::dimension==2))
std::pair< std::pair< InputPoint, InputPoint >, InputPoint > getAntipodalLeaningPoints() const
bool projectOnStraightLine(const TPoint &ptA, const TPoint &ptB, const TPoint &ptC, TPointD &ptProjected) const
~AlphaThickSegmentComputer()
bool melkmanIsConvexValid()
double getThickness() const
DGtal::InHalfPlaneBySimple3x3Matrix< InputPoint, typename InputPoint::Component > Functor
ContainerConstIterator containerEnd() const
DGtal::functions::Hull2D::ThicknessDefinition ThicknessDef
ConstIterator begin() const
double myMaximalThickness
void getBoundingBoxFromExtremPoints(const InputPoint &aFirstPt, const InputPoint &aLastPt, PointD &pt1LongestSegment1, PointD &pt2LongestSegment1, PointD &pt3LongestSegment2, PointD &pt4LongestSegment2, double minVisibleWidthBounds=0.2) const
void computeParallelStripParams(double &mu, PointD &N, double &nu) const
DGtal::PointVector< 2, double > PointD
double getSegmentLength() const
Aim: Class that implements an orientation functor, ie. it provides a way to compute the orientation o...
Aim: This class implements the on-line algorithm of Melkman for the computation of the convex hull of...
std::deque< Point >::const_iterator ConstIterator
Aim: A parallel strip in the space is the intersection of two parallel half-planes such that each hal...
Aim: Implements basic operations that will be used in Point and Vector classes.
ThicknessDefinition
The 2 thickness definitions.
@ HorizontalVerticalThickness
DGtal is the top-level namespace which contains all DGtal functions and types.
std::ostream & operator<<(std::ostream &out, const ClosedIntegerHalfPlane< TSpace > &object)
DGtal::MelkmanConvexHull< InputPoint, Functor > melkmanCH