mnohoúhelníky a jejich vlastnosti lokalizace bodu vůči konvexnímu mnohoúhelníku rozhodnutí, zda je bod vnitřní či vnější lokalizace bodu vůči nekonvexnímu mnohoúhelníku rozhodnutí, zda je bod vnitřní či vnější lokalizace bodu v rovinném grafu rozhodnutí, ve které stěně grafu daný bod leží
Definice nohoúhelník je část roviny ohraničená uzavřenou lomenou čarou tvořenou konečným počtem vrcholů. Nechť sousední vrcholy). je strana mnohoúhelníka (úsečka spojující počet vrcholů, stran a vnitřních úhlů je v jednom mnohoúhelníku stejný = n ( ) P ei = pip i + 1 n (každé dvě sousední strany mají společný právě jeden krajní bod a neleží v téže přímce) p i
nohoúhelníky a jejich vlastnosti P Konvexní mnohoúhelník je takový mnohoúhelník, jehož všechny vnitřní úhly jsou konvexní. V konvexním mnohoúhelníku neleží žádný bod spojnice dvou libovolných vrcholů vně. p, p, i i j P j Všechny úhlopříčky konvexního mnohoúhelníku leží uvnitř. P P P q Přímka, která není rovnoběžná se žádnou hranou konvexního mnohoúhelníku, protíná nejvýše ve dvou bodech. P P
konvexní mnohoúhelník žádný bod spojnice libovolných vrcholů neleží vně mnohoúhelníka p j p i + 1 p i p i nejvýše 2 průsečíky q všechny úhlopříčky leží uvnitř mnohoúhelníka
nohoúhelníky a jejich vlastnosti Konvexní mnohoúhelník leží vždy v jedné z polorovin určených kteroukoli stranou. Pokud je alespoň jeden z vnitřních úhlů mnohoúhelníku vetší než, mnohoúhelník je nekonvexní. V nekonvexním mnohoúhelníku existuje alespoň jedna spojnice dvou vrcholů, jejíž body leží vně mnohoúhelníku. i P p, p, i j j P P P P π
konvexní mnohoúhelník nekonvexní mnohoúhelník p i + 1 p i existuje spojnice vrcholů vně mnohoúhelníka
nohoúhelníky a jejich vlastnosti Jednoduchý mnohoúhelník je takový mnohoúhelník, pro jehož strany platí průsečíkem sousedních stran je bod tj. ei, e i + 1 p i + 1 ei = pipi+ 1, ei+ 1 = pi+ 1pi+ 2 ei ei+ 1 = pi+ 1 strany, které spolu nesousedí, nemají žádný průsečík e tj., pro každé i e = j i + 1 j jednoduchý mnohoúhelník p i e i p i p i + 1 e i p i + 1
nohoúhelníky a jejich vlastnosti Každý konvexní mnohoúhelník je jednoduchý. Každý mnohoúhelník s vrcholy má úhlopříčku, počet úhlopříček n 4 n 4 v mnohoúhelníku s vrcholy je. n 4 1 ( 3) 2 nn Každý mnohoúhelník s vrcholy může být přidáním úhlopříček dekomponován na množinu trojúhelníků triangulace. Každá triangulace mnohoúhelníku s vrcholy používá n 2 úhlopříček a trojúhelníků. n 4 n 3
triangulace
triangulace n =14 počet úhlopříček v triangulaci 14 3 = 11 počet trojúhelníků 14 2 = 12
nohoúhelníky a jejich vlastnosti Hvězdicový mnohoúhelník je takový mnohoúhelník, pro který platí existuje vnitřní bod polygonu (nesplývá s žádným vrcholem mnohoúhelníku a neleží na žádné straně mnohoúhelníku) každá úsečka ( - vrchol mnohoúhelníka) leží celá uvnitř mnohoúhelníka zp z i p i z množina bodů se nazývá jádro hvězdicového mnohoúhelníka z
Lokalizace bodu určení polohy bodu vzhledem k mnohoúhelníku vstup mnohoúhelník bod výstup bod leží uvnitř mnohoúhelníku bod leží vně mnohoúhelníku P P P bod leží na straně mnohoúhelníka (případně splývá s vrcholem) P 1 2 3
Lokalizace bodu - konvexní mnohoúhelníky A 0,1 zvolíme bod uvnitř konvexního mnohoúhelníka (lin. kombinace vrcholů mnohoúhelníka s koeficienty ) např. těžiště libovolných třech vrcholů ( ) p 6 p 7 A p 5 p 1 p 4 p 3
Lokalizace bodu - konvexní mnohoúhelníky A bod spojíme s lib. dvěma vrcholy (rozdělíme na dva úhly, bod je vrchol) A p 6 p 7 A p 5 p 1 p 4 p 3
Lokalizace bodu - konvexní mnohoúhelníky zjistíme, ve kterém úhlu leží bod - jak? p 7 p 1 p 6 A p 3 p 5 p 4 pokud bod leží na rameni např.,,za bodem,,před bodem mnohoúhelníka - bod je vně mnohoúhelníka - bod je uvnitř znovu dělíme úhel, ve kterém leží bod zjistíme, ve kterém úhlu leží bod A celé opakujeme
Lokalizace bodu - konvexní mnohoúhelníky p 6 p 6 p 5 p 5 p 7 p 1 A p 4 p 7 p 1 A p 4 p 3 p 3
Lokalizace bodu - konvexní mnohoúhelníky p 6 p 6 p 7 p 1 A p 5 p 4 p 7 p 1 A p 5 p 4 p 3 p 3
Lokalizace bodu - konvexní mnohoúhelníky p 6 p 6 p 5 p 5 p 7 p 1 A p 4 p 7 p 1 A p 4 p 3 p 3
Lokalizace bodu - konvexní mnohoúhelníky p 6 p 6 p 7 p 1 A p 5 p 4 p 7 p 1 A p 5 p 4 p 3 p 3
Lokalizace bodu - konvexní mnohoúhelníky p 7 p 1 p 6 A p 5 p 4 poslední krok ramena úhlů procházejí sousedními vrcholy zjistíme, zda úsečka protíná stranu mnohoúhelníka p4p5 ano bod je vně ne bod je uvnitř A p 3
Lokalizace bodu - konvexní mnohoúhelníky p 7 p 1 p 6 p 5 p 4 určení orientace mnohoúhelníku proti směru hodinových ručiček - pravotočivá pi = [ xi, yi] p = [ x, y ], p = [ x, y ] tři po sobě jdoucí vrcholy, i+ 1 i+ 1 i+ 1 i+ 2 i+ 2 i+ 2 p 3 x x x i y y y i+ 1 i+ 1 i+ 2 i+ 2 i 1 1 > 0 1
Lokalizace bodu - konvexní mnohoúhelníky p 7 p 6 p 5 vrcholy konvexního mnohoúhelníku orientovány pravotočivě [ m1, m2] pi, p i + 1 p = [ x, y ], p = [ x, y ] bod - uvnitř pro každou stranu i i i i+ 1 i+ 1 i+ 1 p 1 p 3 p 4 x x i y y i i+ 1 i+ 1 > m m 1 2 1 1 0 1 bod vně existuje strana, pro kterou je determinant záporný
Lokalizace bodu - nekonvexní mnohoúhelníky bodem vedeme libovolnou polopřímku q = tzv. paprskový algoritmus (Ray Crossing algorithm) p p9 10 q p 8 p 7 p 6 p 5 p 1 p 3 p 4
Lokalizace bodu - nekonvexní mnohoúhelníky počet průsečíků přímky q a mnohoúhelníku lichý bod je uvnitř mnohoúhelníka sudý bod je vně mnohoúhelníka p p9 10 q p 8 p 7 p 6 p 5 p 1 p 3 p 4
Lokalizace bodu - nekonvexní mnohoúhelníky co musíme ošetřit? polopřímka prochází vrcholem q p i q pi počítáme jeden průsečík počítáme dva průsečíky
Lokalizace bodu - nekonvexní mnohoúhelníky co musíme ošetřit? polopřímka stranou q p i p i + 1 q p i p i + 1 počítáme jeden průsečík - navazující strany v různých polorovinách určených přímkou q počítáme dva průsečíky - navazující strany ve stejné polorovině
Lokalizace bodu určení polohy bodu vzhledem k množině mnohoúhelníků vstup rovinný graf bod výstup množina vrcholů, hran a stěn víme, které vrcholy jsou incidentní s hranou víme, které stěny jsou incidentní s hranou hrany orientované, dohoda stěny incidentní s hranou (1. levá, 2. pravá) stěna grafu, ve které leží bod
1 2 3
Lokalizace bodu bodem vedeme libovolnou polopřímku q q
Lokalizace bodu bodem vedeme libovolnou polopřímku q q zjistíme všechny průsečíky této polopřímky s hranami grafu z těchto průsečíků vybereme ten, který je bodu nejblíže určíme hranu, na které leží určíme, zda bod leží vlevo nebo vpravo od zjištěné hrany tím je určena stěna, ve které bod leží
Lokalizace bodu - předzpracování rozdělíme graf do svislých pásů každým vrcholem vedeme rovnoběžku s osou dvě sousední rovnoběžky vymezují jeden pás y y x
Lokalizace bodu - předzpracování uvnitř pásu se nenachází žádný jiný počáteční nebo koncový bod žádné z hran uvnitř pásu se žádné dva segmenty neprotínají y průnikem oblasti a pásu je lichoběžník (případně trojúhelník) každý lichoběžník uvnitř pásu (s výjimkou okrajového) má horního a dolního souseda x
Lokalizace bodu - předzpracování princip nalezení stěny, ve které leží bod nalezení pásu, ve kterém leží bod pro tento pás nalezení lichoběžníku, uvnitř kterého bod leží y x
Lokalizace bodu předzpracování popis algoritmu setřídíme x-ové souřadnice vrcholů grafu (vrcholy očíslujeme dle tohoto uspořádání) v každém pásu si pamatujeme uspořádaný seznam hran procházející pásem, uspořádáno podle y-ové souřadnice vyhledáme pás, ve kterém leží bod (dle x-ové souřadnice) v pásu hledáme takovou úsečku, nad nebo pod kterou bod leží (půlením) určíme stěnu grafu, ve které leží bod