Удаление элементов из дерева, подсчет количества элементов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Удаление элемента производится путем выделения точки с помощью мыши в окне просмотра в режиме выделения точек и щелчка по кнопке «Удалить точку» (рис. 2)

 

 

 

Рис. 2

 

Результат: удаление точки из дерева и его перерисовка; уменьшение количества точек в дереве на единицу.

Очистка дерева

Очистка дерева (удаление всех элементов) производится щелчком по кнопке «Удалить все» (рис. 3)

 

 

Рис. 3

 

Результат: удаление всех элементов дерева и соответствующая перерисовка изображений

Возможность выбора прямоугольной области карты для просмотра содержащихся в ней точек, поиск точек в заданной прямоугольной области карты

Выбор области просмотра осуществляется перемещением окна выделения с помощью мыши или клавиш (рис. 4)

 

 

 

Рис. 4

 

Результат: перемещение окна выделения, поиск и отрисовка точек, находящихся в выделенной области карты.

Отображение элементов дерева в виде точек на карте, отображение координат выбираемых точек

Выбор точки производится с помощью щелчка левой кнопкой мыши по точке с нужными координатами в режиме выбора точек (рис. 5)

 

 

Рис. 5

 

Результат: отображение координат выбранной точки в строке состояния; перерисовка соответствующим цветом ее изображения в окне просмотра.

 

Отображение точек заданной области карты в отдельном окне просмотра, отображение координат выбираемых точек

Для получения координат точки без ее выделения достаточно навести указатель мыши на ее изображение в окне просмотра (рис. 6)

 

 

Рис. 6

 

Результат: отображение координат точки в строке состояния без ее выбора; перерисовка соответствующим цветом ее изображения в окне просмотра.



Рабочий проект

 

Модуль UnitModel

 

Назначение

Данный модуль представляет собой реализацию модели структуры данных «Q-дерево точек».

 

2.1.2 Функциональные требования, реализуемые модулем

·   Возможность добавления элементов в дерево

·   Удаление элементов из дерева

·   Очистка дерева

·   Поиск точек в заданной прямоугольной области карты.

 

Глобальные переменные и константы модуля

Константы

· М = 3 – максимальное число точек в листе;

- тип – целый;

- область видимости – внутри и вне модуля;

- используется в операциях вставки и удаления элементов дерева для проверки числа точек в листьях.

 

Подпрограммы модуля

Функция InsertPoint

· Функция предназначена для вставки нового элемента в Q-дерево

· Параметры

- выходной параметр – указатель на узел дерева, в которое вставляется элемент (тип PNode);

- входной параметр – границы этого узла (тип TRect);

- входной параметр – координаты вставляемой точки (тип TPoint);

· Функция возвращает логическое значение (тип boolean), указывающее на изменение количества элементов в дереве    

· Локальные переменные

- CurNode – текущий квадрант (тип PNode);

- DopArray – дополнительный массив, необходимый при делении листа на новые узлы (тип TArrayOfPoints);

- midX, midY – координаты середины узла (тип real);

- NewBounds – границы нового узла, передаваемые в качестве параметра в рекурсивном вызове функции (тип TRect);

- i – счетчик цикла (тип integer).

· Словесный алгоритм

В начале своей работы функция проверяет, не является ли пустым параметр-указатель; если да, то для него выделяется память, устанавливаются начальные значения полей и вставляется новый элемент. Если он не является листом, осуществляется цикл переходов к листу с нужными границами. Далее проверяется число элементов в листе, и, если оно меньше допустимого, туда вставляется новая точка; иначе этот лист разделяется на 4 новых, его точки рекурсивно распределяются по новым листам и затем – вставка новой точки.

Процедура DeletePoint

· Процедура предназначена для удаления элемента из Q-дерева

· Параметры

- выходной параметр – указатель на корневой узел дерева, из которого удаляется элемент (тип PNode);

- входной параметр – границы этого узла (тип TRect);

- входной параметр – координаты вставляемой точки (тип TPoint);

· Предусловия

Указатель на дерево не должен быть пустым

· Локальные переменные

- CurNode – текущий квадрант (тип PNode);

- ParentNode – родительский узел листа с удаляемой точкой;

- DopArray – дополнительный массив, необходимый при делении листа на новые узлы (тип TArrayOfPoints);

- midX, midY – координаты середины узла (тип real);

- PointsInNodes, numSZ, numSV, numYZ, numYV – переменные, использующиеся при подсчете числа точек в листах (тип real);

- there – индикатор наличия точки в дереве (тип boolean);

- N – число точек в листе (тип integer);

- i – счетчик цикла (тип integer).

· Словесный алгоритм

