Ice Sheet System Model  4.18
Code documentation
Quadtree.h
Go to the documentation of this file.
1 
2 #ifndef _QUADTREE_H
3 #define _QUADTREE_H
4 
5 class Observation;
6 
7 class Quadtree{
8 
9  private:
10  /* A quadtree box contains up to 4 points (locations). 4 new quadtree boxes are
11  * created if a fifth point is added to the same box. A Quadtree box is therefore
12  * composed of EITHER:
13  * - up to 4 vertices
14  * - 4 "sub" quadtree boxes*/
15 
16  class QuadtreeBox: public Object{
17  public:
18  int nbitems; // number of current vertices in the box
19  double xcenter; // x position of the center (double)
20  double ycenter; // x position of the center (double)
21  double length; // width of the box
22  union{
25  };
26 
27  /*Object functions (Needed because the Quadtree uses a Container*/
28  Object *copy();
29  void DeepEcho() {_error_("not implemented yet"); };
30  void Echo();
31  int Id() {_error_("not implemented yet"); };
32  void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){ _error_("not implemented yet!");};
33  int ObjectEnum(){_error_("not implemented yet"); };
34 
35 
36  /*Methods*/
37  int IsWithinRange(double x,double y,double range);
38  void RangeSearch(int *indices,int *pnobs,double x,double y,double range);
39  void WriteObservations(int *indices,int *pnobs);
40 
41  };
42 
43  /*Quadtree private Fields*/
45 
46  public:
47  int MaxDepth; // maximum number of subdivision
48  QuadtreeBox *root; // main box
49  int NbQuadtreeBox; // total number of boxes
50  int NbObs; // number of points
51 
52  Quadtree();
53  Quadtree(double xmin,double xmax,double ymin,double ymax,int maxdepth_in);
54  ~Quadtree();
55  void Add(Observation *observation);
56  void AddAndAverage(double x,double y,double value);
57  void ClosestObs(int *pindex,double x,double y);
58  void DeepEcho(void);
59  void Echo(void);
60  void IntergerCoordinates(int *xi,int *yi,double x,double y);
61  QuadtreeBox *NewQuadtreeBox(double xcenter,double ycenter,double length);
62  QuadtreeBox *NewQuadtreeBox(QuadtreeBox* master,int index);
63  void QuadtreeDepth(int *A,int xi,int yi);
64  void QuadtreeDepth2(int *A,int xi,int yi);
65  void RangeSearch(int **pindices,int *pnobs,double x,double y,double range);
66 };
67 #endif //_QUADTREE_H
Quadtree::~Quadtree
~Quadtree()
Definition: Quadtree.cpp:106
Quadtree::boxcontainer
DataSet * boxcontainer
Definition: Quadtree.h:44
Quadtree::QuadtreeBox::copy
Object * copy()
Definition: Quadtree.cpp:491
Observation
Definition: Observation.h:10
Quadtree::QuadtreeBox::ycenter
double ycenter
Definition: Quadtree.h:20
Quadtree::QuadtreeBox::Id
int Id()
Definition: Quadtree.h:31
Quadtree::Echo
void Echo(void)
Definition: Quadtree.cpp:294
Quadtree::QuadtreeDepth
void QuadtreeDepth(int *A, int xi, int yi)
Definition: Quadtree.cpp:410
Quadtree::root
QuadtreeBox * root
Definition: Quadtree.h:48
Quadtree::QuadtreeBox
Definition: Quadtree.h:16
Quadtree::QuadtreeBox::IsWithinRange
int IsWithinRange(double x, double y, double range)
Definition: Quadtree.cpp:516
Quadtree::DeepEcho
void DeepEcho(void)
Definition: Quadtree.cpp:284
Quadtree::QuadtreeBox::obs
Observation * obs[4]
Definition: Quadtree.h:24
Object
Definition: Object.h:13
Quadtree::QuadtreeBox::ObjectEnum
int ObjectEnum()
Definition: Quadtree.h:33
Quadtree::Quadtree
Quadtree()
Definition: Quadtree.cpp:83
Quadtree::MaxDepth
int MaxDepth
Definition: Quadtree.h:47
Quadtree::AddAndAverage
void AddAndAverage(double x, double y, double value)
Definition: Quadtree.cpp:197
Quadtree::QuadtreeBox::length
double length
Definition: Quadtree.h:21
Quadtree::NewQuadtreeBox
QuadtreeBox * NewQuadtreeBox(double xcenter, double ycenter, double length)
Definition: Quadtree.cpp:326
Quadtree::QuadtreeBox::box
QuadtreeBox * box[4]
Definition: Quadtree.h:23
Quadtree::QuadtreeBox::Marshall
void Marshall(char **pmarshalled_data, int *pmarshalled_data_size, int marshall_direction)
Definition: Quadtree.h:32
Quadtree::NbQuadtreeBox
int NbQuadtreeBox
Definition: Quadtree.h:49
Quadtree::QuadtreeBox::RangeSearch
void RangeSearch(int *indices, int *pnobs, double x, double y, double range)
Definition: Quadtree.cpp:534
Quadtree::ClosestObs
void ClosestObs(int *pindex, double x, double y)
Definition: Quadtree.cpp:245
Quadtree::RangeSearch
void RangeSearch(int **pindices, int *pnobs, double x, double y, double range)
Definition: Quadtree.cpp:393
_error_
#define _error_(StreamArgs)
Definition: exceptions.h:49
Quadtree::Add
void Add(Observation *observation)
Definition: Quadtree.cpp:115
Quadtree::QuadtreeBox::nbitems
int nbitems
Definition: Quadtree.h:18
Quadtree::IntergerCoordinates
void IntergerCoordinates(int *xi, int *yi, double x, double y)
Definition: Quadtree.cpp:303
Quadtree::NbObs
int NbObs
Definition: Quadtree.h:50
Quadtree::QuadtreeDepth2
void QuadtreeDepth2(int *A, int xi, int yi)
Definition: Quadtree.cpp:437
Quadtree
Definition: Quadtree.h:7
Quadtree::QuadtreeBox::DeepEcho
void DeepEcho()
Definition: Quadtree.h:29
Quadtree::QuadtreeBox::WriteObservations
void WriteObservations(int *indices, int *pnobs)
Definition: Quadtree.cpp:575
DataSet
Declaration of DataSet class.
Definition: DataSet.h:14
Quadtree::QuadtreeBox::Echo
void Echo()
Definition: Quadtree.cpp:507
Quadtree::QuadtreeBox::xcenter
double xcenter
Definition: Quadtree.h:19