43
Nalezení jádra polygonální oblasti Zpracoval: Šafránek David

Nalezení jádra polygonální oblasti

  • Upload
    deon

  • View
    39

  • Download
    0

Embed Size (px)

DESCRIPTION

Nalezení jádra polygonální oblasti. Zpracoval: Šafránek David. Slovník pojmů. hranaedgee vrcholvertexv polorovinahalf-planeH polygonpolygon P jádrokernelK ve směru hod . ručičekclockwise protisměru hod . ručičekcounterclockwise - PowerPoint PPT Presentation

Citation preview

Page 1: Nalezení jádra polygonální oblasti

Nalezení jádra polygonální oblasti

Zpracoval: Šafránek David

Page 2: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 2

Slovník pojmů

hrana edge evrchol vertex vpolorovina half-plane Hpolygon polygon Pjádro kernel Kve směru hod. ručiček clockwiseprotisměru hod. ručiček

counterclockwiseHvězdicovitý polygon star-shaped , star polygon

polygon s neprázdným jádrem

Page 3: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 3

Terminologie vrcholů v0 konvexní, vypouklý (convex) vnitřní úhel < 180

v1 konkávní, vydutý, introspektivní (reflex)

vnitřní úhel > 180

V1

V0

Page 4: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 4

Problém

máme polygon s N vrcholy v rovině, zkonstruujeme jeho jádro

Page 5: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 5

Definice

množina bodů odkud jsou všechny body polygonu přímo viditelné, aniž by výhled křížila hrana

Page 6: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 6

Grafická ukázka definice

K

Page 7: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 7

Odborná definice

Jádro je průnik N polorovin. Každá hrana polygonu P určuje polorovinu, ve které jádro musí ležet. Průnik vnitřních (levých - postupujeme-li proti směru hodinových ručiček) polorovin.

Page 8: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 8

Pozice bodu vůči orientované přímce vlevo nebo vpravo a, b, c určuje přímku x a y určuje bod řešíme rovnici w = a . x + b . y + c w=0: leží na přímce w < 0: leží v pravé polorovině w > 0: leží v levé polorovině při zvolení opačného normálového

vektoru (a, b) se změní w znaménko

Page 9: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 9

Algoritmus

Algoritmus v pořadí prochází vrcholy P a konstruuje konvexní polygony Ki. Každý z těchto polygonů může i nemusí být ohraničený.

Polygon Ki+1 je tvořen průnikem Hn n=0..i+1, a i=0..N-2 (N je počet vrcholů/hran počátečního polygonu).

Takto zkonstruované Ki je společný průnik polorovin ležících vlevo od hran P.

Page 10: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 10

Důsledky algoritmu

Tento výsledek má zřejmé důsledky:

1) KN-1=K(P) - aplikujeme na všechny hrany

2) K1 nadmnožinou K2 - Ki+1 = Ki "and" Hi

Page 11: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 11

Základní algoritmus

počítáme průnik poloroviny s polygonem

výpočetně náročné

Page 12: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 12

Chytrý algoritmus

zrychlení pomocí vrcholů F a L, při průniku s polorovinou vymezují jen část jádra, tudíž neprohledáváme celé dosud nalezené jádro

Page 13: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 13

Vstup polygon P - uspořádané vrcholy (hrany) ei následované vi

V0

V1

V2

V3

V4

V5 V6 N=7

e0

e1

e2

e4

e3

e6

e5

Page 14: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 14

Výstup

když bude K(P) neprázdný, pak výstup bude také ve formě posloupnosti vrcholů (hran)

Page 15: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 15

Triviální případ

N < 3: není polygon N = 3: jádro je totožné s

polygonem

Page 16: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 16

Úvodní krok

Nalezení konkávního vrcholu a vygenerování výchozího neuzavřeného jádra K1. Není-li vrchol nalezen, pak polygon P je konvexní, jedná se o triviální případ - jádro je totožné s polygonem K(P)=P. Tudíž připustíme, že v0 je konkávní vrchol.

Určení F1 jako bod v nekonečnu na přímce e1 ve směru v0 a L1 obdobně na přímce e0 ve směru v0.

Page 17: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 17

Grafická zobrazení prvního kroku

V0

V1

V2

V3

V4

V5 V6

e0

e1

e2

e4

e3

e6 e5

K1

F

L

Page 18: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 18

Hlavní krok

máme-li Ki, pak zhotovíme Ki+1 tak, že vezmeme další vrchol v pořadí (vi) a spočteme Ki+1

dále upravíme Fi a Li tak, že spojnice s aktuálním bodem vi polygonu neprotíná žádné jeho hrany

detailní popis algoritmu obsahuje značné větvení (konvexní | konkávní vrchol, F (L) leží vpravo | vlevo)

Page 19: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 19

