29 #if defined(DSLSubsegment_RECURSES) 30 #error Recursive header files inclusion detected in DSLSubsegment.h 31 #else // defined(DSLSubsegment_RECURSES) 33 #define DSLSubsegment_RECURSES 35 #if !defined DSLSubsegment_h 37 #define DSLSubsegment_h 44 #include "DGtal/base/Common.h" 47 #include "DGtal/arithmetic/IntegerComputer.h" 74 template <
typename TInteger,
typename TNumber>
184 DSLSubsegment(Number a, Number b, Number mu, Point &A, Point &B, std::string type);
198 DSLSubsegment(Number alpha, Number beta, Point &A, Point &B, Number precision = 1e-10);
260 RayC(
const Integer x0,
const Integer y0);
270 RayC(
const Integer p,
const Integer q,
const Integer r,
const Integer
slope);
311 Integer
intersection(Point &P, Vector &v, Vector &aL, Integer r);
335 void update(Vector &u, Point &A, Vector &l, Integer r, Vector *v);
347 void update(Vector &u, Point &A, Number s, Vector *v);
366 Point *prevInfL, Point *infL, Point *infR, Point *prevInfR);
380 void convexHullApprox(Vector &l, Integer r, Integer n, Point *inf, Point *sup);
410 Point *inf, Point *sup, Point *prevInf, Point *prevSup,
bool inv);
465 Integer
slope(Integer p, Integer q, Integer r, Number a, Number b, Number mu);
480 Integer
slope(Integer p, Integer q, Integer r, Number alpha, Number beta);
553 Number a, Number b, Number mu, Integer n,
bool *flagRayFound);
584 Number alpha, Number beta, Integer n,
bool *flagRayFound);
607 Integer r, Number a, Number b, Number mu, Integer n);
628 Integer r, Number alpha, Number beta, Integer n);
673 RayC r, Integer n, Integer *resAlphaP,
674 Integer *resAlphaQ, Integer *resBetaP,
bool found);
697 RayC r, Integer n, Integer *resAlphaP, Integer *resAlphaQ,
713 Integer
getA()
const;
717 Integer
getB()
const;
721 Integer
getMu()
const;
732 #include "DSLSubsegment.ih" 738 #endif // !defined DSLSubsegment_h 740 #undef DSLSubsegment_RECURSES 741 #endif // else defined(DSLSubsegment_RECURSES) void DSLSubsegmentFareyFan(Number a, Number b, Number mu, Point &A, Point &B)
void shortFindSolution(Integer fp, Integer fq, Integer gp, Integer gq, RayC r, Integer n, Integer *resAlphaP, Integer *resAlphaQ, Integer *resBetaP)
Point nextTermInFareySeriesEuclid(Integer fp, Integer fq, Integer n)
void convexHullHarPeled(Vector &l, Integer n, Point *inf, Point *sup)
void convexHullApproxTwoPoints(Vector &l, Integer r, Integer n, Point *inf, Point *sup, Point *prevInf, Point *prevSup, bool inv)
void convexHullApprox(Vector &l, Integer r, Integer n, Point *inf, Point *sup)
Integer smartFirstDichotomy(Integer fp, Integer fq, Integer gp, Integer gq, Number a, Number b, Number mu, Integer n, bool *flagRayFound)
DGtal::PointVector< 2, Number > VectorF
Position positionWrtRay(RayC &r, Number a, Number b, Number mu)
Aim: Given a Digital Straight line and two endpoints A and B on this line, compute the minimal charac...
void selfDisplay(std::ostream &out) const
Integer slope(Integer p, Integer q, Integer r, Number a, Number b, Number mu)
void lowerConvexHull(Vector &l, Integer mu, Point &A, Point &B, Point *prevInfL, Point *infL, Point *infR, Point *prevInfR)
Integer intersectionVertical(Point &P, Vector &v, Integer n)
Aim: Concept checking for Integer Numbers. More precisely, this concept is a refinement of both CEucl...
Integer computeMaxRemainder(Number a, Number b, Number mu, Point A, Point B)
Integer computeMinRemainder(Number a, Number b, Number mu, Point A, Point B)
Aim: Defines the mathematical concept equivalent to a unitary commutative ring with a division operat...
void findSolutionWithoutFractions(Integer fp, Integer fq, Integer gp, Integer gq, RayC r, Integer n, Integer *resAlphaP, Integer *resAlphaQ, Integer *resBetaP, bool found)
Integer intersection(Point &P, Vector &v, Vector &aL, Integer r)
RayC raySup(Integer fp, Integer fq, RayC r)
RayC rayOfHighestSlope(Integer p, Integer q, Integer r, Integer smallestSlope, Integer n)
DGtal is the top-level namespace which contains all DGtal functions and types.
void DSLSubsegmentLocalCH(Number a, Number b, Number mu, Point &A, Point &B)
DGtal::PointVector< 2, Integer > Ray
RayC smartRayOfSmallestSlope(Integer fp, Integer fq, Integer gp, Integer gq, Integer r)
void update(Vector &u, Point &A, Vector &l, Integer r, Vector *v)
DGtal::PointVector< 2, Integer > Point
DGtal::PointVector< 2, Number > PointF
RayC localizeRay(Integer fp, Integer fq, Integer gp, Integer gq, Integer r, Number a, Number b, Number mu, Integer n)
long double LongDoubleType
BOOST_CONCEPT_ASSERT((concepts::CEuclideanRing< Number >))
DGtal::PointVector< 2, Integer > Vector