gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > Class Template Reference

Multidimensional node used for intersection query. More...

#include <intersectionNode.h>

+ Collaboration diagram for gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >:

Public Types

enum  { Dim = _dim }
 
typedef _IdContainer IdContainer
 
typedef _PointContainer PointContainer
 

Public Member Functions

const Point & center () const
 Center of the current node. More...
 
unsigned int idInRange (unsigned int i) const
 Access to the i-eme point in the node. Range limits are NOT tested! More...
 
 NdNode (const PointContainer &points, IdContainer &ids, const Point &p=Point::Zero(), unsigned int begin=0, unsigned int end=0)
 
 NdNode (const NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > &other)
 
NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > & operator= (const NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > &rhs)
 
const Point & pointInRange (unsigned int i) const
 Access to the i-eme point in the node. Range limits are NOT tested! More...
 
unsigned int rangeBegin () const
 First position in the id array defining the current instance range. More...
 
unsigned int rangeEnd () const
 Last position in the id array defining the current instance range. More...
 
int rangeLength () const
 Length of the range covered by this node in the id array. More...
 
void split (std::vector< NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > > &childs, Scalar rootEdgeHalfLength)
 Split the node and compute child nodes. More...
 
 ~NdNode ()
 

Static Public Member Functions

static NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > buildUnitRootNode (const PointContainer &points, IdContainer &ids)
 

Protected Attributes

unsigned int _begin
 First element id in the node. More...
 
Point _center
 Center of the node in the nd-space. More...
 
unsigned int _end
 Last element id in the node. More...
 
IdContainer_ids
 Ids used to access _points[_ids[i]]. More...
 
const PointContainer_points
 Input points. More...
 

Detailed Description

template<class Point, int _dim, typename Scalar, class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
class gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >

Multidimensional node used for intersection query.

Each instance store references to the data arrays:

  • const access to the input points
  • writing access to the dereferencing id array

The working dimension is deduced from the Point class

Member Typedef Documentation

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
typedef _IdContainer gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::IdContainer
template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
typedef _PointContainer gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::PointContainer

Member Enumeration Documentation

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
anonymous enum
Enumerator
Dim 

Constructor & Destructor Documentation

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::NdNode ( const PointContainer points,
IdContainer ids,
const Point &  p = Point::Zero(),
unsigned int  begin = 0,
unsigned int  end = 0 
)
inline

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::NdNode ( const NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > &  other)
inline

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::~NdNode ( )
inline

Member Function Documentation

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
static NdNode<Point, _dim, Scalar, _PointContainer, _IdContainer> gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::buildUnitRootNode ( const PointContainer points,
IdContainer ids 
)
inlinestatic

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
const Point& gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::center ( ) const
inline

Center of the current node.

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
unsigned int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::idInRange ( unsigned int  i) const
inline

Access to the i-eme point in the node. Range limits are NOT tested!

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
NdNode<Point, _dim, Scalar, _PointContainer, _IdContainer>& gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::operator= ( const NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > &  rhs)
inline

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
const Point& gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::pointInRange ( unsigned int  i) const
inline

Access to the i-eme point in the node. Range limits are NOT tested!

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
unsigned int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::rangeBegin ( ) const
inline

First position in the id array defining the current instance range.

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
unsigned int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::rangeEnd ( ) const
inline

Last position in the id array defining the current instance range.

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::rangeLength ( ) const
inline

Length of the range covered by this node in the id array.

+ Here is the call graph for this function:

template<class Point , int _dim, typename Scalar , class _PointContainer , class _IdContainer >
void gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::split ( std::vector< NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer > > &  childs,
Scalar  rootEdgeHalfLength 
)

Split the node and compute child nodes.

Split the current node in 2^Dim childs using a regular grid.

Note
Childs are not stored
Todo:
See how to introduce dimension specialization (useful for 2D and 3D)

The IdContainer is updated to partially sort the input ids wrt to the childs range limits.

Parameters
ChildContainerin:

+ Here is the call graph for this function:

Member Data Documentation

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
unsigned int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::_begin
protected

First element id in the node.

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
Point gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::_center
protected

Center of the node in the nd-space.

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
unsigned int gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::_end
protected

Last element id in the node.

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
IdContainer& gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::_ids
protected

Ids used to access _points[_ids[i]].

template<class Point , int _dim, typename Scalar , class _PointContainer = std::vector<Point>, class _IdContainer = std::vector<unsigned int>>
const PointContainer& gr::NdNode< Point, _dim, Scalar, _PointContainer, _IdContainer >::_points
protected

Input points.

Needed to compute split


The documentation for this class was generated from the following file:
  • /home/travis/build/STORM-IRIT/OpenGR/src/gr/accelerators/pairExtraction/intersectionNode.h