1#ifndef __JGEOMETRY2DTOOLKIT__ 
    2#define __JGEOMETRY2DTOOLKIT__ 
   40    const double A = a.getX() - b.getX();
 
   41    const double B = a.getY() - b.getY();
 
   42    const double C = c.getX() - b.getX();
 
   43    const double D = c.getY() - b.getY();
 
 
  104      if (__begin != __end) {
 
  106        for (T i = __begin; i != __end; ++i) {
 
  110        div(std::distance(__begin, __end));
 
 
 
  129    template<
class T, 
class JCompare_t>
 
  136      if (__begin != __end) {
 
  138        sort(__begin, __end, compare);
 
  148          for (T j, k; i != __end; ++i) {
 
  150            for (j = k = l; j != __begin && 
getCCW(*i, *j, *--k); --j) {}
 
 
  180      inline bool operator()(
const T& first, 
const T& second)
 const 
  182        if (first.getX() == second.getX()) 
 
  183          return second.getY() > first.getY();
 
  185          return first.getX() > second.getX();
 
 
 
  202      inline bool operator()(
const T& first, 
const T& second)
 const 
  204        if (first.getX() == second.getX()) 
 
  205          return second.getY() < first.getY();
 
  207          return first.getX() < second.getX();
 
 
 
  238      if (__p == __begin || __p == __end) {
 
  239        return make_pair(__p, __p);
 
  244      reverse(__begin, __p);
 
  253      reverse(__begin, __q);
 
  261      return make_pair(__p, __q);
 
 
 
  292      for (++j, ++(++k); k != __end; ++i, ++j, ++k) {
 
  293        A += j->getX() * (k->getY()  -  i->getY());
 
  298      A +=  j->getX() * (k->getY()  -  i->getY());
 
  304      A +=  j->getX() * (k->getY()  -  i->getY());
 
  306      return 0.5 * fabs(A);
 
 
  330      T i = __begin, j = __begin;
 
  332      for (++j; j != __end; ++i, ++j) {
 
  334        if (!
getCCW(*i, *j, pos)) {
 
  341      return getCCW(*i, *j, pos);
 
 
  364    if (
distance(__begin,__end2) >= 3) {
 
  366      if (pos.
getX() < __begin->getX()) {
 
  378      if (!
getCCW(*i, *j, pos)) {
 
  389      return getCCW(*i, *j, pos);
 
 
  418    static double getDmin(T __begin, T __end, 
const double delta)
 
  426      for (T i = __begin; i != __end; ++i) {
 
  427        for (T j = i; ++j != __end && (j->getY() - i->getY()) < Dmin; ) {
 
  429          const double d = getDistance(*i, *j);
 
 
  455      const int N = 
distance(__begin, __end);
 
  459        double Dmin = numeric_limits<double>::max();
 
  461        for (T i = __begin; i != __end; ++i) {
 
  462          for (T j = i; ++j != __end; ) {
 
  464            const double d = getDistance(*i, *j);
 
  480        const double dl   = 
getDmin(__begin, i);
 
  481        const double dr   = 
getDmin(i,   __end);
 
  483        const double Dmin = min(dl, dr);
 
  488        while (--il != __begin && i ->getX() - il->getX() < Dmin) {}
 
  489        while (++ir != __end   && ir->getX() - i ->getX() < Dmin) {}
 
  491        return min(Dmin, 
getDmin(++il, ir, Dmin));
 
 
  508      inline bool operator()(
const T& first, 
const T& second)
 const 
  510        return first.getX() < second.getX();
 
 
 
  527      inline bool operator()(
const T& first, 
const T& second)
 const 
  529        return first.getY() < second.getY();
 
 
 
  561      return getDmin(__begin, __end);
 
 
  575    double operator()(T __begin, T __end, 
const double delta)
 const 
  583      for (T i = __begin; i != __end; ) {
 
  587        for ( ; ++j != __end && (j->getX() - i->getX()) < Dmin; ) {}
 
  589        const double d = 
getDmin(i, j);
 
 
  618      for (T i = __begin; i != __end; ++i) {
 
  622        while (++j != __end && (j->getX() - i->getX()) <= Dmax) {}
 
  628            if (getDistance(*i, *--j) <= Dmax) {
 
  629              return make_pair(i,j);
 
  636            for (T __i = i; __i != j; ++__i) {
 
  637              for (T __j = __i; ++__j != j && (__j->getY() - __i->getY()) <= Dmax; ) {
 
  639                const double d = getDistance(*__i, *__j);
 
  642                  return make_pair(__i,__j);
 
  652      return make_pair(__end,__end);
 
 
 
std::vector< T >::difference_type distance(typename std::vector< T >::const_iterator first, typename PhysicsEvent::const_iterator< T > second)
Specialisation of STL distance.
 
JCenter2D(const JVector2D &p0, const JVector2D &p1, const JVector2D &p2)
Constructor.
 
JCenter2D(const JVector2D &p0, const JVector2D &p1)
Constructor.
 
JCenter2D(T __begin, T __end)
Constructor.
 
Auxiliary class for convex hull determination in X-Y plane.
 
JConvexHull2D()
Default constructor.
 
static T getConvexHull2D(T __begin, T __end, JCompare_t compare)
Partition half Hull.
 
static const JUpperHull sortUpperHull
Function object for sorting elements.
 
static const JLowerHull sortLowerHull
Function object for sorting elements.
 
std::pair< T, T > operator()(T __begin, T __end) const
Get convex Hull.
 
Auxiliary class for determination of smallest distance between pair of 2D points.
 
static double getDmin(T __begin, T __end, const double delta)
Get distance beween the closest points within a strip around the median in x.
 
static const JCompareY compareY
Function object for sorting elements.
 
static double getDmin(T __begin, T __end)
Recursive method to find the smallest distance.
 
static const JCompareX compareX
Function object for sorting elements.
 
JSmallestDistance2D()
Default constructor.
 
double operator()(T __begin, T __end, const double delta) const
Get distance beween the closest points within a strip around the median in z.
 
static std::pair< T, T > getPair(T __begin, T __end, const double Dmax)
Get pairs with smaller or equal given maximal distance.
 
double operator()(T __begin, T __end) const
Get smallest distance between two points.
 
Data structure for vector in two dimensions.
 
double getX() const
Get x position.
 
JVector2D & div(const double factor)
Scale vector.
 
JVector2D & add(const JVector2D &vector)
Add vector.
 
Auxiliary classes and methods for 2D geometrical objects and operations.
 
static const JConvexHull2D getConvexHull2D
Function object for convex hull determination.
 
bool getCCW(const T &a, const T &b, const T &c)
Check sequence of three points in X-Y plane.
 
static const JSmallestDistance2D getSmallestDistance2D
Function object for smallest distance determination.
 
double getArea2D(T __begin, T __end)
Get area of a convex polygon.
 
bool inside2D(T __begin, T __end, const JVector2D &pos)
Check if given point is inside a convex polygon.
 
double getDistance(const JFirst_t &first, const JSecond_t &second)
Get distance between objects.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
Auxiliary class for sorting elements.
 
bool operator()(const T &first, const T &second) const
Sort criterion for lower hull.
 
Auxiliary class for sorting elements.
 
bool operator()(const T &first, const T &second) const
Sort criterion for upper hull.
 
Auxiliary class for sorting elements.
 
bool operator()(const T &first, const T &second) const
Compare x-positions of given points.
 
Auxiliary class for sorting elements.
 
bool operator()(const T &first, const T &second) const
Compare y-positions of given points.