Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Graphica_12_Kulikov_Ovchinnikova.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
6.04 Mб
Скачать

Ячейки Вороного

Ячейки Вороного строятся только для внутренних точек множества (т.е. для точек не лежащих на оболочке множества). Значит нужно выделить такие точки и построить вокруг каждой ячейку Вороного. Затем полученные ячейки объединяются в единую структуру.

Опишем построение отдельной ячейки Вороного:

I этап: поиск вершин ячейки Вороного

Вход:

По аналогии с двумерным случаем, вершинами ячейки являются центры описанных вокруг тетраэдров Делоне сфер. Для расчёта этих центров берутся тетраэдры, содержащие точку, вокруг которой строится ячейка (далее: точка p).

  1. Создадим очередь B, элементами которой будут указатели на грани тетраэдров.

  2. Возьмём какой-либо тетраэдр, содержащий точку p. Вычислив центр описанной сферы, занесём его в массив вершин ячейки. Добавим к B три грани этого тетраэдра, содержащие p. Пометим тетраэдр.

  3. Берём элемент с верхушки очереди: b=first(B).

  4. Если грань b принадлежит не помеченному тетраэдру, то переходим по грани b к следующему тетраэдру.

  5. Вычислив центр описанной вокруг него сферы, занесём его в массив вершин ячейки. Добавим к B две грани (три грани содержат точку, а та из них, по которой перешли к данному тетраэдру, уже обработана) этого тетраэдра, содержащие p. Пометим тетраэдр.

  6. Если очередь B не пуста, то перейти к (3).

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

  1. Пусть одна грань оболочки (грань f0) уже известна.

  2. Создадим очередь Q, содержащую ребра оболочки.

  3. Занесём в Q грани f0.

  4. Берём элемент с верхушки очереди: q=first(Q).

  5. f – грань, к которой принадлежит q.

  6. Найдём точку p из множества, такую, что плоскость, проходящая через q и эту точку, образует с f максимальный угол < .

  7. Построим новую грань на q и p. Занесём её рёбра в Q, кроме q, и тех, которые не смыкаются с другими гранями.

  8. Если очередь Q не пуста, то перейти к (4).

Получим выпуклую оболочку, которая и будет являться ячейкой Вороного.

10.6 Вопросы и упражнения

  1. Дайте определение триангуляции Делоне.

  2. Сформулируйте задачу построения триангуляции в пространстве.

  3. Привести пример неоднозначной триангуляции Делоне.

  4. Дайте определение диаграммы Вороного.

  5. Для каких центров из конечной системы точек, для которой строится диаграмма Вороного, их ячейка Вороного бесконечна.

  6. В чем состоит дуальность разбиений Делоне и Вороного?

  7. Адаптировать алгоритм построения триангуляции Делоне методом вкатывания «пустого» шара в пространстве к подобной задаче на плоскости.

  8. Сколько минимально ячеек в диаграмме Вороного на плоскости и в пространстве может сходиться в одной точке?

11. Алгоритмы построения выпуклой оболочки и триангуляции

11.1. Алгоритм построения выпуклой оболочки с использованием метода сортировки

Задано множество точек S(p1,…,pN), для которого произведена лексикографическая сортировка по x и y. Т.е. .

если:

  • Либо Y1 < Y2

  • Либо Y1 = Y2 и X1 < X2

  • Точки, Y-координаты которых совпадают, называются уровнями.

Будем считать, что точки расположены так, как показано на рис. 11.1:

Рис. 11.1.

Примечание:

Pmin_x – множество точек из множества S таких, что координата Х – минимальна

Pmin_y – множество точек из множества S таких, что координата Y – минимальна

Pmax_x – множество точек из множества S таких, что координата Х – максимальна

Pmax_y – множество точек из множества S таких, что координата Y – максимальна

Множество точек Pmin_y находятся на M-уровне

Множество точек Pmax_y находятся на 0-уровне

Разобьем множество точек на квадранты.

Построим выпуклую оболочку для I- квадранта. (Для остальных квадрантов оболочка строится аналогично).

Шаг 1: из множества точек {Pmin_y} выбираем ту, координата Х которой максимальна. Обозначим ее pi(X1,Y1)

Шаг 2: из множества точек {Pmax_x} выбираем ту, координата Y которой минимальна. Обозначим ее pj(X2,Y2)

Шаг 3: Среди точек множества S, ищем точку p(X1,Y) (на уровне M-1 или выше), такую что для любого X1 больше X. Обозначим ее как pr

Рис. 11.2.

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

Шаг 4: Заносим точки pi, pr и pj в соответствующие структуры и переобозначим pi = pr.

Шаг 5: Повторяем шаг 3-4 до тех пор пока pi не совпадет с pj.

Шаг 6: Если в построенной нами выпуклой оболочки встречаются вогнутые сегменты то соединяем крайние точки таких сегментов (Рис. 11.3).

Рис. 11.3. Преобразование выпуклой оболочки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]