#include <Quadtree.h>
|
| Quadtree () |
|
| Quadtree (double xmin, double xmax, double ymin, double ymax, int maxdepth_in) |
|
| ~Quadtree () |
|
void | Add (Observation *observation) |
|
void | AddAndAverage (double x, double y, double value) |
|
void | ClosestObs (int *pindex, double x, double y) |
|
void | DeepEcho (void) |
|
void | Echo (void) |
|
void | IntergerCoordinates (int *xi, int *yi, double x, double y) |
|
QuadtreeBox * | NewQuadtreeBox (double xcenter, double ycenter, double length) |
|
QuadtreeBox * | NewQuadtreeBox (QuadtreeBox *master, int index) |
|
void | QuadtreeDepth (int *A, int xi, int yi) |
|
void | QuadtreeDepth2 (int *A, int xi, int yi) |
|
void | RangeSearch (int **pindices, int *pnobs, double x, double y, double range) |
|
Definition at line 7 of file Quadtree.h.
◆ Quadtree() [1/2]
◆ Quadtree() [2/2]
Quadtree::Quadtree |
( |
double |
xmin, |
|
|
double |
xmax, |
|
|
double |
ymin, |
|
|
double |
ymax, |
|
|
int |
maxdepth_in |
|
) |
| |
◆ ~Quadtree()
◆ Add()
Definition at line 115 of file Quadtree.cpp.
118 int xi,yi,ij,level,levelbin;
119 QuadtreeBox **pbox = NULL;
120 QuadtreeBox **pmaster = NULL;
121 QuadtreeBox *box = NULL;
122 QuadtreeBox *slave = NULL;
126 xi = observation->
xi;
127 yi = observation->
yi;
138 while((box=*pbox) && (box->nbitems<0)){
145 pbox = &box->box[
IJ(xi,yi,levelbin)];
150 while((box=*pbox) && (box->nbitems==4)){
153 obs[0] = box->obs[0];
154 obs[1] = box->obs[1];
155 obs[2] = box->obs[2];
156 obs[3] = box->obs[3];
169 for (
int k=0;k<4;k++){
172 ij =
IJ(obs[k]->xi,obs[k]->yi,levelbin);
173 slave = box->box[ij];
176 slave = box->box[ij];
178 slave->obs[slave->nbitems++] = obs[k];
182 ij =
IJ(xi,yi,levelbin);
184 pbox = &box->box[ij];
190 ij =
IJ(xi,yi,levelbin);
193 box->obs[box->nbitems++]=observation;
◆ AddAndAverage()
void Quadtree::AddAndAverage |
( |
double |
x, |
|
|
double |
y, |
|
|
double |
value |
|
) |
| |
Definition at line 197 of file Quadtree.cpp.
199 QuadtreeBox **pbox = NULL;
200 QuadtreeBox *box = NULL;
204 double length,length2;
216 while((box=*pbox) && (box->nbitems<0)){
218 pbox = &box->
box[
IJ(xi,yi,levelbin)];
222 if(box && box->nbitems==4){
224 length = pow(box->obs[0]->x - x,2) + pow(box->obs[0]->y - y,2);
225 for(
int i=1;i<4;i++){
226 length2 = pow(box->obs[i]->x - x,2) + pow(box->obs[i]->y - y,2);
234 box->obs[index]->x = (box->obs[index]->weight*box->obs[index]->x + x)/(box->obs[index]->weight+1.);
235 box->obs[index]->y = (box->obs[index]->weight*box->obs[index]->y + y)/(box->obs[index]->weight+1.);
236 box->obs[index]->xi= int((box->obs[index]->weight*
double(box->obs[index]->xi) +
double(xi))/(box->obs[index]->weight+1.));
237 box->obs[index]->yi= int((box->obs[index]->weight*
double(box->obs[index]->yi) +
double(yi))/(box->obs[index]->weight+1.));
238 box->obs[index]->value = (box->obs[index]->weight*box->obs[index]->value + value)/(box->obs[index]->weight+1.);
239 box->obs[index]->weight += 1.;
◆ ClosestObs()
void Quadtree::ClosestObs |
( |
int * |
pindex, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
Definition at line 245 of file Quadtree.cpp.
247 QuadtreeBox **pbox = NULL;
248 QuadtreeBox *box = NULL;
252 double length,length2;
264 while((box=*pbox) && (box->nbitems<0)){
266 pbox = &box->
box[
IJ(xi,yi,levelbin)];
270 if(box && box->nbitems>0){
272 length = pow(box->obs[0]->x - x,2) + pow(box->obs[0]->y - y,2);
273 for(
int i=1;i<box->nbitems;i++){
274 length2 = pow(box->obs[i]->x - x,2) + pow(box->obs[i]->y - y,2);
276 index = box->obs[i]->index;
◆ DeepEcho()
void Quadtree::DeepEcho |
( |
void |
| ) |
|
◆ Echo()
void Quadtree::Echo |
( |
void |
| ) |
|
◆ IntergerCoordinates()
void Quadtree::IntergerCoordinates |
( |
int * |
xi, |
|
|
int * |
yi, |
|
|
double |
x, |
|
|
double |
y |
|
) |
| |
Definition at line 303 of file Quadtree.cpp.
323 *xi=int(coefficient*(x - xmin));
324 *yi=int(coefficient*(y - ymin));
◆ NewQuadtreeBox() [1/2]
Definition at line 326 of file Quadtree.cpp.
329 QuadtreeBox* newbox=NULL;
332 newbox=
new QuadtreeBox();
334 newbox->xcenter=xcenter;
335 newbox->ycenter=ycenter;
336 newbox->length=length;
◆ NewQuadtreeBox() [2/2]
Definition at line 349 of file Quadtree.cpp.
352 QuadtreeBox* newbox=NULL;
358 newbox=
new QuadtreeBox();
366 newbox->xcenter=master->xcenter - master->length/4;
367 newbox->ycenter=master->ycenter - master->length/4;
370 newbox->xcenter=master->xcenter + master->length/4;
371 newbox->ycenter=master->ycenter - master->length/4;
374 newbox->xcenter=master->xcenter - master->length/4;
375 newbox->ycenter=master->ycenter + master->length/4;
378 newbox->xcenter=master->xcenter + master->length/4;
379 newbox->ycenter=master->ycenter + master->length/4;
382 _error_(
"Case " << index <<
" not supported");
384 newbox->length=master->length/2;
◆ QuadtreeDepth()
void Quadtree::QuadtreeDepth |
( |
int * |
A, |
|
|
int |
xi, |
|
|
int |
yi |
|
) |
| |
Definition at line 410 of file Quadtree.cpp.
412 QuadtreeBox **pbox = NULL;
413 QuadtreeBox *box = NULL;
424 while((box=*pbox) && (box->nbitems<0)){
428 pbox = &box->box[
IJ(xi,yi,levelbin)];
430 if(box && box->nbitems>0){
◆ QuadtreeDepth2()
void Quadtree::QuadtreeDepth2 |
( |
int * |
A, |
|
|
int |
xi, |
|
|
int |
yi |
|
) |
| |
Definition at line 437 of file Quadtree.cpp.
439 QuadtreeBox **pbox = NULL;
440 QuadtreeBox *box = NULL;
451 while((box=*pbox) && (box->nbitems<0)){
453 levelbin>>=1; level+=1;
455 pbox = &box->
box[
IJ(xi,yi,levelbin)];
457 if(box && box->nbitems>0){
463 if(box && box->nbitems==4){
468 levelbin>>=1; level+=1;
475 ij=
IJ(box->obs[0]->xi,box->obs[0]->yi,levelbin);
476 for (
int k=1;k<4;k++){
477 if(
IJ(box->obs[k]->xi,box->obs[k]->yi,levelbin) != ij){
481 if(
IJ(xi,yi,levelbin)!=ij){
◆ RangeSearch()
void Quadtree::RangeSearch |
( |
int ** |
pindices, |
|
|
int * |
pnobs, |
|
|
double |
x, |
|
|
double |
y, |
|
|
double |
range |
|
) |
| |
◆ boxcontainer
◆ MaxDepth
◆ root
◆ NbQuadtreeBox
int Quadtree::NbQuadtreeBox |
◆ NbObs
The documentation for this class was generated from the following files: