O(1) - arraypointsprocessingproject

advertisement
Лекция 1.
Сетки: определения и структуры данных
Высокопроизводительные методы
геометрического моделирования
Михаил Бессмельцев
к.ф.-м.н. Ольга Нечаева
Определения
Графы, Планарность, Триангуляция, Делоне , Сетки
Graphs
Графы

Сетка – это частный случай неориентированного графа

G = <V, E>
A
V – вершины (A,B,…)
E – ребра (AB, BC, …)
Цикл – например, AJLCB
H
Степень вершины – кол-во
ребер, инцидентных вершине
deg(B) = 3, deg(K) = 4
Грань – цикл без
ребер/вершин внутри






B
C
L
J
D
I
K
E
F
G
Planar Graphs
Планарные графы

Граф планарный, если его можно нарисовать на
плоскости без пересечений
B
D
A
C

Любой планарный граф можно нарисовать так, чтобы
все ребра были прямыми
Planar Graphs
Планарные графы

Граф планарный, если его можно нарисовать на
плоскости без пересечений
B
B
D
A
D
A
C
C

Любой планарный граф можно нарисовать так, чтобы
все ребра были прямыми
Planar Graphs
Планарные графы

Граф планарный, если его можно нарисовать на
плоскости без пересечений
B
B
B
D
A
D
D
A
A
C
C
C

Любой планарный граф можно нарисовать так, чтобы
все ребра были прямыми
Триангуляция



Триангуляция – планарный граф с прямыми ребрами,
все грани которого – треугольники.
Триангуляция – разбиение исходного множества
точек на треугольники (непересекающиеся) (вершины
треугольников – точки множества)
Триангуляций множества точек может быть много.
Триангуляция Делоне



Триангуляция Делоне – хорошая триангуляция.
Триангуляция является ~ Делоне, если внутри
описанной окружности любого треугольника нет
вершин триангуляции (точек).
В 2D для данного множества точек триангуляция
Делоне существует (возможно, не одна).
Meshes
Сетки

Сетка – граф с прямыми ребрами в R3.

Граничные ребра – ребра,
содержащиеся ровно в одном
треугольнике.
Обычные ребра – ребра,
содержащиеся ровно в 2х
треугольниках.
Сингулярные ребра – > 2
треугольников.




A
B
C
L
J
M
D
I
H
E
K
F
G
Замкнутая сетка – сетка без граничных ребер.
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
v1
вершина
координаты
v1
(x1,y1,z1)
v2
(x2,y2,z2)
v3
(x3,y3,z3)
v4
f1
f2
v4
f4
v5
v2
грань
вершины
f1
(v1, v2, v3)
f2
(v2, v4, v3)
(x4,y4,z4)
f3
(v3, v4, v6)
v5
(x5,y5,z5)
f4
(v4, v5, v6)
v6
(x6,y6,z6)
Список граней: плюсы и минусы




Удобная и простая
Эффективная (занимает мало памяти)
Универсальная (нет ограничений на дырки или
сингулярные ребра)
Слишком простая: нет дополнительной информации
вроде соседей треугольника
Adjacency Matrix
Матрица смежности


Матрица смежности может задавать, вообще говоря,
произвольный граф
Пусть у нас есть n вершин. Матрица смежности –
матрица n*n {ei,j}:




ei,j = true, если вершины i и j смежны.
ei,j = false, else.
Кроме самой матрицы, нужно хранить список
координат вершин
Дополнительно храним треугольники – тройки
номеров
Adjacency Matrix : example
Матрица смежности: пример
vertex
coordinate
v1
(x1,y1,z1)
v2
(x2,y2,z2)
v3
(x3,y3,z3)
v4
(x4,y4,z4)
v5
(x5,y5,z5)
v6
(x6,y6,z6)
face
vertices (ccw)
f1
(v1, v2, v3)
f2
(v2, v4, v3)
f3
(v3, v4, v6)
f4
(v4, v5, v6)
v6
v3
f3
f1
v1
f2
f4
v4
v5
v2
v1
v1
v2
1
v3
1
v4
v2
v3
1
1
1
1
1
v5
1
1
1
1
1
v6
1
1
v5
v6
v4
1
1
1
1
Матрица смежности: эффективность



Какие вершины в треугольнике ##?
 O(1) – посмотреть соотв. элемент списка треугольников
Смежны ли вершины i и j?
 O(1) – проверить соответствующий элемент в матрице.
В каких треугольниках содержится вершина i?
 O(|Faces|) – придется пробежать все грани/треугольники
