SlideShare a Scribd company logo
Лекция 8Деревья разбиенияпространства (Space partition trees) 
КурносовМихаил Георгиевич 
E-mail: mkurnosov@gmail.com 
WWW: www.mkurnosov.net 
Курс “Алгоритмы и структуры данных” 
Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) 
Осенний семестр, 2014
Визуализация трехмерных сцен 
2 
Имеется трехмерное пространство, в котором размещено nполигонов (многоугольников)и известны их координаты 
Полигон (polygon)–это многоугольник, замкнутая ломанная линия(задет плоскость, на которой лежит) 
z 
x 
y 
P0(x, y, z) 
P1 
P2 
P3 
P5 
P4 
Сложные поверхности представляются множеством полигонов
Визуализация трехмерных сцен 
3 
Имеется трехмерное пространство, в котором размещено nполигонов (многоугольников)и известны их координаты 
Требуется решать следующие задачи: 
oСортировать объекты (полигоны) в порядке удаления от наблюдателя (камеры) 
oОбнаруживать столкновения объектов 
z 
x 
y
Визуализация трехмерных сцен 
4 
Невидимые поверхности (полигоны) не отрисовываются 
Видимость определяется порядком расположения полигонов (от камеры) 
Camera 
(POV – point of view) 
Невидимая плоскость
Визуализация трехмерных сцен 
5 
Объекты нарисованы с учетом их расположения относительно наблюдателя (камеры)
Деревья двоичного разбиения пространства 
6 
Дерево двоичного разбиения пространства (Binary space partitioning tree, BSP tree) –это бинарное дерево, разделяющее пространство на подмножества 
BSP tree хранит информацию о расположении объектов сцены в упорядоченном порядке –от переднего плана (front) к заднему(back) 
Также применяется для определения столкновений объектов (collision detection)в компьютерных играх и робототехнике 
Использовались в играх Doom(1993), Quake(1996) и др. 
Авторы: 
SchumackerR. A., Brand B., Gilliland M. G., Sharp W.H., 1969 
Fuchs H., KedemZ. M, Naylor B. F., 1980
Построение BSP-дерева 
7 
1.Из заданного списка Pполигонов выбираем разбивающий полигон S, он задает разбивающую плоскость (plane) 
2.Создаем в дереве новый узел node 
3.Для каждого полигона Pв спискеполигонов 
a)Если полигон Pнаходится с фронтальной стороны S, заносим его в список полигонов фронтальной стороны(front list) 
b)Если полигон Pнаходится с обратной стороны S, заносим его в список полигонов обратной стороны(back list) 
c)Если полигон Pпересекается плоскостью S, разделяем его на два и заносим их в списки front и back 
d)Если полигон Pлежит в плоскости S, то добавляем его в список полигонов узла node 
4.Рекурсивно применяем алгоритм к списку front, затем к back
Пример построение BSP-дерева в 2D случае 
8 
1.В двумерном пространстве задан списокпрямых(A, B, C, D) –список P 
2.Требуется построить BSP-древо 
listP
Пример построение BSP-дерева в 2D случае 
9 
1.Из списка (A, B, C, D) выбираем разделяющую прямую A 
2.Создаем новый узелA –корень BSP-дерева 
3.Формируем списки frontи back 
4.Рекурсивно обрабатываем списки front иback 
back 
front 
Вектор указывает в сторону переднего плана (front)
Пример построение BSP-дерева в 2D случае 
10 
Из списка frontузла A выбираем разделяющую прямую B2 
Создаем узел B2и формируем его списки frontи back 
front 
back
Пример построение BSP-дерева в 2D случае 
11 
Из списка frontузла B2выбираем разделяющую прямую D2 
Формируем узел D2 
front 
back
Пример построение BSP-дерева в 2D случае 
12 
Из списка back узла B2выбираем разделяющую прямую C2 
Формируем узел C2и его список front(список backпуст) 
front
Пример построение BSP-дерева в 2D случае 
13 
Из списка front узла C2выбираем разделяющую прямую D3 
Формируем узел D3
Пример построение BSP-дерева в 2D случае 
14 
Из списка back узла A выбираем разделяющую прямую B1 
Формируем узел B1и его списки frontи back 
front 
back
Пример построение BSP-дерева в 2D случае 
15 
Из списка front узла B1выбираем разделяющую прямую D1 
Формируем узел D1
Пример построение BSP-дерева в 2D случае 
16 
Из списка back узла B1выбираем разделяющую прямую C1 
Формируем узел C1
Пример построение BSP-дерева в 2D случае 
17 
Количество полигонов в дереве больше их начального числа 
На плоскости было 4 прямые, в дереве 8
Сортировка полигонов 
18 
Задано BSP-дерево 
Заданы координаты наблюдателя–POV (point of view) 
Как изобразить на экране полигоны в порядке удаления от наблюдателя(упорядочить их)?
Обход BSP-дерева(сортировка полигонов) 
19 
1.Если текущий узел лист, нарисовать его полигоны 
2.Если наблюдатель (камера) расположен перед текущим узлом 
oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла 
oнарисовать полигоны текущего узла 
oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла 
3.Если наблюдатель (камера) расположен позади текущего узла 
oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла 
oнарисовать полигоны текущего узла 
oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла 
4.Если наблюдатель расположен в плоскости текущего узла 
oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла 
oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла
Поиск столкновений 20 
Задано BSP-дерево 
Заданы координаты объекта 
Границы объекта задаются ограничивающей сферой (или окружностью) для упрощения вычислений 
Требуется найти полигон пересекающий ограничивающую сферу объекта –полигон, с которым столкнулся объект
Поиск столкновений 21 
functionFindCollision(node, obj) 
ifnode = NULL then 
returnNULL 
ifDist(node.polygon, obj.sphere.center) >obj.sphere.radiusthen 
ifDotProduct(obj.center, node.normal) >= 0then 
// Объект находится с фронтальной стороны разбивающей плоскости, 
// обходим только фронтальное поддерево 
returnFindCollision(node.front,obj) 
else 
// Объект находится с обратной стороны разбивающей плоскости, 
// обходим только оборотное поддерево 
returnFindCollision(node.back,obj) 
end if 
else 
// Столкновение с полигоном узла node 
returnnode 
end if 
end function
k-мерное дерево (k-d tree) 
22 
k-мерное дерево (k-d tree)–это дерево разбиения пространства для упорядочивания точек в k-мерном пространстве 
k-d дерево –это разновидность дерева поиска 
Автор: Дж. Бентли, 1975 
Сложностьв среднемслучае 
Сложность в худшем случае 
Lookup 
O(logn) 
O(n) 
Insert 
O(logn) 
O(n) 
Delete 
O(logn) 
O(n) 
Объемтребуемой памяти: O(n)
k-мерное дерево (k-d tree) 
23 
k-мерное дерево (k-d tree)–это бинарное дерево разбиения пространства для упорядочивания точек в k-мерном пространстве 
Пространство разбивается гиперплоскостью на два подпространства 
k-d дерево строится для заданного множества точек
k-мерное дерево (k-d tree) 
24 
Заданы точки (2,3), (5,4), (9,6), (4,7), (8,1), (7,2) 
Строим k-d дерево рекурсивно разбивая плоскость поочередно прямыми x=k, y=k 
За kпринимается медиана среди координат X или Y точек
k-мерное дерево (k-d tree) 
25 
k-мерное дерево (k-d tree)–это бинарное дерево разбиения пространства для упорядочивания точек в k-мерном пространстве
Дерево квадрантов (quadtree) 
26 
Дерево квадрантов (quadtree)–это дерево, в котором каждый внутренний узел содержит 4 дочерних элемента (квадранта) 
Дерево Quadtree–используется для разбиения 2D пространства 
Авторы: Raphael Finkel, Jon Bentley, 1974 
Задачи 
oПредставление изображений 
oОбнаружение столкновений (ближайших точек/объектов) 
oХранение данных для табличных или матричных вычислений
Дерево квадрантов (quadtree) 
27
Октодерево(octree) 
28 
Октодерево(octree)–это трехмерный аналог дерева квадрантов

