В общем окончательно запутался я)
есть допустим такой "левел":
http://s52.radikal.ru/i137/0906/07/401be4c6c071.jpg
я строю дерево и выходит так:
http://s49.radikal.ru/i126/0907/eb/37c74e125f7d.jpg
проблема в том что leaf5 уезжает!
(над выбором первого сплиттера не заморачивался, это сейчас не важно)
по идее он должен ограничиваться плоскостью 8, но перебор не доходит до неё.
алгоритм у меня такой:
ФУНКЦИЯ Build Tree
{
есть сплиттер. помечаем его чтобы больше не использовать.
ПЕРЕБИРАЕМ ВСЕ ПОЛИГОНЫ {
Если не был использован (нету в дереве) {
полигон сзади плоскости? ставим в левую ветку дерева. вызываем эту же функцию на него как на сплиттер.
полигон спереди плоскости? ставим в правую ветку дерева. вызываем эту же функцию на него как на сплиттер.
часть точек полигона сзади а часть спереди плоскости? {
режем полигон на две части.
кладём каждый новый в конец списка.
}
}
}
Создаём лист (leaf)
}
проблема в том, что когда мы доходим до плоскости 5, мы начинаем проверять что сзади её и уходим на 6. таким образом мы никогда не рассечём полигон 8.
поменять местами сзади-спереди плохая идея, т.к. обнаружится такой же баг только наоборот рано или поздно.