Восстановление трехмерных сцен с помощью методов факторизации: принцип работы...Natalya Sveshnikova
Презентация к публикации:
Свешникова Н.В., Юрин Д.В. Восстановление трехмерных сцен с помощью методов факторизации: принцип работы и оценка погрешностей//В сб. Труды второй научной конференции СИМ'2005, Москва, Академия АйТи 19 мая 2005 г. -С.207-222. М.:ИФТИ 2005
Нас окружает мир сетей, мобильных устройств, сайтов, облаков. Чтобы работать с этим миром, придумано невероятное количество технологий и языков программирования. Есть ли среди них место для языков Си/Си++? Стоит ли тратить время на их изучение, стоит ли использовать их в своих проектах? Не пора ли этим языкам на пенсию? Эти темы в своем докладе обсудит Андрей Карпов, активно участвующий в жизни сообщества Си++-программистов. Забегая вперед можно утверждать - языки Си/Си++ живее всех живых. Андрей расскажет о развитии языка и новых возможностях, появившихся в Си++11. Многие возможности существенно облегчают работу программиста и сокращают объем кода.
Восстановление трехмерных сцен с помощью методов факторизации: принцип работы...Natalya Sveshnikova
Презентация к публикации:
Свешникова Н.В., Юрин Д.В. Восстановление трехмерных сцен с помощью методов факторизации: принцип работы и оценка погрешностей//В сб. Труды второй научной конференции СИМ'2005, Москва, Академия АйТи 19 мая 2005 г. -С.207-222. М.:ИФТИ 2005
Нас окружает мир сетей, мобильных устройств, сайтов, облаков. Чтобы работать с этим миром, придумано невероятное количество технологий и языков программирования. Есть ли среди них место для языков Си/Си++? Стоит ли тратить время на их изучение, стоит ли использовать их в своих проектах? Не пора ли этим языкам на пенсию? Эти темы в своем докладе обсудит Андрей Карпов, активно участвующий в жизни сообщества Си++-программистов. Забегая вперед можно утверждать - языки Си/Си++ живее всех живых. Андрей расскажет о развитии языка и новых возможностях, появившихся в Си++11. Многие возможности существенно облегчают работу программиста и сокращают объем кода.
Лекция 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)
Невидимая плоскость
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Хранение данных для табличных или матричных вычислений