180 likes | 358 Views
Konvexné Obaly. Pojem konvexný obal. Najmenšia konvexná množina obsahujúca dané body S každou dvojicou bodov obsahuje aj úsečku ktorá ich spája Prienik všetkých polrovín obsahujúcich dané body Mnoho definícii ale ani jedna nie je konštrukčného charakteru ako konvexný obal zostrojiť.
E N D
Pojem konvexný obal • Najmenšia konvexná množina obsahujúca dané body • S každou dvojicou bodov obsahuje aj úsečku ktorá ich spája • Prienik všetkých polrovín obsahujúcich dané body • Mnoho definícii ale ani jedna nie je konštrukčného charakteru ako konvexný obal zostrojiť
Reálne využitie • Ray tracing, video hry... -> náhrada za bounding boxy pri testovaní kolízií • Pri počítaní kolízii na reálných objektoch ktoré vykresľujeme príliš veľa testovania • Vhodné nahradiť približnou aproximáciou ktorá to dobre popisuje a má podstatne menej vrcholov • Používanie bounding boxov pre jednoduchosť alebo konvex obalov ktoré sú “presnejšie”
Zložitosť vytvorenia obalu • Konvexný obal je daný ako usporiadaná množina vrcholov konvexného mnohouholníka. • Preto algoritmy na tvorbu konvexného obalu musia vrcholy nejak triediť. • Dolná časová zložitosť triedenia je O(N.logN) • Preto aj algoritmy na konvex obaly majú zložitosť prinajlepšom O(N.logN)
Extremálne vrcholy • Konvexný obal množiny môžeme nájsť ako konvexný obal jeho extremálnych vrcholov • Extremálny vrchol p → neexistujú žiadne dva body a,b vstupnej množiny také, že p leží na otvorenej úsečke ab • Bod nie je extremálnym vrcholom ak leží v nejakom trojuholníku s vrcholmi ležiacimi v danej množine, ale sám nie je vrcholom takého trojuholníka
Triviálny algoritmus • Zo vstupnej množiny budeme hľadať body ktoré nie sú extremálne a tie budeme vyhadzovať • Vstupná množina veľkosti S určuje S^3 takýchto trojuholníkov. • Opakovaním pre každý vrchol dostaneme čas S^4. • Vídíme teda že konvexný obal vieme vytvoriť v konečnom čase aj keď tento algoritmus nie je ideálny
Graham Hull • Nájdeme vnútorný bod O – centroid bodov danej množiny (v čase O(N)) • Pre každý vrchol si vypočítame polárny uhol voči O a dané body zotriedime podľa tohoto uhla (v čase O(N.logN)) • Ak majú dva body rovnaký uhol tak ten bližší určite neleží na hranici – vynecháme. (O(N)) • Ostala nám množina bodov ktoré môžu byť hraničné
Graham Hull • Potom prechádzame trojice susedných bodov a ak je uhol reflexný (>= Pi) tak bod nemôže byť v obale – vyhodíme (konštantný čas pre uhol) • Opätovne opakujeme kým neprídeme k prvému bodu (O(N)) • Dostali sme množinu bodov ktoré tvoria konvexný obal. Čas na vytvorenie obalu je O(N.logN)
L-U Hull • Podobný princíp ako algoritmus Graham Hull • Zo vstupnej množiny sa zvolí najľavejší L a najpravejší R bod. Priamka LR potom rozdelí množinu na dve časti hornú a dolnú • Následne si dané časti usporiadame podľa x súradnice a postupujeme ako v algoritme Graham Hull • Ušetríme takto polárne súradnice ale princím ostáva podobný ako v predošlom algoritme
Quick Hull • Na začiatku zvolíme najľavejší a najpravejší bod L,R a priamka LR rozdelí vstupnú množinu na dve časti S1, S2. • Z množiny S1 zvolíme bod H tak aby maximalizoval plochu trojuholníka HLR • Ak je takých bodov viac tak maximalizujeme uhol HLR • Body v trojuholníku HLR nepatria konvexnému obalu
Quick Hull • Bod H patrí konvexnému obalu • Množina SL – naľavo od priamky LH a množina SR – napravo od priamky RH sú vstupom do ďalšej úrovne rekurzie • Konvexný obal získame ako zreťazenie konvexných obalov SL a SR
Zdroje • http://www.tcs.fudan.edu.cn/rudolf/Courses/Algorithms/Alg_ss_07w/Webprojects/Chen_hull/applications.htm • http://people.ksp.sk/~misof/skola/Zlozitost%20geometrickych%20algoritmov%20(3ipg%204ipg)/02%20Konvexne%20obaly.pdf • http://www.dma.fi.upm.es/mabellanas/tfcs/fvd/voronoi.html • http://en.wikipedia.org/wiki/Convex_hull