Praca magisterska BVH
Praca magisterska BVH
Praca magisterska BVH
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
19<br />
Usunięcie rekursji<br />
Algorytm śledzenia promieni nadaje się znakomicie do zaimplementowania za<br />
pomocą rekursji. Nie chodzi tu tylko o metodę rekuryncyjnego śledzenia promieni,<br />
ale samą budowę drzewa, czy sposób jego trawersowania.<br />
Rekurencyjny algorytm budowy drzewa dla danego zbioru trójkątów S:<br />
1. jeśli zbiór S jest dość mały, utwórz liść i zakończ algorytm budowy<br />
2. podziel zbiór trójkątów S na dwa podzbiory S 1 oraz S 2 i utwórz węzeł<br />
wewnętrzny N<br />
3. wywołaj procedurę budowy drzewa dla zbioru S 1 , gotowe drzewo podepnij<br />
do węzła N jako lewe dziecko<br />
4. wywołaj procedurę budowy drzewa dla zbioru S 2 , gotowe drzewo podepnij<br />
do węzła N jako prawe dziecko<br />
Rekurencyjny algorytm przeglądania drzewa dla danego promienia r:<br />
1. jeśli aktualny węzeł jest liściem przetnij promień r ze wszystkimi trójkątami,<br />
które się w nim znajdują i zakończ procedurę<br />
2. sprawdź przecięcie promienia r z lewym dzieckiem, jeśli przecina, to wywołaj<br />
procedurę przeglądania dla lewego dziecka<br />
3. sprawdź przecięcie promienia r z prawym dzieckiem, jeśli przecina, to wywołaj<br />
procedurę przeglądania dla prawego dziecka<br />
Wywołania rekurencyjne zajmują sporo czasu, jedną z przyczyn jest potrzeba<br />
rezerwowania pamięci na stosie dla takich wywołań. Wyjściem w tej sytuacji jest<br />
przerobienie obu wyżej opisanych rozwiązań na algorytmy, które w pętli, korzystając<br />
z wcześniej przygotowanego stosu sprawnie poradzą sobie zarówno z budową<br />
drzewa jak i z jego przeglądaniem. W rozwiązaniu tym zamiast wywołania rekuryncyjnego<br />
funkcji wystarczy wrzucić odpowiednie dane na stos i przejść do<br />
początku pętli, gdzie dane te są ze stosu zdejmowane i wykonuje się na nich<br />
wszystkie żądane operacje.<br />
Podział trójkątów „w miejscu”<br />
W każdym kroku budowy drzewa potrzebne jest podzielenie trójkątów na dwa<br />
podzbiory według pewnej zasady. Przeważnie polega to na wyborze jednej płaszczyzny.<br />
Następnie trójkąty, których środki ciężkości znajdują się po jednej jej stronie<br />
trafiają do jednego zbioru, pozostałe do drugiego. Jak już wcześniej wspomniałem,