+ All Categories
Transcript
Page 1: Jádro polygonální oblasti

1

Jádro polygonální oblasti

36VGEZS 2007/2008

FEL ČVUT

Roman Hocke

Page 2: Jádro polygonální oblasti

2

Jádro polygonální oblasti

Množina všech bodů, ze kterých jsou „vidět“ všechny ostatní body polygonu.

Jádrem konvexního polygonu jsou všechny jeho body.

Page 3: Jádro polygonální oblasti

3

Jádro polygonální oblasti

Jádro má konvexní tvar (existuje-li).

Existuje pouze u konvexních nebo hvězdicových (star-shaped) polygonů.

Page 4: Jádro polygonální oblasti

4

Jádro polygonální oblasti

Příklad polygonální oblasti, která nemá jádro.

Page 5: Jádro polygonální oblasti

5

Motivace

Jádro je oblast, ze které lze „dohlédnout“ do všech míst v polygonální oblasti.

Ideální poloha v místnosti pro bezpečnostní kamery, senzory...

Místo pro vysílač, který má pokrýt signálem celou danou polygonální oblast (přímá viditelnost).

Page 6: Jádro polygonální oblasti

6

Průnik polorovin

Jádro polygonální oblasti lze sestrojit jako průnik polorovin.

V úvahu se berou poloroviny určené hranami polygonu.

Page 7: Jádro polygonální oblasti

7

Průnik polorovin

Page 8: Jádro polygonální oblasti

8

Průnik polorovin

Page 9: Jádro polygonální oblasti

9

Průnik polorovin

Page 10: Jádro polygonální oblasti

10

Průnik polorovin

Page 11: Jádro polygonální oblasti

11

Průnik polorovin

Průnik polorovin je asociativní operace:(H1 H2) H3 = H1 (H2 H3)

Lze použít metodu Rozděl a panuj.

Page 12: Jádro polygonální oblasti

12

Průnik polorovin

Vstup: množina polorovin M

Výstup: polygon vzniklý jako průnik polorovin z M pokud |M| = 1, vrať polorovinu z M pokud |M| > 1, pak

rozděl M na disj. Podmnožiny M1, M2 rekurzivně najdi polygony P1, P2 - průnik

polorovin v M1, M2 vrať průnik P1 P2

Page 13: Jádro polygonální oblasti

13

Průnik polorovin

Časová složitost metody Rozděl a panuj: „strom“ rekurze má při n polorovinách

hloubku log(n) průnik 2 polygonů o j a k hranách má

složitost (j+k) v nejnižší úrovni „stromu“ probíhá průnik

polygonů o nejmenším počtu hran celková časová složitost je n.log(n)

Page 14: Jádro polygonální oblasti

14

Lee - Preparata

systematičtější hledání průniku polorovin postupné „odřezávání“ nevhodných částí

z budoucího jádra budoucí jádro udržujeme jako spojový seznam

vrcholů a hran seřazený proti směru hod. ručiček (CCW)

rozdělíme vrcholy polygonu na: konvexní – s vnitřním úhlem < 180° reflexní – s vnitřním úhlem > 180°

Page 15: Jádro polygonální oblasti

15

Lee - Preparata

Výchozí stav vybereme reflexní

vrchol V0 najdeme polopřímky

z V0 opačnými směry, než příslušné hrany

tyto přímky určují výchozí podobu budoucího jádra – oblast K

Page 16: Jádro polygonální oblasti

16

Lee - Preparata

body F a L inicializujeme v „nekonečnu“ tyto body představují levou a pravou hranici

oblasti K při pohledu z aktuálního vrcholu polygonu

poté postupně procházíme vrcholy polygonu upravujeme a ořezáváme oblast K na základě

vlastností vrcholů a hran polygonu

Page 17: Jádro polygonální oblasti

17

Lee - Preparata

1. Vrchol je reflexní a bod F leží vlevo od polopřímky z dalšího vrcholu

