1 / 42

Высокопроизводительные методы геометрического моделирования

Лекция 1 . Сетки: определения и структуры данных. Высокопроизводительные методы геометрического моделирования. Михаил Бессмельцев к.ф.-м.н . Ольга Нечаева. Определения. Графы, Планарность, Триангуляция, Делоне , Сетки. Graphs Графы. Сетка – это частный случай неориентированного графа.

dima
Download Presentation

Высокопроизводительные методы геометрического моделирования

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Лекция 1. Сетки: определения и структуры данных Высокопроизводительные методыгеометрического моделирования Михаил Бессмельцев к.ф.-м.н. Ольга Нечаева

  2. Определения Графы, Планарность, Триангуляция, Делоне , Сетки

  3. GraphsГрафы • Сетка – это частный случай неориентированного графа • G = <V, E> • V – вершины (A,B,…) • E – ребра (AB, BC, …) • Цикл – например, AJLCB • Степень вершины – кол-во ребер, инцидентных вершине • deg(B) = 3, deg(K) = 4 • Грань – циклбез ребер/вершин внутри

  4. Planar GraphsПланарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми

  5. Planar Graphs Планарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми

  6. Planar Graphs Планарные графы • Граф планарный, если его можно нарисовать на плоскости без пересечений • Любой планарный граф можно нарисовать так, чтобы все ребра были прямыми

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

  8. Триангуляция Делоне • Триангуляция Делоне – хорошая триангуляция. • Триангуляция является ~ Делоне, если внутри описанной окружности любого треугольника нет вершин триангуляции (точек). • В 2D для данного множества точек триангуляция Делоне существует (возможно, не одна).

  9. MeshesСетки • Сетка – граф с прямыми ребрами в R3. • Граничные ребра – ребра, содержащиеся ровно в одном треугольнике. • Обычные ребра – ребра, содержащиеся ровно в 2х треугольниках. • Сингулярные ребра – > 2 треугольников. • Замкнутая сетка – сетка без граничных ребер. • Manifold mesh (многообразия) – сетка без сингулярных ребер.

  10. Planar graphs & meshesПланарные графы и сетки • Любая сетка многообразия является планарной! • (почти)

  11. Сеточные структуры данных

  12. Где и как используются структуры данных для сеток?

  13. Где и как используются структуры данных для сеток? • Для рендеринга (отрисовки) • Для обработки/вычислений: • Вопросы типа • Какие вершины у треугольника номер ##? • Смежны ли вершины i и j? • Какие соседи у треугольника ##? • Операции • Вставить/удалить треугольник • Вставить/удалить вершину • Сделать общую универсальную структуру данных - маловероятно

  14. Чем отличаются структуры данных? • Временная сложность создания • Временная сложность изменения • Временная сложность ответа на вопросы про соседей/смежность • Простота самой структуры (важно для портирования/распараллеливания) • Ёмкостная сложность (точнее, сколько занимает памяти эта структура)

  15. Список граней (треугольников)GeomPrimitives::TriangulationData • Структура состоит из: • Списка координат вершин • TriangulationData::getAllPoints(); //возвращает все вершины • TriangulationData::getPoint (i); • Списка треугольников • TriangulationData::getAllTriangles(); • TriangulationData::getTriangle(i); • Ответ на вопрос «Какие вершины у треугольника номер ##» занимает O(1) • Ответ на вопрос, смежны ли вершины iи j, занимает O(|E|) – неэффективно

  16. v6 v3 f3 f1 f2 f4 v1 v4 v5 v2 Список граней - пример

  17. Список граней: плюсы и минусы • Удобная и простая • Эффективная (занимает мало памяти) • Универсальная (нет ограничений на дырки или сингулярные ребра) • Слишком простая: нет дополнительной информации вроде соседей треугольника

  18. Adjacency MatrixМатрица смежности • Матрица смежности может задавать, вообще говоря, произвольный граф • Пусть у нас есть nвершин. Матрица смежности – матрица n*n {ei,j}: • ei,j = true, если вершины iи jсмежны. • ei,j = false, else. • Кроме самой матрицы, нужно хранить список координат вершин • Дополнительно храним треугольники – тройки номеров

  19. v6 v3 f3 f1 f2 f4 v1 v4 v5 v2 Adjacency Matrix : exampleМатрица смежности: пример

  20. Матрица смежности: эффективность • Какие вершины в треугольнике ##? • O(1) – посмотреть соотв. элемент списка треугольников • Смежны ли вершины i и j? • O(1) – проверить соответствующий элемент в матрице. • В каких треугольниках содержится вершина i? • O(|Faces|) – придется пробежатьвсе грани/треугольники

  21. Adjacency Matrix : pros and consМатрица смежности: плюсы и минусы • Любые вопросы о смежности отвечаются мгновенно – O(1) • Универсальная • Расходуется слишком много памяти (|V|2). Редко применяется для сеток, скорее с её помощью описывают графы, близкие к полным (|E|≈|V|2). • По вершине сложно найти треугольник

  22. next(e) IncFace(e) e prev(e) twin(e) origin(e) Half-Edge structureПолуреберная структура • Для каждой вершины храним • Координаты • Указатель на какое-нибудь «полуребро», началом которого является эта вершина • Для каждого треугольника храним • Указатель на какое-нибудь «полуребро» этого треугольника

  23. next(e) IncFace(e) e prev(e) twin(e) origin(e) Half-Edge structureПолуреберная структура • Полуребро – это • Указатель на начало: origin(e) • Указатель на двойственное полуребро - twin(e) • Указатель на треугольник, которому оно принадлежит – IncidentFace(e)(положительный обход контура) • Указатели на следующее и предыдущее полуребра в треугольнике – next(e) иprev(e)

  24. Half-Edge structure: EfficiencyПолуреберная структура: Эффективность • Большинство операций выполняются за O(1) • Основные операции: • Пробежать по границе (ребра+вершины) какого-то треугольника • Пробежать все ребра, инцидентные v

  25. 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Полуреберная структура: Пример

  26. 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Полуреберная структура: Пример

  27. Half-Edge structureПолуреберная структура • Вопрос: Как пробежать все ребра, примыкающие к данной вершине?

  28. Half-Edge structureПолуреберная структура • Вопрос: Как пробежать все ребра, примыкающие к данной вершине? • begin = vertex.half; • half = begin; • do • { half = half->pair->next; } while (half != begin)

  29. Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура?

  30. Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура?

  31. Half-Edge structureПолуреберная структура • Вопрос 2: Какие ограничения на сетку накладывает такая структура? • Ответ: сетка должна быть • Сеткой многообразия • Ориентируемой

  32. Half-Edge structure: Pros & consПолуреберная структура: Плюсы и минусы • Эффективная – большинство операцийи запросов за O(1)(как правило) • Не универсальная: годится только для сеток многообразий

  33. Corner TableТаблица Углов • Угол состоит из • Треугольника – c.t. • Вершины - c.v • Следующего угла – c.n • Предыдущего угла – c.p • Противоположного угла – c.o • Левого угла – угла, противоположного c.p ( == c.n.n.o) • Правого угла – угла, противоположного c.n ( == c.n.o)

  34. 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Таблица Углов: Пример

  35. Corner Table: Pros & ConsТаблица Углов: плюсы и минусы • Все запросы за O(1) • Все операции, как правило, за O(1) • Только сетки многообразий • Избыточность (хотя и не много)

  36. 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

  37. ПО для семинаров AITricksGeomPrimitives & AITricksGeomBox

  38. AITricks GeomPrimitives • Вам не требуется реализовывать тривиальные структуры данных, вроде точек, треугольников, сегментов, фигур и операций над ними. • Зато у Вас будут задания посложнее  • Документация скоро будет на сайте

  39. AITricks GeomBox • Те задачи, которые потребуют визуализации, можно рисовать, используя GeomBox. • Вам не нужно самим писать отрисовку ваших сеток/примитивов

  40. AITricks GeomBox

  41. В следующий раз… • Упрощение сеток 300 12,000 2,000

  42. Вопросы? • Вся информация по спецкурсу + презентации + текущие баллы выкладываются на http://aitricks.com/ru/research/course

More Related