Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп_Граф / КГ_курс лекций.doc
Скачиваний:
191
Добавлен:
08.06.2015
Размер:
1.31 Mб
Скачать

2.10. Программная организация данных для представления сложных объектов

ТМО позволяют синтезировать сложные фигуры из более простых, что приводит к появлению объектов с иерархической структурой. Объектами нижнего уровня являются используемые примитивы, а объектами верхнего – конечные сложные фигуры (рис. 2.18). Число уровней иерархии в принципе не ограничивается.

Рис. 2.18

Для представления таких объектов в программных модулях должны быть созданы соответствующие структуры данных. Наиболее гибким решением по реализации произвольных сложных структур данных является использование ссылок.

Примеры записи структур данных, приведенные ниже, даны на языке Pascal. Тип TColor считается определенным и назначается для переменных, задающих коды цветов.

Примитивы с фиксированным числом параметров описываются объектами с соответствующими полями. Например, для отрезков (векторов) можно использовать структуру вида

Type

Vector = record

x1, y1, x2, y2: Integer;

Color: TColor;

End;

Для описания правильных многоугольников можно использовать следующую структуру:

Type

TrPoligon = record

Name: String; {наименование многоугольника}

N: Integer; {количество сторон}

xс, yс: Integer; {центр описанной окружности}

R: Integer; {радиус описанной окружности}

Color: TColor;

End;

Для примитивов с переменным числом параметров, таких, как произвольные многоугольники или сплайны, переменную часть – список вершин – удобно представлять кольцевой списковой структурой на основе ссылок (рис. 2.19).

Рис. 2.19

Достоинством списковой структуры является простота реализации операций по добавлению в любое место списка новых элементов и удалению любых элементов из списка.

Более сложные графические объекты, синтезируемые с помощью ТМО, удобнее представить в едином формате, не зависящем от конкретных операндов и вида ТМО.

Type

GrObject = record

Name: String; {наименование объекта}

TMO: byte; {код ТМО}

P1, P2: Pointer; {указатели на операнды ТМО}

Color: TColor;

End;

Поскольку число конечных графических объектов в процессе работы программы может меняться, их также целесообразно объединить в общий список. Для этого в приведенную выше структуру данных необходимо добавить дополнительную ссылку Next для связывания объектов.

Type

PGrObject: ^GrObject; {тип указателей на элементы списка объектов}

GrObject = record {геометрический объект}

Name: String; {наименование объекта}

TMO: byte; {код ТМО или типа примитива}

P1, P2: Pointer; {указатели на операнды ТМО}

Next: PGrObject; {указатель на следующий объект в списке}

Color: TColor;

End;

Приведенный тип позволяет объединить в единый список и отдельные примитивы и фигуры любой сложности, полученные с помощью ТМО. Для примитивов один из указателей, например P1, необходимо использовать для ссылки на описание примитива, а второй – не использовать.

На рис. 2.20 в качестве примера организации сложной структуры приведена структура данных для объекта Fig1, иерархическая структура которого приведена на рис. 2.18, и еще одного объекта Fig2, созданного из двух примитивов. На рис. 2.20 переменная FirstPt типа PGrObject является указателем на начало списка фигур.

Рис. 2.20

Обычно над фигурами, полученными с помощью ТМО, также выполняются геометрические преобразования. Если для их реализации используется интегральная форма, то параметры геометрических преобразований, например, матрицу результирующего преобразования, следует размещать в дополнительном поле каждого объекта типа GrObject.

Лекция 3. Геометрические преобразования на плоскости

Соседние файлы в папке Комп_Граф