450 likes | 729 Views
Лекция 1 . Сетки: определения и структуры данных. Высокопроизводительные методы геометрического моделирования. Михаил Бессмельцев к.ф.-м.н . Ольга Нечаева. Определения. Графы, Планарность, Триангуляция, Делоне , Сетки. Graphs Графы. Сетка – это частный случай неориентированного графа.
E N D
Лекция 1. Сетки: определения и структуры данных Высокопроизводительные методыгеометрического моделирования Михаил Бессмельцев к.ф.-м.н. Ольга Нечаева
Определения Графы, Планарность, Триангуляция, Делоне , Сетки
GraphsГрафы • Сетка – это частный случай неориентированного графа • G = <V, E> • V – вершины (A,B,…) • E – ребра (AB, BC, …) • Цикл – например, AJLCB • Степень вершины – кол-во ребер, инцидентных вершине • deg(B) = 3, deg(K) = 4 • Грань – циклбез ребер/вершин внутри
Planar GraphsПланарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми
Planar Graphs Планарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми
Planar Graphs Планарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми
Триангуляция • Триангуляция – планарный граф с прямыми ребрами, все грани которого – треугольники. • Триангуляция – разбиение исходного множества точек на треугольники (непересекающиеся) (вершины треугольников – точки множества) • Триангуляций множества точек может быть много.
Триангуляция Делоне • Триангуляция Делоне – хорошая триангуляция. • Триангуляция является ~ Делоне, если внутри описанной окружности любого треугольника нет вершин триангуляции (точек). • В 2D для данного множества точек триангуляция Делоне существует (возможно, не одна).
MeshesСетки • Сетка – граф с прямыми ребрами в R3. • Граничные ребра – ребра, содержащиеся ровно в одном треугольнике. • Обычные ребра – ребра, содержащиеся ровно в 2х треугольниках. • Сингулярные ребра – > 2 треугольников. • Замкнутая сетка – сетка без граничных ребер. • Manifold mesh (многообразия) – сетка без сингулярных ребер.
Planar graphs & meshesПланарные графы и сетки • Любая сетка многообразия является планарной! • (почти)
Где и как используются структуры данных для сеток?
Где и как используются структуры данных для сеток? • Для рендеринга (отрисовки) • Для обработки/вычислений: • Вопросы типа • Какие вершины у треугольника номер ##? • Смежны ли вершины i и j? • Какие соседи у треугольника ##? • Операции • Вставить/удалить треугольник • Вставить/удалить вершину • Сделать общую универсальную структуру данных - маловероятно
Чем отличаются структуры данных? • Временная сложность создания • Временная сложность изменения • Временная сложность ответа на вопросы про соседей/смежность • Простота самой структуры (важно для портирования/распараллеливания) • Ёмкостная сложность (точнее, сколько занимает памяти эта структура)
Список граней (треугольников)GeomPrimitives::TriangulationData • Структура состоит из: • Списка координат вершин • TriangulationData::getAllPoints(); //возвращает все вершины • TriangulationData::getPoint (i); • Списка треугольников • TriangulationData::getAllTriangles(); • TriangulationData::getTriangle(i); • Ответ на вопрос «Какие вершины у треугольника номер ##» занимает O(1) • Ответ на вопрос, смежны ли вершины iи j, занимает O(|E|) – неэффективно
v6 v3 f3 f1 f2 f4 v1 v4 v5 v2 Список граней - пример
Список граней: плюсы и минусы • Удобная и простая • Эффективная (занимает мало памяти) • Универсальная (нет ограничений на дырки или сингулярные ребра) • Слишком простая: нет дополнительной информации вроде соседей треугольника
Adjacency MatrixМатрица смежности • Матрица смежности может задавать, вообще говоря, произвольный граф • Пусть у нас есть nвершин. Матрица смежности – матрица n*n {ei,j}: • ei,j = true, если вершины iи jсмежны. • ei,j = false, else. • Кроме самой матрицы, нужно хранить список координат вершин • Дополнительно храним треугольники – тройки номеров
v6 v3 f3 f1 f2 f4 v1 v4 v5 v2 Adjacency Matrix : exampleМатрица смежности: пример
Матрица смежности: эффективность • Какие вершины в треугольнике ##? • O(1) – посмотреть соотв. элемент списка треугольников • Смежны ли вершины i и j? • O(1) – проверить соответствующий элемент в матрице. • В каких треугольниках содержится вершина i? • O(|Faces|) – придется пробежатьвсе грани/треугольники
Adjacency Matrix : pros and consМатрица смежности: плюсы и минусы • Любые вопросы о смежности отвечаются мгновенно – O(1) • Универсальная • Расходуется слишком много памяти (|V|2). Редко применяется для сеток, скорее с её помощью описывают графы, близкие к полным (|E|≈|V|2). • По вершине сложно найти треугольник
next(e) IncFace(e) e prev(e) twin(e) origin(e) Half-Edge structureПолуреберная структура • Для каждой вершины храним • Координаты • Указатель на какое-нибудь «полуребро», началом которого является эта вершина • Для каждого треугольника храним • Указатель на какое-нибудь «полуребро» этого треугольника
next(e) IncFace(e) e prev(e) twin(e) origin(e) Half-Edge structureПолуреберная структура • Полуребро – это • Указатель на начало: origin(e) • Указатель на двойственное полуребро - twin(e) • Указатель на треугольник, которому оно принадлежит – IncidentFace(e)(положительный обход контура) • Указатели на следующее и предыдущее полуребра в треугольнике – next(e) иprev(e)
Half-Edge structure: EfficiencyПолуреберная структура: Эффективность • Большинство операций выполняются за O(1) • Основные операции: • Пробежать по границе (ребра+вершины) какого-то треугольника • Пробежать все ребра, инцидентные v
v6 v3 e6,1 e4,2 f3 e4,1 e7,1 e7,2 e9,1 e1,1 e3,2 f1 f2 f4 e3,1 v1 e8,1 v4 e2,1 e5,1 v5 v2 Half-Edge structure: ExampleПолуреберная структура: Пример
v6 v3 e6,1 e4,2 f3 e4,1 e7,1 e7,2 e9,1 e1,1 e3,2 f1 f2 f4 e3,1 v1 e8,1 v4 e2,1 e5,1 v5 v2 Half-Edge structure: ExampleПолуреберная структура: Пример
Half-Edge structureПолуреберная структура • Вопрос: Как пробежать все ребра, примыкающие к данной вершине?
Half-Edge structureПолуреберная структура • Вопрос: Как пробежать все ребра, примыкающие к данной вершине? • begin = vertex.half; • half = begin; • do • { half = half->pair->next; } while (half != begin)
Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура?
Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура?
Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура? • Ответ: сетка должна быть • Сеткой многообразия • Ориентируемой
Half-Edge structure: Pros & consПолуреберная структура: Плюсы и минусы • Эффективная – большинство операцийи запросов за O(1)(как правило) • Не универсальная: годится только для сеток многообразий
Corner TableТаблица Углов • Угол состоит из • Треугольника – c.t. • Вершины - c.v • Следующего угла – c.n • Предыдущего угла – c.p • Противоположного угла – c.o • Левого угла – угла, противоположного c.p ( == c.n.n.o) • Правого угла – угла, противоположного c.n ( == c.n.o)
v6 v3 c7 c9 c3 c12 c4 f3 c7 f1 c1 f2 f4 c10 c6 v1 v4 c11 c5 c2 v5 v2 Corner Table: ExampleТаблица Углов: Пример
Corner Table: Pros & ConsТаблица Углов: плюсы и минусы • Все запросы за O(1) • Все операции, как правило, за O(1) • Только сетки многообразий • Избыточность (хотя и не много)
Corner Table: Queries ExamplesТаблица Углов: Примерызапросов • Какие вершины у 3его треугольника? • Проверить c.v. у углов 9, 10, 11 (c.v, c.n.v, c.p.v) • Смежны ли вершнины iи j? • Пробежать все углы вершины i, проверить, c.n.v ==j или c.p.v == j • Какие треугольники примыкают к вершине i? • Проверить все c.tвсех углов i
ПО для семинаров AITricksGeomPrimitives & AITricksGeomBox
AITricks GeomPrimitives • Вам не требуется реализовывать тривиальные структуры данных, вроде точек, треугольников, сегментов, фигур и операций над ними. • Зато у Вас будут задания посложнее • Документация скоро будет на сайте
AITricks GeomBox • Те задачи, которые потребуют визуализации, можно рисовать, используя GeomBox. • Вам не нужно самим писать отрисовку ваших сеток/примитивов
В следующий раз… • Упрощение сеток 300 12,000 2,000
Вопросы? • Вся информация по спецкурсу + презентации + текущие баллы выкладываются на http://aitricks.com/ru/research/course