Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ol / ol / Пояснительная записка_oll.doc
Скачиваний:
32
Добавлен:
16.04.2013
Размер:
4 Мб
Скачать
        1. Алгоритм отображения дерева

Вначале приведены общепринятые принципы построения деревьев (рис. 1.3.3.2.1). При построении генеалогического дерева сейчас придерживаются некоторых стандартных простых условных обозначений и правил.

  1. Мужчины всегда изображаются в виде квадратов, женщины - в виде окружностей.

  2. Графически изображаемые связи между членами родословной бывают только трех видов: "мужья-жены", "дети-родители" и "братья-сестры".

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

  4. Ваши дети изображаются на горизонтальном уровне ниже Вашего, а Ваши родители - на горизонтальном уровне выше Вашего. То же самое относится к детям и родителям всех Ваших братьев и сестер.

  5. Все поколения нумеруются сверху вниз римскими цифрами, а все индивидуумы в каждом поколении - слева направо арабскими цифрами. Это позволяет обозначить каждого человека личным идентификационным номером (например - III:15, что означает 15-й индивидуум в третьем поколении).

Родословное древо выглядит красиво и наглядно, но оно не может дать подробную информацию об упоминаемых в нем личностях.

Рис. 1.3.3.2.1 Общепринятый принцип построения деревьев

В общем алгоритме программы рис.1.3.1 этот этап записан как просмотр дерева. На рис. 1.3.3.2.2 графически показан алгоритм, использованный для визуализации дерева. В программе данные алгоритмы реализованы в модуле Pr1.pas. Главный алгоритм состоит из двух процедур CreateMas и DrawTree, включающих в себя еще процедуры.

Рис. 1.3.3.2.2 Общий алгоритм рисования дерева

На рисунках 1.3.3.2.3 и 1.3.3.2.4 алгоритмы процедур CreateMas и DrawTree представлены подробнее.

CreateMas формирует массив pArPok, который будет удобен для осуществления визуализации генеалогического дерева. На том этапе, когда пришел этап рисования дерева, данные находятся в одномерном массиве записей PersonAr. Данные поступают в массив из файла *.tre. На месте * обычно записывается фамилия родословной. Процедура CreateMas включает в себя еще процедуры: CreateArpok, SortArpok, FormXY, SizePanel.

  • CreateArpok: создаем двумерный массив pArPok из массива PersonAr таким образом, чтобы на каждой строке массива находились люди одного поколения. Причем первой строчке массива соответствует самое старшее поколение людей, последней –самое младшее.

Рис. 1.3.3.2.3 Схемы алгоритма процедуры Рис. 1.3.3.2.4 Схема алгоритма процедуры создания двумерного рисования дерева (DrawTree).

массива (CreateMas).

  • SortArpok: проводим сортировку массива pArPok так, чтобы в каждой строке массива записи, соответствующие мужу и жене, находились рядом. Это будет в дальнейшем удобно для рисования самих узлов, отображающих этих людей и связей между ними.

  • FormXY: формируются координаты каждого узла-человека. В каждой записи есть поля xp и yp. До этого момента этим координатам присвоены нули. Затем эти поля записи равны тем координатам экрана, на местах которых будут находится узлы дерева – кружочки или квадратики.

  • SizePanel: рассчитываются получившиеся размеры рисунка дерева.

После выполнения этих процедур корректируются координаты узлов дерева в соответствии с размерами рисунка дерева и экрана. Массив сформирован должным образом. Далее алгоритм переходит к процедуре DrawTree.

Процедура DrawTree осуществляет непосредственно рисование самого дерева. Сначала рисуются узлы дерева. Если персона женского пола, то рисуется розовый кружочек, мужского пола – голубой квадратик. Далее прорисовываются горизонтальные линии-связи, соединяющие мужа и жену, затем вертикальные линии-связи, соединяющие родителей и их детей. Рисование связи мама-папа, не находящихся в браке, но имеющих общих детей, отображается горизонтально пунктирной линией. Эта линия будет чуть ниже, чем линия, соединяющая мужа и жену. Это линия выполняется следующим блоком алгоритма. Далее выполняется линия-связь мама-ребенок или папа-ребенок, т.е. известен только один родитель. Если муж и жена находятся в разных поколениях, то эта связь – кривая линия. Более подробно все эти блоки рисования будут рассмотрены ниже – в рабочем проекте.

Соседние файлы в папке ol