Скачиваний:
17
Добавлен:
01.05.2014
Размер:
2.31 Кб
Скачать
#ifndef MNSTR

#define MNSTR
#include "CommonStructures.h"

class QTree;
///////////////////////////////////////////////////////////
//Класс, определяющий сетку m*m
///////////////////////////////////////////////////////////
class Grid {
private:
	int m;				//размерность сетки
	int m_cellSize;	//размер ячейки
	List ***m_pGrid;	//матрица ячеек сетки
public:
	//конструкторы
	Grid(void);
	Grid(int domainSize,List s,int n,int _m);
	//деструктор
	~Grid(void);
	//создание сетки (инициализация новыми параметрами)
	void Create(int domainSize,List s,int n,int _m);
	//запрос по области
	List *RangeQuery(Rect &range);

	friend class QTree;
};


///////////////////////////////////////////////////////////
//Класс, определяющий узел квадрантного дерева
///////////////////////////////////////////////////////////
class QTreeNode {
private:
	QTreeNode *child[4];	//дочерние поддеревья
	List *pts;				//указатель на список точек, покрываемых
							//данным квадрантом
	int m_size;				//размер данного квадранта
	//запрос по области
	List *RangeQuery(Rect &range,Rect &quadrant,int &level,
					 const int Index,Rect &curRange,ELEMENT &curPoint);
	//вычисление квадранта, накрываемого данным узлом
	Rect Quadrant(Rect &s,int i);
	//является ли текущий узел внешним
	int isExternal();
	//отображение квадранта, накрываемого данным узлом
	void Draw(Rect&,CDC*);
public:
	//конструкторы
	QTreeNode(List*);
	QTreeNode(void);
	//деструктор
	~QTreeNode(void);

	friend class QTree;
};


///////////////////////////////////////////////////////////
//Класс, определяющий квадрантное дерево
///////////////////////////////////////////////////////////
class QTree {
private:
	QTreeNode *m_root;		//корень дерева
	Rect m_domain;			//область поиска
	//осуществляет построение дерева
	QTreeNode *BuildQTree(Grid &G,int M,int D,int level,int,int,int,int,List &steps);
public:
	//конструкторы
	QTree(void);
	QTree(Grid &G,int M,int D,List &steps);
	//деструктор
	~QTree();
	//создание новой структуры дерева
	void Create(Grid &G,int M,int D,List &steps);
	//запрос по области
	List *RangeQuery(Rect &range,int &level,const int Index,
					 Rect &curRange,ELEMENT &curPoint);
		//отображение сетки построенного дерева
	void DrawQTree(CDC*);
};

#endif
Соседние файлы в папке src