Adjacency Matrix : pros and cons
Матрица смежности: плюсы и минусы




Любые вопросы о смежности отвечаются мгновенно –
O(1)
Универсальная
Расходуется слишком много памяти (|V|2). Редко
применяется для сеток, скорее с её помощью
описывают графы, близкие к полным (|E|≈|V|2).
По вершине сложно найти треугольник
Half-Edge structure
Полуреберная структура

Для каждой вершины храним


Координаты
Указатель на какое-нибудь
«полуребро», началом
которого является эта вершина
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)
1.
2.
3.
4.
Указатель на начало: origin(e)
Указатель на двойственное полуребро - twin(e)
Указатель на треугольник, которому оно принадлежит –
IncidentFace(e) (положительный обход контура)
Указатели на следующее и предыдущее полуребра в
треугольнике – next(e) и prev(e)
Half-Edge structure: Efficiency
Полуреберная структура: Эффективность


Большинство операций выполняются за O(1)
Основные операции:


Пробежать по границе (ребра+вершины) какого-то
треугольника
Пробежать все ребра, инцидентные v
Half-Edge structure: Example
Полуреберная структура: Пример
v3
e1,1
v1
e6,1
e4,1
f1
e2,1
e3,1
v6
e3,2
e4,2
f3
e7,1
e7,2
f2
e5,1
e8,1
v4
e9,1
f4
v5
v2
Vertex
coordinate
Incident Edge
v1
(x1,y1,z1)
e2,1
v2
(x2,y2,z2)
v3
face
edge
e5,1
f1
e1,1
(x3,y3,z3)
e1,1
f2
e5,1
v4
(x4,y4,z4)
e7,1
f3
e4,2
v5
(x5,y5,z5)
e9,1
f4
e8,1
v6
(x6,y6,z6)
e7,2
Half-Edge structure: Example
Полуреберная структура: Пример
v6
v3
e1,1
v1
e2,1
e6,1
e4,1
f1
e3,1
e3,2
e4,2
f3
e7,1
e7,2
f2
e5,1
v4
e8,1
e9,1
f4
v5
v2
Half-edge
origin
twin
IncidentFace
next
prev
e3,1
v2
e3,2
f1
e1,1
e2,1
e3,2
v3
e3,1
f2
e5,1
e4,1
e4,1
v4
e4,2
f2
e3,2
e5,1
e4,2
v3
e4,1
f3
e7,1
e6,1
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)
Corner Table: Example
Таблица Углов: Пример
v3
c3 c c9
c7
f3
4
v1 c1
v6
c12
c7
f1
c 2 c5
v2
f2 c6 c10
v4
f4
c11
v5
corner
c.v
c.t
c.n
c.p
c.o
c1
v1
f1
c2
c3
c6
c2
v2
f1
c3
c1
NULL NULL
c3
v3
f1
c1
c2
NULL
c6
NULL
c4
v3
f2
c5
c6
NULL
c7
c1
c5
v2
f2
c6
c4
c7
c1
NULL
c6
v4
f2
c4
c5
c1
NULL
c7
c.r
c.l
NULL NULL
c6
Corner Table: Pros & Cons
Таблица Углов: плюсы и минусы




Все запросы за O(1)
Все операции, как правило, за O(1)
Только сетки многообразий
Избыточность (хотя и не много)
Corner Table: Queries Examples
Таблица Углов: Примеры запросов

Какие вершины у 3его треугольника?


Смежны ли вершнины i и j?


Проверить c.v. у углов 9, 10, 11 (c.v, c.n.v, c.p.v)
Пробежать все углы вершины i, проверить, c.n.v == j или
c.p.v == j
Какие треугольники примыкают к вершине i?

Проверить все c.t всех углов i
ПО для семинаров
AITricks GeomPrimitives & AITricks GeomBox
AITricks GeomPrimitives

Вам не требуется
реализовывать
тривиальные структуры
данных, вроде точек,
треугольников, сегментов,
фигур и операций над
ними.

Зато у Вас будут задания
посложнее 
Документация скоро
будет на сайте

AITricks GeomBox


Те задачи, которые
потребуют
визуализации, можно
рисовать, используя
GeomBox.
Вам не нужно самим
писать отрисовку ваших
сеток/примитивов
AITricks GeomBox
В следующий раз…

Упрощение сеток
12,000
2,000
300
Вопросы?

Вся информация по спецкурсу + презентации +
текущие баллы выкладываются на
http://aitricks.com/ru/research/course
Download