Крылатый край - Winged edge

Графическое представление записи края. Обратите внимание, что ссылки на края выглядят как крылья.

В компьютерная графика, то крылатый край структура данных это способ представить полигональные сетки в памяти компьютера. Это тип граничное представление и описывает как геометрию, так и топология модели. Используются три типа записей: записи вершин, записи ребер и записи лиц. Имея ссылку на запись о ребре, можно ответить на несколько типов запросов о смежности (запросы о соседних ребрах, вершинах и гранях) за постоянное время. Такая информация о смежности полезна для таких алгоритмов, как Подразделение поверхности.

Функции

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

Point on edge.png

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

Структура и псевдокод

Записи граней и вершин относительно просты, а запись ребер более сложна. Для каждой вершины ее запись хранит только положение вершины (например, координаты) и ссылку на одно инцидентное ребро (другие ребра можно найти, следуя дальнейшим ссылкам на ребре). Точно так же каждая запись лица хранит ссылку только на один из краев, окружающих лицо. Наконец, структура записи края выглядит следующим образом. Ребро предполагается направленным. Запись ребра содержит две ссылки на вершины, составляющие конечные точки ребра, две ссылки на грани по обе стороны от ребра и четыре ссылки на предыдущие и следующие ребра, окружающие левую и правую грань. Короче говоря, запись ребра имеет ссылки на все смежные записи, как при обходе соседней вершины, так и вокруг смежной грани.

class Edge {Vertex * vert_origin, * vert_destination; Лицо * face_left, * face_right; Edge * edge_left_cw, * edge_left_ccw, * edge_right_cw, * edge_right_ccw;} класс Vertex {float x, y, z; Edge * edge;} class Face {Edge * edge;}

Смотрите также

внешние ссылки