В начале своей работы функция проверяет, не является ли пустым параметр-указатель; если да – выход из подпрограммы. Если он не является листом, осуществляется цикл переходов к листу с нужными границами. Далее проверяется наличие точки в листе, и, если она там не обнаружена, процедура заканчивает свою работу; иначе происходит удаление точки из листа и последующая проверка общего числа точек в соседних листах. Если появилась возможность, соседние листы объединяются в один, старые удаляются.

 

Процедура ClearTree

· Процедура предназначена для удаления всех элементов Q-дерева

· Параметры

- выходной параметр – указатель на узел дерева (тип PNode);

· Предусловия

Указатель на дерево не должен быть пустым

· Словесный алгоритм

В начале своей работы функция проверяет, не является ли пустым параметр-указатель; если да – выход из подпрограммы. Если он не является листом, осуществляются рекурсивные вызовы подпрограммы для каждого из его дочерних узлов; если параметр-указатель является листом, подпрограмма освобождает занятую им память и завершает свою работу.

 

Функция Find

· Функция предназначена для поиска элементов Q-дерева, расположенных в заданной области карты

· Параметры

- входной параметр – указатель на узел дерева (тип PNode);

- параметр-константа – границы этого узла (тип TRect);

- параметр-константа – границы заданной области карты (тип TRect);

· Функция возвращает список (тип TList) элементов дерева, расположенных в заданной области

· Предусловия

Указатель на дерево не должен быть пустым

· Локальные переменные

- NewBounds – границы нового узла, передаваемые в качестве параметра в рекурсивном вызове функции (тип TRect);

- i – счетчик цикла (тип integer).

· Словесный алгоритм

В начале своей работы функция проверяет, не является ли пустым параметр-указатель; если да – выход из подпрограммы. Если часть площади узла находится в заданной области, осуществляются рекурсивные вызовы подпрограммы для каждого из его дочерних узлов. Для достигнутых таким образом листьев происходит проверка точек на принадлежность заданной области.

 

Процедура SetProperties

· Процедура предназначена для выделения памяти и установки начальных характеристик для нового узла

· Параметры

- выходной параметр – указатель на узел дерева (тип PNode);

· Словесный алгоритм

Для нового узла, переданного в качестве параметра, выделяется память, устанавливаются начальные характеристики: тип узла (лист) и количество точек в нем (0).

· Подпрограмма используется функцией вставки точек в дерево при разделении листа на 4 новых.

 

Процедура CopyPoints

· Процедура предназначена для копирования точек из листа в дополнительный массив

· Параметры

- входной параметр – указатель на узел дерева, из которого происходит копирование (тип PNode);

- выходной параметр – дополнительный массив, необходимый при делении листа на новые узлы (тип TArrayOfPoints);

- выходной параметр – счетчик элементов в дополнительном массиве (тип integer).

· Локальные переменные

- j – счетчик цикла (тип integer).

· Словесный алгоритм

Подпрограмма копирует значения точек из данного листа в дополнительный массив, одновременно увеличивая число его элементов, передаваемое в качестве параметра.

· Подпрограмма используется функцией удаления точек из дерева при объединении 4-х листов в один.

 

Модуль UnitMainForm

 

Назначение

В данном модуле описаны методы работы с Q-деревом точек

 

2.2.2 Функциональные требования, реализуемые модулем

· Подсчет количества элементов в дереве

· Отображение элементов дерева в виде точек на карте

· Возможность выбора области карты для просмотра содержащихся в ней точек

· Отображение точек заданной области карты в отдельном окне просмотра

· Отображение координат выбранных точек

Используемые компоненты

Имя компонента Класс

Настраиваемые

свойства

Значения Обработанные события

1

MainForm

TMainForm

BorderStyle

bsSingle

OnCreate;

OnKeyDown

Caption

Q-дерево

KeyPreview

True
2 MaxImage TImage

OnCreate; OnMouseMove
3 MinImage TImage

4

ShapeView

TShape

Brush Style bsClear

OnMouseDown;

OnMouseMove;

OnMouseUp

Pen Color clRed
Имя компонента Класс Настраиваемые свойства Значения Обработанные события

5

SBtnCursor

TSpeedButton

Down True

GroupIndex 1
6 SBtnPoints TSpeedButton GroupIndex 1

7

ButtonDelete

TBitBtn

Caption Удалить точку

OnClick

Enabled False
ShowHint True
Hint Удалить выбранную точку

8

ButtonClear

TBitBtn

Caption Удалить все

OnClick

ShowHint True
Hint Удалить все точки дерева
9 StatusBar TStatusBar

Дата: 2019-07-24, просмотров: 187.