More Related Content

What's hot

тест
тесттест
тестsvetlup
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3Andrei V, Zhuravlev
 
S2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gatesS2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gates
ssuser3ad198
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисления
Positive Hack Days
 
20091115 algorithmsfornphardproblems kulikov_lecture09
20091115 algorithmsfornphardproblems kulikov_lecture0920091115 algorithmsfornphardproblems kulikov_lecture09
20091115 algorithmsfornphardproblems kulikov_lecture09Computer Science Club
 
Методы удаления артефактов в видео
Методы удаления артефактов в видеоМетоды удаления артефактов в видео
Методы удаления артефактов в видеоMSU GML VideoGroup
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
DEVTYPE
 
S3 karnaugh maps-short
S3 karnaugh maps-shortS3 karnaugh maps-short
S3 karnaugh maps-short
ssuser3ad198
 
практическая работа №3
практическая работа №3практическая работа №3
практическая работа №3leshiy_AlisA
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Nikolay Grebenshikov
 
Урок 6. Чистое лямбда-исчисление.
Урок 6. Чистое лямбда-исчисление. Урок 6. Чистое лямбда-исчисление.
Урок 6. Чистое лямбда-исчисление.
Система дистанционного обучения MyDLS
 
Лекция 8 Основы 3D обработки
Лекция 8 Основы 3D обработкиЛекция 8 Основы 3D обработки
Лекция 8 Основы 3D обработкиVictor Kulikov
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
DEVTYPE
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4Zhanna Kazakova
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
DEVTYPE
 
