12.07.2015 Views

mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk

mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk

mobilná komunikácia - Vitajte na stránkach www.einsty.hostujem.sk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M U J E M E3D poèítaèová grafika / 5. èas: Èo s BSP stromom?V tejto èasti seriálu budeme pokraèova v problematikeriešenia vidite¾nosti pomocou BSP stromov. V predošlejèasti sme si vysvetlili, ako vytvori BSP strom. Teraz by ste asiradi vedeli, ako tento BSP strom poui <strong>na</strong> riešenievidite¾nosti. Princíp je u trochu zloitejší. Ak ste o BSP stro−moch ešte niè nepoèuli a preèítali by ste si iba princíp, zrej−me by ste mi neverili, e to <strong>sk</strong>utoène funguje. Preto si zober−te papier a pero. Niekde doprostred si dajte bod – to budepozorovate¾ (teda my). Dookola <strong>na</strong>kreslite èiarky (èiarkybudú predstavova polygóny), ktoré oèíslujete a pri kadejoz<strong>na</strong>èíte kladnú a zápornú polrovinu (pozri obrázok 1).Obr. 1Obr. 2Teraz si z týchto polygónov vytvoríme BSP strom, ktorýbude vyzera asi ako <strong>na</strong> obr. 2.Náš BSP strom síce nevyzerá ve¾mi pekne, ale to mu nièneuberá <strong>na</strong> funkènosti. Teraz ideme rieši vidite¾nos.Zaèneme pri prvom polygóne, t. j. pri polygóne è. 1. Terazsi zistíme, <strong>na</strong> ktorej strane polygónu sa <strong>na</strong>chádza pozoro−vate¾. Vidíme, e pozorovate¾ sa <strong>na</strong>chádza <strong>na</strong> zápornejstrane polygónu 1. Zaèneme teda prechádza opaènú vet−vu – t. j. prechádzame kladnú vetvu. Tu sa <strong>na</strong>chádza poly−gón è. 3. Pri òom postupujeme rov<strong>na</strong>ko. Zistíme si, <strong>na</strong> kto−rej strane sa <strong>na</strong>chádza pozorovate¾, a prejdeme do opaènejvetvy (pozorovate¾ sa <strong>na</strong>chádza <strong>na</strong> zápornej strane polygó−nu è. 3, t. j. ideme do kladnej vetvy). V kladnej vetve poly−gónu è. 3 sa však u ne<strong>na</strong>chádza iadny polygón. Vrátimesa teda spä <strong>na</strong> polygón è. 3 a vykreslíme ho. Teraz idemedo zápornej vetvy polygónu è. 3. Ani tu sa však ne<strong>na</strong>chádzaiadny polygón. Prešli sme všetkými vetvami polygónu 3,vrátime sa teda o úroveò vyššie, t. j. <strong>na</strong> polygón è. 1, avykreslíme ho. Potom prejdeme do zápornej vetvy polygó−nu è. 1. Tu sa <strong>na</strong>chádza polygón è. 2. Znovu ohodnotímepolohu pozorovate¾a vzh¾adom <strong>na</strong> polygón è. 2 a pokraèu−jeme ïalej rov<strong>na</strong>ko ako pri polygóne è. 1, resp. è. 3. Takým−to spôsobom prejdeme všetky polygóny. Mono ste si tovšimli, mono nie, ale ide o typický rekurzívny algoritmus.Zhròme si, ako sme postupovali:1. zaèí<strong>na</strong>me polygónom 12. prejdeme do vetvy 1+3. vykreslíme polygón 34. vykreslíme polygón 15. prejdeme do vetvy 1−6. vykreslíme polygón 27. prejdeme do vetvy 2−8. vykreslíme polygón 49. prejdeme do vetvy 4−10. vykreslíme polygón 511. prejdeme do vetvy 5−12. vykreslíme polygón 613. prejdeme do vetvy 6−14. vykreslíme polygón 7Polygóny sme vykres¾ovali v poradí 3, 1, 2, 4, 5, 6, 7.Ako vidie <strong>na</strong> obrázku, postupujeme od <strong>na</strong>jvzdialenejšíchpolygónov k <strong>na</strong>jbliším. To z<strong>na</strong>mená, e metódou prekres−¾ovania zí<strong>sk</strong>ame výsledný obraz s vyriešenou vidite¾nosou.Teraz si uvedieme zdrojový kód tohto algoritmu aj s opisom.Ak si ešte spomí<strong>na</strong>te, v predchádzajúcej èasti sme povytvorení BSP stromu dostali pre kadý polygón väzbu <strong>na</strong>jeho <strong>na</strong>dradený polygón. Ak si zoberieme situáciu v stro−me <strong>na</strong> obr. 2, tak polygón 1 by mal väzbu <strong>na</strong> polygón è.0 (ten neexistuje, ale to niè). Polygón è. 3 by mal väzbu <strong>na</strong>+1, polygón è. 2 <strong>na</strong> –1 atï. Táto štruktúra údajov bola vyho−vujúca pri vytváraní BSP stromu, nebola by však vyhovujúca<strong>na</strong> prechádzanie BSP stromu a vykres¾ovanie polygónov. Mu−síme si teda túto štruktúru zmeni tak, aby sme pri kadompolygóne mali väzby <strong>na</strong> polygóny hierarchicky pod ním. Zme−nu štruktúry údajov u<strong>sk</strong>utoèníme jednoducho:/*Kadý polygón bude ma ¾avú a pravú vetvu. V ¾avej vetvesa bude <strong>na</strong>chádza èíslo polygónu, ktorý je <strong>na</strong> zápornejstrane (v zápornom polpriestore) polygónu. V pravej vetvesa bude <strong>na</strong>chádza èíslo polygónu, ktorý je <strong>na</strong> kladnej stra−ne (v kladnom polpriestore) polygónu.*/for(i=0;i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!