Векторная полигональная модель
Для описания пространственных объектов здесь используются такие элементы: вершины, отрезки прямых (векторы), полилинии, полигоны, полигональные поверхности (рис. 6.2).
Элемент "вершина" (vertex) — главный элемент описания, все другие являются производными. При использовании трехмерной декартовой системы координат вершины определяются как (x,y,z). Каждый объект однозначно определяется координатами собственных вершин.
Вершина может моделировать отдельный точечный объект, размер которого не имеет значения, а также может использоваться в качестве конечной точки для линейных объектов и полигонов. Двумя вершинами задается вектор.
Рис. 6.2. Элементы векторно-полигональной модели
Несколько векторов составляют полилинию. Полилиния может моделировать отдельный линейный объект, толщина которого не учитывается, а также может представлять собой контур полигона.
Полигонмоделирует площадный объект. Один полигон может описывать плоскую грань объемного объекта. Несколько граней составляют объемный объект в виде полигональной поверхности — многогранник или незамкнутую поверхность (в литературе часто употребляется название "полигональная сетка").
Векторную полигональную модель можно считать наиболее распространенной в современных системах трехмерной КГ. Ее используют в системах автоматизированного проектирования, в компьютерных играх, в геоинформационных системах и т. п.
Рассмотрим структуры данных, которые используются в векторной полигональной модели. В качестве примера объекта будет куб. Рассмотрим, как можно организовать описание такого объекта в структурах данных.
Рис. 6.3. Первый способ описания
Первый способ. Сохраняем все грани в отдельности
Рис. 6.4. Отдельные грани
В компьютерной программе такой способ описания объекта можно реализовать разнообразно. Например, для каждой грани открывать в памяти отдельный массив. Можно все грани записывать в один массив-вектор (это уже лучше). А можно использовать классы (язык С++) как для описания отдельных граней, так и объектов в целом. Можно создавать структуры, которые объединяют тройки (x, у, z), или сохранять координаты в отдельности. Принципиально это мало что меняет — так или иначе в памяти необходимо сохранять координаты вершин граней плюс некоторую информацию в качестве накладных затрат.
Рассчитаем объем памяти, необходимый для описания куба указанным способом:
П1 = 6 х 4 х 3 x Pв
где Pв — разрядность чисел, которые используются для представления координат вершин. Шесть граней здесь описываются 24 вершинами. Такое представление избыточно — каждая вершина записана трижды. Не учитывается то, что у граней есть общие вершины.
Рис. 6.5. Индексы вершин
Второй способописания. Для этого варианта координаты восьми вершин сохраняются без повторов. Вершины пронумерованы (рис. 6.5), а каждая грань представлена в виде списка индексов вершин (рис. 6.6).
Рис. 6.6. Второй способ описаня
Оценим затраты памяти:
П2 = 8 x 3 x Pв +6 x 4 x Pиндекс
где Pв — разрядность координат, Pиндекс — разрядность индексов.
Третий способ.Пронумеруем также и ребра (рис. 6.7). Будем сохранять грани в виде списка индексов ребер. Каждое ребро будет, в свою очередь, представлено списком индексов вершин. Этот способ в литературе иногда называют "линейно-узловой " моделью.
Оценим затраты памяти:
П3 = 8 x 3 x Pв +12 x 2 x Pиндекс верш. +6 x4 x Риндекс ребер
где Pв - разрядность координат, Pиндекс верш. и Риндекс ребер - разрядность индексов вершин и ребер
Рис. 6.7. Индексы вершин и ребер
Рис. 6.8. Линейно-узловая модель
Дата добавления: 2015-01-29; просмотров: 1421;