практика 7
практика 7практика 7
практика 7student_kai
 

What's hot (19)

тест
тесттест
тест
 
Программирование. Лекция 3
Программирование. Лекция 3Программирование. Лекция 3
Программирование. Лекция 3
 
S2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gatesS2 boolean amp-amp_complex_gates
S2 boolean amp-amp_complex_gates
 
Советский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисленияСоветский суперкомпьютер К-340А и секретные вычисления
Советский суперкомпьютер К-340А и секретные вычисления
 
20091115 algorithmsfornphardproblems kulikov_lecture09
20091115 algorithmsfornphardproblems kulikov_lecture0920091115 algorithmsfornphardproblems kulikov_lecture09
20091115 algorithmsfornphardproblems kulikov_lecture09
 
Методы удаления артефактов в видео
Методы удаления артефактов в видеоМетоды удаления артефактов в видео
Методы удаления артефактов в видео
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
 
дз
дздз
дз
 
S3 karnaugh maps-short
S3 karnaugh maps-shortS3 karnaugh maps-short
S3 karnaugh maps-short
 
практическая работа №3
практическая работа №3практическая работа №3
практическая работа №3
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
Лекция №13. Графы: сильно связные компоненты и остовные деревья. Предмет "Стр...
 
Урок 6. Чистое лямбда-исчисление.
Урок 6. Чистое лямбда-исчисление. Урок 6. Чистое лямбда-исчисление.
Урок 6. Чистое лямбда-исчисление.
 
Лекция 8 Основы 3D обработки
Лекция 8 Основы 3D обработкиЛекция 8 Основы 3D обработки
Лекция 8 Основы 3D обработки
 
2.2 Стек вызовов
2.2 Стек вызовов2.2 Стек вызовов
2.2 Стек вызовов
 
лабораторная работа №4
лабораторная работа №4лабораторная работа №4
лабораторная работа №4
 
3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы3.3 Конструкторы и деструкторы
3.3 Конструкторы и деструкторы
 
практика 7
практика 7практика 7
практика 7
 
Dynamic memory
Dynamic memoryDynamic memory
Dynamic memory
 