Podmínka pro F a L

F

Vi

L K

Page 20: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 20

1.1 Konkávní vrchol, F leží vpravo od od ei+1 vi+1

F

Vi

L K

ei ei+1

w1

w2

Page 21: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 21

procházíme K proti směru hodinových ručiček od F dokud nenalezneme průsečík (w1) s ei+1 vi+1, dojdeme-li až k L, pal je K(P)=Ø

F

Vi

L K

ei ei+1

w1

w2

Page 22: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 22

procházíme K po směru hodinových ručiček od F dokud nenalezneme průsečík (w2) s ei+1 vi+1, ořízneme K podle hrany w1 w2

F

Vi

L K

ei ei+1

w1

w2

Page 23: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 23

F: je na konci hrany w1 w2

F

Vi

L K

ei ei+1

w1

w2

Page 24: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 24

L: procházíme K proti směru hodinových ručiček od L dokud nenajdeme vrchol w, takový, že následující vrchol leží vpravo od vi+1(vi+1w), pak Li+1=w jinak zůstává

F

Vi

L K

ei ei+1

w1

w2

Page 25: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 25

1.2 Konkávní vrchol, F leží vlevo od od ei+1 vi+1

Vi F

ei

ei+1

L

K

Page 26: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 26

K zůstává stejné. F: procházíme K protisměru hodinových

ručiček od F dokud nenajdeme vrchol w, takový, že následující vrchol leží vpravo od vi+1(vi+1w), pak Fi+1=w jinak zůstává

Vi F

ei

ei+1

L

K

Page 27: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 27

L: stejně jako v případě 1.1 1.1: procházíme K proti směru hodinových ručiček

od L dokud nenajdeme vrchol w, takový, že následující vrchol leží vpravo od vi+1(vi+1w), pak Li+1=w jinak zůstává

Vi F

ei

ei+1

L

K

Page 28: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 28

2.1 L leží na nebo vpravo od ei+1 vi+1

Vi F

L K

W1

W2

ei

ei+1

Page 29: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 29

procházíme K po směru hodinových ručiček od L dokud nenalezneme průsečík (w1) s ei+1 vi+1, dojdeme-li až k L je K(P)=Ø

Vi F

L K

W1

W2

ei

ei+1

Page 30: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 30

procházíme K proti směru hodinových ručiček od L dokud nenalezneme průsečík (w2) s vi ei+1. Provedeme oříznutí hranou w1 w2

Vi F

L K

W1

W2

ei

ei+1

Page 31: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 31

2.2 L leží vlevo od ei+1 vi+1

Vi F

L

ei

ei+1

Page 32: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 32

K zůstává stejné. F: stejně jako v případě 1.2 1.2 procházíme K protisměru hodinových ručiček

od F dokud nenajdeme vrchol w, takový, že následující vrchol leží vpravo od vi+1(vi+1w), pak Fi+1=w jinak zůstává

Vi F

L

ei

ei+1

Page 33: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 33

L: je-li K ohraničené tak jako 1.1 jinak zůstává 1.1: procházíme K proti směru hodinových

ručiček od L dokud nenajdeme vrchol w, takový, že následující vrchol leží vpravo od vi+1(vi+1w), pak Li+1=w jinak zůstává

Vi F

L

ei

ei+1

Page 34: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 34

Složitost

paměťová složitost O(n) jádro polygonální oblasti může být

zkonstruováno v optimálním čase O(n)

nejhorší složitost nastane pro následující instanci - polygon bez jádra, kde má daný algoritmus časovou složitost O(N2)

Page 35: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 35

Nejhorší případ

V0 1 2 3

P

Page 36: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 36

Řešení

ukončit algoritmus jakmile obteče v úhlu větším než 3π kterýkoliv bod částečného jádra K

Page 37: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 37

Applet

http://web.informatik.uni-bonn.de/I/GeomLab/VisPolygon/index.html.en

Page 38: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 38

Použití

zjištění, zda je polygon hvězdicovitý

umístění všesměrového vysílače

Page 39: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 39

Další algoritmy

Competitive strategy (Závodní strategie)

nalezení bodu jádra polygonální oblasti - maximálně 5.333x delší než nejkratší cesta, předpokládá rozhled 360° - využití v robotice

Page 40: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 40

Zobecnění do více prostorů při přechodu do trojrozměrného

prostoru je třeba přímky nahradit rovinami, a najít uspořádání všech trojúhelníků (tesselace) v objektu

Page 41: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 41

Kde získat další informace

Franco P. Preparata: Computational Geometry http://www.pi6.fernuni-hagen.de/publ/

tr211.pdf

Page 42: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 42

Dotazy

Page 43: Nalezení jádra polygonální oblasti

36VGE - Výpočetní geometrie 43

Děkuji za pozornost