konvexné obaly
Post on 14-Jan-2016
38 Views
Preview:
DESCRIPTION
TRANSCRIPT
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ť
Ukážka konvexného obalu
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”
Boundig Box na kolizie
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
Extremalne vrcholy
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)
Graham Hull
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
L-U Hull
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
Quick Hull
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
top related