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

PDF
Восстановление трехмерных сцен с помощью методов факторизации: принцип работы...
PPTX
Численное дифференцирование
PPT
николаева первообр интеграл
PPT
Proizvodnaya i grafiki_funkcii
PPTX
Лекция 4 Обработка бинарных изображений
PPT
интегралы
PPTX
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
PDF
S3 karnaugh maps-full
Восстановление трехмерных сцен с помощью методов факторизации: принцип работы...
Численное дифференцирование
николаева первообр интеграл
Proizvodnaya i grafiki_funkcii
Лекция 4 Обработка бинарных изображений
интегралы
СИ++ УМЕР. ДА ЗДРАВСТВУЕТ СИ++
S3 karnaugh maps-full

What's hot (19)

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

Viewers also liked (20)

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

More from Mikhail Kurnosov (20)

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