Konvexny obal

Download Report

Transcript Konvexny obal

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/Algo
rithms/Alg_ss_07w/Webprojects/Chen_hull/appl
ications.htm
http://people.ksp.sk/~misof/skola/Zlozitost%20g
eometrickych%20algoritmov%20(3ipg%204ipg)/
02%20Konvexne%20obaly.pdf
http://www.dma.fi.upm.es/mabellanas/tfcs/fvd/v
oronoi.html
http://en.wikipedia.org/wiki/Convex_hull