Изменения

Перейти к: навигация, поиск

BSP-дерево

474 байта добавлено, 19:03, 17 января 2015
Определение
Этот процесс можно представить с помощью двоичного дерева. Каждый лист дерева соответствует грани разбиения, в нем хранится фрагмент объекта, находящийся внутри этой грани. Каждый узел дерева соответсвует разбивающей прямой, которая хранится в этом узле.
Если сцене присутствуют 1D-объекты (отрезки), то они могут лежать на прямой разбиения, в таком случае соответсвующий узел хранит их в листьях.
 
{{Определение
| definition = '''Двоичное разбиение пространства''' (англ. ''binary space partition'') или '''BSP-дерево''' {{---}} структура данных, хранящая множество объектов на плоскости, рекурсивно разбитой прямыми.
}}
Рассмотрим гиперплоскость <tex>h: a_1*x_1 + a_2*x_2 + ... + a_d*x_d + a_{d + 1} = 0</tex>.
*Если <tex>|S| <= 1</tex>, то <tex>T</tex> {{---}} лист. Фрагмент объекта в S, если он существует, хранится в этом листе.
*Если <tex>|S| > 1</tex>, то в корне дерева <tex>v</tex> хранится гиперплоскость <tex>h_v</tex> и множество <tex>S(v)</tex> объектов, которые полностью содержатся в <tex>h_v</tex>.
** левый ребенок <tex>v</tex> является корнем BSP дерева <tex>T^-</tex> на множестве объектов <tex>S^- = \{h_v^- \cap s : s \in S\}</tex>.; ** правый ребенок <tex>v</tex> является корнем BSP дерева <tex>T^+</tex> на множестве объектов <tex>S^+ = \{h_v^+ \cap s : s \in S\}</tex>.
Размер BSP-дерева равен суммарному размеру множеств во всех узлах. То есть, размер BSP-дерева {{---}} это число фрагментов, на которые были разбиты объекты. Так как BSP-дерево не содержит бесполезные прямые (прямые, которые разбивают пустую грань), то количество узлов пропорционально размеру дерева.
И еще рисунок про соответсвие нодов и регионов.
Листья BSP-дерева соответствуют граням, то есть мы можем каждой вершине <tex>v </tex> сопоставить полигональную область на плоскости, которая определяется как пересечение полуплоскостей <tex>h_{\mu}^{\Diamond}</tex>, где <tex>\mu</tex> {{---}} предок <tex>v</tex>, а <tex>\Diamond</tex> = { -, если <tex>v</tex> {{---}} левый ребенок; +, если <tex>v</tex> {{---}} правый ребенок}
Корню дерева соответсвует все пространство.
Таким образом, серая область на рисунке соответствует региону <tex>l_1^+ \cap l_2^+ \cap l_3^+</tex>.
При построении BSP-дерева могут использоваться любые разбивающие гиперплоскости. В целях упрощения вычислений может быть удобно ограничить множество доступных разбивающих гиперплоскостей.Обычно используют авто-разбиения. {{Определение| definition = В двухмерном случае для множества отрезков разбиение, в котором используются разбивающие прямые, проходящие через один из данных отрезков, называется '''авто-разбивающим'''. }}{{Определение| definition = В трехмерном случае для множества полигонов разбиение, в котором используются разбивающие плоскости, проходящие через одну из данных плоскостей, называется '''авто-разбивающим'''. }}{{Определение| definition = BSP-дерево, построенное с применением авто-разбиения, называются '''авто-разбивающим'''. }}
Обычно ограничивают следующим образом:Предположим, что мы хотим построить BSP-дерево для множества отрезков на плоскости. Очевидно, что лучшими кандидатами разбивающих прямых являются продолжения данных отрезков. BSP-дерево, которое использует разбивающие прямые только такого вида, называется авто-разбивающим. Для множества плоских полигонов в трехмерном пространстве авто-разбивающим является BSP-дерево, которое использует только полоскости, на которых лежат данные полигоны.Но автоАвто-разбивающие деревья деревья имеют минимальный размер.
== BSP-деревья и алгоритм художника ==
Анонимный участник

Навигация