Полигональные сетки
Полигональные сетки представляют собой совокупность вершин, ребер и многоугольников. В качестве примера на рисунке 28 показана полигональная сетка, состоящая из шести вершин V1…V6, девяти ребер E1…E9, и четырех многоугольников P1…P4.
Сетку можно представить несколькими различными способами .
При явном задании многоугольников каждый многоугольник представляется в виде списка координат его вершин:
Вершины многоугольника запоминаются в том порядке, в котором они встречаются при обходе вокруг многоугольника. Все последовательные вершины многоугольника, а также первая и последняя вершины, соединяются ребрами.
Для описания сетки, показанной на рисунке необходимо описать четыре многоугольника.
P1 = ((x1, y1, z1), (x5, y5, z5), (x6, y6, z6)),
P2 = ((x1, y1, z1), (x2, y2, z2), (x5, y5, z5)),
P3 = ((x2, y2, z2), (x3, y3, z3), (x5, y5, z5)),
P4 = ((x3, y3, z3), (x4, y4, z4), (x5, y5, z5)),
Этот способ записи является эффективным для каждого отдельного многоугольника. Для полигональной сетки этот метод приводит к большим потерям памяти из-за дублирования информации о координатах общих вершин многоугольников, а также не дает явного описания общих ребер и вершин. Для поиска всех многоугольников, имеющих общую вершину, требуется сравнение троек координат одного многоугольника с тройками координат всех остальных многоугольников. Если же из-за ошибок округления одна и та же вершина в разных многоугольниках имеет разные координаты, то результат поиска может быть нулевой.
Рис. 28. Полигональная сетка.
При визуализации полигональной сетки общие ребра рисуются дважды – по одному разу для каждого многоугольника.
При задании многоугольников с помощью указателей в список вершин каждый узел полигональной сетки запоминается лишь один раз в списке вершин. Каждый многоугольник определяется списком указателей в список вершин. Так, для сетки показанной на рисунке XXX придется построить следующее описание.
V = (V1(x1, y1, z1), V2(x2, y2, z2), V3(x3, y3, z3),
V4(x4, y4, z4), V5(x5, y5, z5), V6(x6, y6, z6)),
P1 = (1,5,6), P2 = (1,2,5), P3 = (2,3,5), P4 = (3,4,5).
Этот метод требует меньшего объема памяти, легко изменить, например передвинуть любую вершину, но общие ребра многоугольников по-прежнему рисуются дважды.
При явном задании ребер многоугольников полигональная сетка задается в виде иерархической модели. Координаты каждого узла полигональной сетки запоминаются в списке вершин.
Создается список ребер, где каждое ребро указывает на две вершины в списке вершин. Каждый многоугольник задается как совокупность указателей на элементы списка ребер.
Полигональная сетка изображается вычерчиванием всех ребер (а не всех многоугольников).
Так, для сетки показанной на рисунке XXX придется построить следующее описание.
V = (V1(x1, y1, z1), V2(x2, y2, z2), V3(x3, y3, z3),
V4(x4, y4, z4), V5(x5, y5, z5), V6(x6, y6, z6));
E1 = (1, 2), E2 = (2, 3), E3 = (3, 4), E4 = (4, 5), E5 = (5, 6),
E6 = (6, 1), E7 = (1, 5), E8 = (2, 5), E9 = (3, 5);
P1 = (7,5,6), P2 = (8,7,1), P3 = (2,9,8), P4 = (3,4,9).
Заданную таким способом полигональную сетку наиболее просто проверять на непротиворечивость представления, т.е. на выполнение некоторых условий: что все многоугольники замкнуты, что все ребра используются по крайней мере один раз, но не более некоторого максимального числа раз, что на каждую вершину есть ссылка по крайней мере от двух ребер и т.п. Проверка непротиворечивости представления наиболее важна для полигональных сеток, созданных в интерактивном режиме (например, при оцифровке объектов), когда ошибки практически неизбежны.
Дата добавления: 2016-04-14; просмотров: 1343;