z bodu F hledáme CCW průsečík s polopřímkou

nenajdeme-li, je K prázdné

Page 18: Jádro polygonální oblasti

18

Lee - Preparata

hledáme druhý průsečík přímky s K (CW)

najdeme-li, posuneme do druhého průsečíku bod F

„odřízneme“ příslušnou část K

zjistíme, zda K zůstane neuzavřený (pokud jsme nenašli druhý průsečík)

Page 19: Jádro polygonální oblasti

19

Lee - Preparata

2. Vrchol je reflexní a bod F leží vpravo od polopřímky z dalšího vrcholu

jádro K se nezmění upravíme bod F tak, aby

to byl i nadále „krajní viditelný“ bod z následujícího vrcholu polygonu

Page 20: Jádro polygonální oblasti

20

Lee - Preparata

procházíme K proti směru hod. ručiček, dokud je následující bod z K vlevo od polopřímky z vrcholu do F

vrchol, ve kterém skončíme, je nový vrchol F

Page 21: Jádro polygonální oblasti

21

Lee - Preparata

Obdobně též pro 3. a 4. případ

- konvexní vrchola bod L

Page 22: Jádro polygonální oblasti

22

Lee - Preparata

Page 23: Jádro polygonální oblasti

23

Lee - Preparata

Page 24: Jádro polygonální oblasti

24

Lee - Preparata Následuje konkrétní příklad na konkrétním

polygonu

Page 25: Jádro polygonální oblasti

25

Lee - Preparata Jako počáteční vrchol jsme zvolili reflexní bod

V0.

Page 26: Jádro polygonální oblasti

26

Lee - Preparata V1 – konvexní vrchol

Page 27: Jádro polygonální oblasti

27

Lee - Preparata L vpravo od pol. V1-V2, průsečík W1

Page 28: Jádro polygonální oblasti

28

Lee - Preparata Ořízli jsme K, zatím je stále otevřené.

Page 29: Jádro polygonální oblasti

29

Lee - Preparata V2 je reflexní vrchol.

Page 30: Jádro polygonální oblasti

30

Lee - Preparata Bod F leží vpravo od polopřímky.

Page 31: Jádro polygonální oblasti

31

Lee - Preparata Opět ořízneme K, navíc se přemístí bod F.

Page 32: Jádro polygonální oblasti

32

Lee - Preparata V3 je konvexní vrchol.

Page 33: Jádro polygonální oblasti

33

Lee - Preparata L vpravo od pol. V3-V4.

Page 34: Jádro polygonální oblasti

34

Lee - Preparata Průsečíky W1, W2.

Page 35: Jádro polygonální oblasti

35

Lee - Preparata K se uzavřel.

Page 36: Jádro polygonální oblasti

36

Lee - Preparata V4 je konvexní...

Page 37: Jádro polygonální oblasti

37

Lee - Preparata L vpravo od polopř.

Page 38: Jádro polygonální oblasti

38

Lee - Preparata Oříznutí, přesun bodu L.

Page 39: Jádro polygonální oblasti

39

Lee - Preparata Z jádra vidíme všechny body v polyg. oblasti.

Page 40: Jádro polygonální oblasti

40

Lee - Preparata

Časová složitost algoritmu: procházíme všechny vrcholy polygonu body F a L „obejdeme“ jádro 1x jádro nemá víc než n vrcholů

celková časová složitost je n Algoritmus je třeba doplnit testem, který ošetří

případy vedoucí k časové složitosti n2

Page 41: Jádro polygonální oblasti

41

Jádro polygonální oblasti

Použité zdroje: http://service.felk.cvut.cz/courses/36VGE/prednasky/Pruniky.ppt.pdf

http://en.wikipedia.org/wiki/Star-shaped_polygon

http://www.cs.mcgill.ca/~ethan/cs507/convexify/applet.html

Děkuji za pozornost.


Top Related