Viewers also liked

Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Mikhail Kurnosov
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиMikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Mikhail Kurnosov
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поиска
Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Mikhail Kurnosov
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
Mikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Mikhail Kurnosov
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиMikhail Kurnosov
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Mikhail Kurnosov
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
Mikhail Kurnosov
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
Mikhail Kurnosov
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
Mikhail Kurnosov
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)
Mikhail Kurnosov
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
Mikhail Kurnosov
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
Mikhail Kurnosov
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
Mikhail Kurnosov
 

Viewers also liked (20)

Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
Лекция 10: Деревья разбиения пространства (BSP tree, k-d tree, quadtree)
 
Лекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимостиЛекция 10: Графы. Остовные деревья минимальной стоимости
Лекция 10: Графы. Остовные деревья минимальной стоимости
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поискаЛекция 5. Бинарные деревья поиска
Лекция 5. Бинарные деревья поиска
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 4. Стеки и очереди
Лекция 4. Стеки и очередиЛекция 4. Стеки и очереди
Лекция 4. Стеки и очереди
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачиЛекция 12: Трудноразрешимые задачи
Лекция 12: Трудноразрешимые задачи
 
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
Лекция 9. Дерево ван Эмде Боаса (van Emde Boas tree)
 
Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)Семинар 10. Параллельное программирование на MPI (часть 3)
Семинар 10. Параллельное программирование на MPI (часть 3)
 
Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)Лекция 4. Префиксные деревья (Tries, prefix trees)
Лекция 4. Префиксные деревья (Tries, prefix trees)
 
Лекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графеЛекция 9. Поиск кратчайшего пути в графе
Лекция 9. Поиск кратчайшего пути в графе
 
Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)Лекция 4. Префиксные деревья (tries, prefix trees)
Лекция 4. Префиксные деревья (tries, prefix trees)
 
Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)Лекция 10. Биномиальные кучи (Binomial heaps)
Лекция 10. Биномиальные кучи (Binomial heaps)
 
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
Лекция 2. Красно-чёрные деревья (Red-black trees). Скошенные деревья (Splay t...
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 

More from Mikhail Kurnosov

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
Mikhail Kurnosov
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
Mikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
Mikhail Kurnosov
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Mikhail Kurnosov
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
Mikhail Kurnosov
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Mikhail Kurnosov
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Mikhail Kurnosov
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
Mikhail Kurnosov
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Mikhail Kurnosov
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Mikhail Kurnosov
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
Mikhail Kurnosov
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Mikhail Kurnosov
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
Mikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
Mikhail Kurnosov
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
Mikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
Mikhail Kurnosov
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
Mikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Mikhail Kurnosov
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Mikhail Kurnosov
 

More from Mikhail Kurnosov (20)

Векторизация кода (семинар 2)
Векторизация кода (семинар 2)Векторизация кода (семинар 2)
Векторизация кода (семинар 2)
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
Лекция 7. Декартовы деревья (Treaps, дучи, дерамиды)
 
Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)Лекция 7. Стандарт OpenMP (подолжение)
Лекция 7. Стандарт OpenMP (подолжение)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
Лекция 5. Основы параллельного программирования (Speedup, Amdahl's law, Paral...
 
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
Лекция 6. Фибоначчиевы кучи (Fibonacci heaps)
 
Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)Лекция 5. B-деревья (B-trees, k-way merge sort)
Лекция 5. B-деревья (B-trees, k-way merge sort)
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
Лекция 3. Оптимизация доступа к памяти (Memory access optimization, cache opt...
 
Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)Лекция 3. АВЛ-деревья (AVL trees)
Лекция 3. АВЛ-деревья (AVL trees)
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмовЛекция 11. Методы разработки алгоритмов
Лекция 11. Методы разработки алгоритмов
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Лекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимостиЛекция 10. Графы. Остовные деревья минимальной стоимости
Лекция 10. Графы. Остовные деревья минимальной стоимости
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Лекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировкаЛекция 7. Бинарные кучи. Пирамидальная сортировка
Лекция 7. Бинарные кучи. Пирамидальная сортировка
 

