#ifndef QUADTREE_H #define QUADTREE_H #include #include using std::cout; using std::cerr; using std::endl; using std::ios; using std::ofstream; #include using std::vector; #include using std::set; #include "slam6d/globals.icc" // globals constant definitions //#include "defs.h" //#include "plane.h" const int MIN_PTS_IN_BUCKET = -1; /* +++++++++-------------++++++++++++ * CLASS NAME * QuadTree * DESCRIPTION * A quadtree is used to convert an * unbounded 3D plane to a 3D surface, * such that it can be drawn to the * screen. * The code is similar to the octree * class. * PARAMETERS * -- * +++++++++-------------++++++++++++ */ class QuadTree { public: //QuadTree(double **pts, int n, double, Plane *); QuadTree(double **pts, int n, double, double min_angle); ~QuadTree(); vector >& getClusters(); // int outputQuad(char *); // void getQuadTreePoints(vector &quad_x, vector &quad_y, vector &quad_z); // void getQuadTreeColor(double &colorR, double &colorG, double &colorB); private: QuadTree(vector &splitPoints, double center[2], double x_size, double y_size,set &n, set &e, set &s, set &w); int countPoints(double **pts, int n, double center[2], double x_size, double y_size); int countPointsAndQueue(const vector &i_points, vector &points, double center[2], double x_size, double y_size, set &n, set &e, set &s, set &w); int countPointsAndQueue(double **pts, int , vector &points, double center[2], double x_size, double y_size, set &no, set &e, set &s, set &w); // int _OutputQuad(ofstream& quadout); vector > clusters; set north; set south; set east; set west; QuadTree *child[4]; vector points; double center[2]; double x_size, y_size; double size2; int leaf; static int anz; static double qSize; static double dist; static bool close(double *p, set &cluster); static bool close(double *p1, double *p2); static int where(double *p1, vector >& clusters); static vector >& clusterCells(vector > &clusters1, set border1, vector > &clusters2, set border2, vector >&cl); // static Plane *basePlane; }; #endif