48 children[0][0] = children[0][1] = children[1][0] = children[1][1] = NULL;
58 children[0][0] = children[0][1] = children[1][0] = children[1][1] = NULL;
61 init(_x, _y, _half_size_x, _half_size_y);
71 if (v!=NULL)
delete v;
72 delete children[0][0];
73 delete children[0][1];
74 delete children[1][0];
75 delete children[1][1];
91 int Cquadtree::init(
double _x,
double _y,
double _half_size_x,
double _half_size_y){
97 half_size_x = _half_size_x;
98 half_size_y = _half_size_y;
134 double new_half_size_x = 0.5*half_size_x;
135 double new_half_size_y = 0.5*half_size_y;
137 children[0][0] =
new Cquadtree(centre_x-new_half_size_x, centre_y-new_half_size_y,
138 new_half_size_x, new_half_size_y);
139 children[0][1] =
new Cquadtree(centre_x-new_half_size_x, centre_y+new_half_size_y,
140 new_half_size_x, new_half_size_y);
141 children[1][0] =
new Cquadtree(centre_x+new_half_size_x, centre_y-new_half_size_y,
142 new_half_size_x, new_half_size_y);
143 children[1][1] =
new Cquadtree(centre_x+new_half_size_x, centre_y+new_half_size_y,
144 new_half_size_x, new_half_size_y);
151 children[v->eta>centre_x][v->phi>centre_y]->add(v);
159 children[v_add->
eta>centre_x][v_add->
phi>centre_y]->add(v_add);
199 dy = fabs(cy - v->phi);
204 if (dx*dx+dy*dy<cR2){
216 dx_c = fabs(cx-centre_x);
217 dy_c = fabs(cy-centre_y);
218 if (dy_c>M_PI) dy_c = 2.0*M_PI-dy_c;
221 dx = dx_c-half_size_x;
223 dy = dy_c-half_size_y;
227 if (dx*dx+dy*dy>=cR2){
235 dx = dx_c+half_size_x;
236 dy = dy_c+half_size_y;
237 if (dy>M_PI) dy = M_PI;
240 if (dx*dx+dy*dy<cR2){
245 return children[0][0]->circle_intersect(cx, cy, cR2)
246 + children[0][1]->circle_intersect(cx, cy, cR2)
247 + children[1][0]->circle_intersect(cx, cy, cR2)
248 + children[1][1]->circle_intersect(cx, cy, cR2);
267 fprintf(flux,
"%e\t%e\t%e\t%e\n", centre_x, centre_y, half_size_x, half_size_y);
268 children[0][0]->save(flux);
269 children[0][1]->save(flux);
270 children[1][0]->save(flux);
271 children[1][1]->save(flux);
293 if (children[0][0]!=NULL) children[0][0]->save_leaves(flux);
294 if (children[0][1]!=NULL) children[0][1]->save_leaves(flux);
295 if (children[1][0]!=NULL) children[1][0]->save_leaves(flux);
296 if (children[1][1]!=NULL) children[1][1]->save_leaves(flux);
298 fprintf(flux,
"%e\t%e\t%e\t%e\n", centre_x, centre_y, half_size_x, half_size_y);