Лекция 8. Деревья разбиения пространства (BSP tree, k-d tree, quadtree)

  • 1. Лекция 8Деревья разбиенияпространства (Space partition trees) КурносовМихаил Георгиевич E-mail: mkurnosov@gmail.com WWW: www.mkurnosov.net Курс “Алгоритмы и структуры данных” Сибирский государственный университет телекоммуникаций и информатики (Новосибирск) Осенний семестр, 2014
  • 2. Визуализация трехмерных сцен 2 Имеется трехмерное пространство, в котором размещено nполигонов (многоугольников)и известны их координаты Полигон (polygon)–это многоугольник, замкнутая ломанная линия(задет плоскость, на которой лежит) z x y P0(x, y, z) P1 P2 P3 P5 P4 Сложные поверхности представляются множеством полигонов
  • 3. Визуализация трехмерных сцен 3 Имеется трехмерное пространство, в котором размещено nполигонов (многоугольников)и известны их координаты Требуется решать следующие задачи: oСортировать объекты (полигоны) в порядке удаления от наблюдателя (камеры) oОбнаруживать столкновения объектов z x y
  • 4. Визуализация трехмерных сцен 4 Невидимые поверхности (полигоны) не отрисовываются Видимость определяется порядком расположения полигонов (от камеры) Camera (POV – point of view) Невидимая плоскость
  • 5. Визуализация трехмерных сцен 5 Объекты нарисованы с учетом их расположения относительно наблюдателя (камеры)
  • 6. Деревья двоичного разбиения пространства 6 Дерево двоичного разбиения пространства (Binary space partitioning tree, BSP tree) –это бинарное дерево, разделяющее пространство на подмножества BSP tree хранит информацию о расположении объектов сцены в упорядоченном порядке –от переднего плана (front) к заднему(back) Также применяется для определения столкновений объектов (collision detection)в компьютерных играх и робототехнике Использовались в играх Doom(1993), Quake(1996) и др. Авторы: SchumackerR. A., Brand B., Gilliland M. G., Sharp W.H., 1969 Fuchs H., KedemZ. M, Naylor B. F., 1980
  • 7. Построение BSP-дерева 7 1.Из заданного списка Pполигонов выбираем разбивающий полигон S, он задает разбивающую плоскость (plane) 2.Создаем в дереве новый узел node 3.Для каждого полигона Pв спискеполигонов a)Если полигон Pнаходится с фронтальной стороны S, заносим его в список полигонов фронтальной стороны(front list) b)Если полигон Pнаходится с обратной стороны S, заносим его в список полигонов обратной стороны(back list) c)Если полигон Pпересекается плоскостью S, разделяем его на два и заносим их в списки front и back d)Если полигон Pлежит в плоскости S, то добавляем его в список полигонов узла node 4.Рекурсивно применяем алгоритм к списку front, затем к back
  • 8. Пример построение BSP-дерева в 2D случае 8 1.В двумерном пространстве задан списокпрямых(A, B, C, D) –список P 2.Требуется построить BSP-древо listP
  • 9. Пример построение BSP-дерева в 2D случае 9 1.Из списка (A, B, C, D) выбираем разделяющую прямую A 2.Создаем новый узелA –корень BSP-дерева 3.Формируем списки frontи back 4.Рекурсивно обрабатываем списки front иback back front Вектор указывает в сторону переднего плана (front)
  • 10. Пример построение BSP-дерева в 2D случае 10 Из списка frontузла A выбираем разделяющую прямую B2 Создаем узел B2и формируем его списки frontи back front back
  • 11. Пример построение BSP-дерева в 2D случае 11 Из списка frontузла B2выбираем разделяющую прямую D2 Формируем узел D2 front back
  • 12. Пример построение BSP-дерева в 2D случае 12 Из списка back узла B2выбираем разделяющую прямую C2 Формируем узел C2и его список front(список backпуст) front
  • 13. Пример построение BSP-дерева в 2D случае 13 Из списка front узла C2выбираем разделяющую прямую D3 Формируем узел D3
  • 14. Пример построение BSP-дерева в 2D случае 14 Из списка back узла A выбираем разделяющую прямую B1 Формируем узел B1и его списки frontи back front back
  • 15. Пример построение BSP-дерева в 2D случае 15 Из списка front узла B1выбираем разделяющую прямую D1 Формируем узел D1
  • 16. Пример построение BSP-дерева в 2D случае 16 Из списка back узла B1выбираем разделяющую прямую C1 Формируем узел C1
  • 17. Пример построение BSP-дерева в 2D случае 17 Количество полигонов в дереве больше их начального числа На плоскости было 4 прямые, в дереве 8
  • 18. Сортировка полигонов 18 Задано BSP-дерево Заданы координаты наблюдателя–POV (point of view) Как изобразить на экране полигоны в порядке удаления от наблюдателя(упорядочить их)?
  • 19. Обход BSP-дерева(сортировка полигонов) 19 1.Если текущий узел лист, нарисовать его полигоны 2.Если наблюдатель (камера) расположен перед текущим узлом oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла oнарисовать полигоны текущего узла oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла 3.Если наблюдатель (камера) расположен позади текущего узла oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла oнарисовать полигоны текущего узла oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла 4.Если наблюдатель расположен в плоскости текущего узла oрекурсивно обойти поддерево с узлами, находящимися впереди текущего узла oрекурсивно обойти поддерево с узлами, находящимися позади текущего узла
  • 20. Поиск столкновений 20 Задано BSP-дерево Заданы координаты объекта Границы объекта задаются ограничивающей сферой (или окружностью) для упрощения вычислений Требуется найти полигон пересекающий ограничивающую сферу объекта –полигон, с которым столкнулся объект
  • 21. Поиск столкновений 21 functionFindCollision(node, obj) ifnode = NULL then returnNULL ifDist(node.polygon, obj.sphere.center) >obj.sphere.radiusthen ifDotProduct(obj.center, node.normal) >= 0then // Объект находится с фронтальной стороны разбивающей плоскости, // обходим только фронтальное поддерево returnFindCollision(node.front,obj) else // Объект находится с обратной стороны разбивающей плоскости, // обходим только оборотное поддерево returnFindCollision(node.back,obj) end if else // Столкновение с полигоном узла node returnnode end if end function
  • 22. k-мерное дерево (k-d tree) 22 k-мерное дерево (k-d tree)–это дерево разбиения пространства для упорядочивания точек в k-мерном пространстве k-d дерево –это разновидность дерева поиска Автор: Дж. Бентли, 1975 Сложностьв среднемслучае Сложность в худшем случае Lookup O(logn) O(n) Insert O(logn) O(n) Delete O(logn) O(n) Объемтребуемой памяти: O(n)
  • 23. k-мерное дерево (k-d tree) 23 k-мерное дерево (k-d tree)–это бинарное дерево разбиения пространства для упорядочивания точек в k-мерном пространстве Пространство разбивается гиперплоскостью на два подпространства k-d дерево строится для заданного множества точек
  • 24. k-мерное дерево (k-d tree) 24 Заданы точки (2,3), (5,4), (9,6), (4,7), (8,1), (7,2) Строим k-d дерево рекурсивно разбивая плоскость поочередно прямыми x=k, y=k За kпринимается медиана среди координат X или Y точек
  • 25. k-мерное дерево (k-d tree) 25 k-мерное дерево (k-d tree)–это бинарное дерево разбиения пространства для упорядочивания точек в k-мерном пространстве
  • 26. Дерево квадрантов (quadtree) 26 Дерево квадрантов (quadtree)–это дерево, в котором каждый внутренний узел содержит 4 дочерних элемента (квадранта) Дерево Quadtree–используется для разбиения 2D пространства Авторы: Raphael Finkel, Jon Bentley, 1974 Задачи oПредставление изображений oОбнаружение столкновений (ближайших точек/объектов) oХранение данных для табличных или матричных вычислений
  • 28. Октодерево(octree) 28 Октодерево(octree)–это трехмерный аналог дерева квадрантов