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) {
 
  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) {
 
  364     if (
distance(__begin,__end2) >= 3) {
 
  366       if (pos.
getX() < __begin->getX()) {
 
  418     static double getDmin(T __begin, T __end, 
const double delta)
 
  424       sort(__begin, __end, compareY); 
 
  426       for (T i = __begin; i != __end; ++i) {
 
  427         for (T 
j = i; ++
j != __end && (
j->getY() - i->getY()) < Dmin; ) {
 
  437       sort(__begin, __end, compareX);
 
  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; ) {
 
  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();
 
  559       sort(__begin, __end, compareX);
 
  561       return getDmin(__begin, __end);
 
  575     double operator()(T __begin, T __end, 
const double delta)
 const 
  581       sort(__begin, __end, compareX);
 
  583       for (T i = __begin; i != __end; ) {
 
  587         for ( ; ++
j != __end && (
j->getX() - i->getX()) < Dmin; ) {}
 
  589         const double d = getDmin(i, 
j);
 
  616       sort(__begin, __end, compareX);
 
  618       for (T i = __begin; i != __end; ++i) {
 
  622         while (++
j != __end && (
j->getX() - i->getX()) <= Dmax) {}
 
  629               return make_pair(i,
j);
 
  634             sort(i, 
j, compareY); 
 
  636             for (T __i = i; __i != 
j; ++__i) {
 
  637               for (T __j = __i; ++__j != 
j && (__j->getY() - __i->getY()) <= Dmax; ) {
 
  642                   return make_pair(__i,__j);
 
  647             sort(i, 
j, compareX);
 
  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.
 
std::pair< T, T > operator()(T __begin, T __end) const
Get convex Hull.
 
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.
 
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 std::pair< T, T > getPair(T __begin, T __end, const double Dmax)
Get pairs with smaller or equal given maximal distance.
 
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.
 
double operator()(T __begin, T __end) const
Get smallest distance between two points.
 
Data structure for vector in two dimensions.
 
JVector2D & add(const JVector2D &vector)
Add vector.
 
double getX() const
Get x position.
 
JVector2D & div(const double factor)
Scale vector.
 
Auxiliary classes and methods for 2D geometrical objects and operations.
 
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 __end1, T __end2, 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.
 
static const double C
Physics constants.
 
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
 
counter_type advance(counter_type &counter, const counter_type value, const counter_type limit=std::numeric_limits< counter_type >::max())
Advance counter.
 
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.