46
Geometrické vyhledání. Ray algoritmus. Winding algoritmus. Lichobˇ ežníkové (trapezoidální) mapy. Tomáš Bayer | [email protected] Katedra aplikované geoinformatiky a kartografie. Pˇ rírodov ˇ edecká fakulta UK. Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Pˇ edecká fakulta UK.) Geometrické vyhledání. 1 / 46

Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Geometrické vyhledání.Ray algoritmus. Winding algoritmus. Lichobežníkové (trapezoidální) mapy.

Tomáš Bayer | [email protected]

Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 1 / 46

Page 2: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Obsah prednášky

1 Úvod do problému

2 Techniky rešení problému

3 Metoda opakovaného test polohy bodu a mnohoúhelníku

Konvexní mnohoúhelníky

Nekonvexní mnohoúhelníky

4 Metody založené na planárním delení roviny

Line Sweep Algorithm

Trapezoidální mapy

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 2 / 46

Page 3: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Úvod do problému

1. Ve kterém mnohoúhelníku leží kurzor?

Data set tvorí 6000 mnohoúhelníku a cca 1 milión bodu.Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 3 / 46

Page 4: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Úvod do problému

2. Formulace problému

Dáno:V rovine dána množina n bodu pi tvorících vrcholy mmnohoúhelníku Pj a bod q.

Hledáme: Mnohoúhelník P obsahující bod q⇒ tzv. Point Location Problem.

Problém casto rešen v GIS, mapa predstavuje planární rozdelení roviny doregionu, bod q napr. polohu kurzoru.

V praktickém živote casto potrebujeme znát svoji polohu vzhledem k jinýmobjektum.

Rychlé nalezení hledaného mnohoúhelníku nezbytné, data sety mohou býttvoreny stovkami tisíc i miliony mnohoúhelníku.

Nutno navrhnout takové datové struktury a algoritmy, které umožní problémefektivne rešit pro konvexní i nekonvexní mnohoúhelníky.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 4 / 46

Page 5: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Techniky rešení problému

3. Techniky rešení problému

Techniky rešení:

Prevedení problému na vztah bodu a mnohoúhelníkuProblém preveden na úlohu opakovaného urcení polohy bodu vzhledem kmnohoúhelníku.

Planární delení rovinyRovina rozdelena na množinu pásu ci lichobežníku (trapezoids), vznikátrapezoidální mapa.Tato struktura umožnuje rychlé vyhledání mnohoúhelníku.

Druhá skupina algoritmu dosahuje výrazne vyšších výkonu, pro vyhledávánípoužívány speciální datové struktury (binární stromy).

Varianty rešení:

Nekonvexní mnohoúhelníky: nejcastejší varianta

Konvexní mnohoúhelníky: speciální prípad, napr. Voroného diagramy.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 5 / 46

Page 6: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku

4. Princip testu polohy bodu a mnohoúhelníku

Lokální procedura. Opakované urcenípolohy Q vzhledem k mnohoúhelníku.

Výsledek lokální procedury:

Bod q leží uvnitr testovanéhomnohoúhelníku.Bod q leží vne testovanéhomnohoúhelníku.

Bod q leží na hrane testovanéhomnohoúhelníku.

Globální procedura. Lokální proceduraopakovaná pro ∀ mnohoúhelník data setu.

Výsledek globální procedury:

0 mnohoúhelníku: q leží vne všechmnohoúhelníku

1 mnohoúhelník: q leží uvnitrkonkrétního mnohoúhelníku (neležína jeho hrane).

> 1 mnohoúhelník: q leží na hraneci v uzlu mnohoúhelníku sdílenousousedním mnohoúhelníkem.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 6 / 46

Page 7: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky

5. Rešení pro konvexní mnohoúhelníky

Lokální procedura realizována nejcasteji dvema zpusoby:

Test polohy bodu vuci každé hrane mnohoúhelníku (opakovaný HalfPlane test).Paprskovým algoritmem (Ray Crossing Algorithm).

Opakovaný half-plane test:

Bez predzpracování.

Na každou stranu mnohoúhelníku (pi , pi+1) a bod q aplikován HalfPlane test.

Výsledky všech testu stejné, q ∈ P.

Algoritmus 1: Test polohy q vzhledem k P (HalfPlane test).

1: Opakuj pro ∀ stranu (pi , pi+1):

2: Urci orientaci oi bodu q ke strane (pi , pi+1).

3: if q ∈ (pi , pi+1), bod q ∈ ∂P.

4: if oi 6= oi−1, bod q /∈ P.

5: Bod q ∈ P.

Nelze použít pro nekonvexní mnohoúhelníky.

Složitost O(N).Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 7 / 46

Page 8: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky

6. Paprskový algoritmus (Ray Crossing Algorithm)

Bodem q vedena poloprímka r (paprsek, tzv. Ray).

Pocet prusecíku k(r ,P)

k(r ,P) =

1, q ∈ P,

0 ∨ 2, q /∈ P.

Algoritmus invariantní vuci volbe r , casto volena y = yq .

Pozor na singulární prípady:

r prochází vrcholem pi ∈ P (protíná 2 segmenty).r kolineární se stranou/stranami P (nesprávný pocet prusecíku).

Lze zobecnit pro nekonvexní mnohoúhelníky.Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 8 / 46

Page 9: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

7. Rešení pro nekonvexní mnohoúhelníkyPoužívány dva algoritmy:

Paprskový (Ray Algorithm).

Metoda ovíjení (Winding Number Algorithm).

Winding Number Algorithm

Pozorovatel stojí v bode q.

Pokud q ∈ P a pozorovatel chce videt ∀pi ∈ P musí se otocit o úhel 2π.

Pokud q /∈ P, je tento úhel menší než 2π.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 9 / 46

Page 10: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

8. Výpocet Winding Number Ω

Suma Ω všech rotací ωi (merená CCW)

Ω(q,P) =1

n∑i=1

ω(pi , q, pi+1),

které musí pruvodic (q, pi ) opsat nad všemi body pi ∈ P .

Prímka p(pi , pi+1) delí σ na σl , σr (Left/Right Halfplane)

σl = σl − p, σr = σr − p.Úhly ω(pi , q, pi+1) orientované

ω(pi , q, pi+1) =

+ω(pi , q, pi+1), pi+1 vpravo od (q, pi ), resp. q∈ σl ,

−ω(pi , q, pi+1), pi+1 vlevo od (q, pi ), resp. q∈ σr .

Prípad 1: Úhel ω(pi , q, pi+1) má CW orientaci.

Prípad 2: Úhel ω(pi , q, pi+1) má CCW orientaci.

Winding Number

Ω(q,P) =

1, q ∈ P,

0, q /∈ P.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 10 / 46

Page 11: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

9. Winding number Ω

Hodnota Ω uvádena v poctech obehu, tj. v násobcích 2π.

Výsledek znaménkove závislý na smeru pohybu.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 11 / 46

Page 12: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

10. Winding Number Algorithm

Algoritmus 2: Winding Algorithm

1: Inicializuj Ω = 0, tolerance ε.2: Opakuj pro ∀ trojici (pi , q, pi+1):3: Urci polohu q vzhledem k p = (pi , pi+1).4: Urci úhel ωi = ∠pi,q, pi+1.5: If q ∈ σl , pak Ω = Ω + ωi . //Bod v leve polorovine6: else Ω = Ω − ωi . //Bod v prave polorovine7: if ||Ω| − 2π| < ε, pak q ∈ P //Test na odchylku od 2π8: else q /∈ P

Postacuje výpocet∑ω, 2π konstanta.

+ Lepší ošetrení singulárních prípadu než u paprskového algoritmu.

+ Pomalejší než paprskový algoritmus.

- Problematický prípad q ≡ pi .

- Nutnost predzpracování O(N).

Složitost O(N).Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 12 / 46

Page 13: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

11. Ray Crossing AlgorithmBodem q vedena poloprímka r (paprsek, tzv. ray)

r(q) : y = yq .

Invariance vuci smeru r .

Pocet prusecíku prímky r s oblastí P

k(r ,P)%2 =

1, q ∈ P,

0, q /∈ P.

+ O rád rychlejší než Winding Algorithm.

- Problémem singularity.

Page 14: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

12. Upravená varianta Ray Crossing algoritmuEliminace singularit: r(q) prochází vrcholem P nebo hranou.

Prímka definovaná r(q) delí σ na σu , σl

σu = σu − r(q), σl = σl − r(q).

Upravená varianta Ray Crossing Algorithm:

σu obsahuje body pi = [xi , yi ], kde yi > yq .

σl obsahuje body pi = [xi , yi ], kde yi < yq .

Inkrementace k(q,P):

jeden z bodu hrany nad r(q) (v σu ) a druhý z bodu na/pod r(q) (v σl ).

Kolineární segmenty nejsou zapocítávány.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 14 / 46

Page 15: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

13. Upravená varianta Ray Crossing algoritmu

r

pi-1

pi p

i-1

pi

pi-1

pi

pi-1

pi

pi-1

pi

pi-1

pi

a) b) c) d) e) f )

σu

σl

q

Prusecík M hrany (pi−1, pi ) a r(q) zapocítáváme, pokud:

1 Hrana v obou polorovinách nebo jen v horníBod pi nad paprskem, bod pi−1 na nebo pod paprskem: situace a), c).Bod pi−1 nad paprskem, pi na nebo pod paprskem: situace b), d).Kritérium (

yi > yq)∧ (yi−1 ≤ yq ) ∨

(yi−1 > yq

)∧ (yi ≤ yq ).

2 Hrana v obou polorovinách nebo jen v dolníBod pi pod paprskem, pi−1 na nebo nad paprskem: situace a), e).Bod pi−1 pod paprskem, pi na nebo nad paprskem: situace b), f).Kritérium (

yi < yq)∧ (yi−1 ≥ yq ) ∨

(yi−1 < yq

)∧ (yi ≥ yq ).

V praxi použijeme jednu z variant, nikoliv obe.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 15 / 46

Page 16: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

14. Varianta s redukcí ke q (1/2)

Lokální souradnicový systém (q, x ′, y ′).

Posunutí o hodnotu q.

Rovnice paprsku r(q) ≡ x ′

y ′ = 0.

Redukce bodu pi ke q

x ′i = xi − xq,

y ′i = yi − yq.

Hledáme prusecíky M paprsku r(q) a (pi−1, pi ) ležící v pravé polorovine (tj. vpravo od q)

σr = σr − x ′,

+ Snadnejší detekce hran (pi−1, pi ) protínajících r(q).

+ Jednodušší výpocet prusecíku M.

+ Vyšší numerická stabilita.

+ Nezávislost na orientaci P.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 16 / 46

Page 17: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

15. Varianta s redukcí ke q (2/2)Prímka p

p : y = kx + q,

prochází body pi−1, pi

yi−1 = kxi−1 + q ⇒ q = yi−1 − kxi−1,

y − yi−1 = k(x − xi−1),

kde

k =yi − yi−1

xi − xi−1.

Prejdeme do (q, x ′, y ′).

Prusecík M = [x ′m, y′m = 0] prímky p a paprsku r(q) (osa x ′)

x ′m =−(x ′i − x ′i−1)y ′i−1

yi − yi−1+ x ′i−1 =

x ′i y ′i−1 − x ′i−1y ′iy ′i − y ′i−1

.

Test existence prusecíku p a paprsku r(q)

(y ′i > 0) ∧ (y ′i−1 <= 0) ∨ (y ′i−1 > 0) ∧ (y ′i <= 0).

Zapocítány pouze prusecíky M v pravé polorovine vzhledem ke q

k(r ,P) =

k(r ,P) + 1, x ′m > 0,

k(r ,P), x ′m ≤ 0.

Postup reší prípadné singularity.

Page 18: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

16. Ilustrace varianty s redukcí ke q

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 18 / 46

Page 19: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

17. Implementace Ray Crossing s redukcí ke q

Algoritmus 3: Ray Crossing Algorithm (P = p1, ..., pn, q)

1. Inicializuj k = 0 //Pocet prueciku

2: Opakuj pro ∀ body pi ∈ P:

3: x ′i = xi − xq .

4: y ′i = yi − yq .

5: if (y ′i > 0)&&(y ′i−1 <= 0)||(y ′i−1 > 0)&&(y ′i <= 0). //Vhodny segment

6: x ′m = (x ′i y ′i−1 − x ′i−1y ′i )/(y ′i − y ′i−1). //Vhodny prusecik

7: if (x ′m > 0) pak k = k + 1.

8: if (k%2) 6= 0 pak q ∈ P

9: else q /∈ P

Výhodou snadná implementace.

Nevýhoda: Špatné prirazení bodu pi do oblasti P

|yi − c| ≤ ε,

tj. pi blízko paprsku r nebo strana príliš krátká.Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 19 / 46

Page 20: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

18. Použití u non-simple oblastíAlgoritmy lze použít i pro non-simple polygony: topologicky nekorektní.

Kombinace RA a WA: orientace segmentu vuci paprsku.

Redefinice ω(q, ei ), paprsek r(q)

ω(q, ei ) =

0, r ∧ ei = ∅,1, pi , q, pi+1 CCW z q

−1, pi , q, pi+1 CW z q.

,

Page 21: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky

19. Vnorené polygony

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 21 / 46

Page 22: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny

20. Metoda pásu (Slabs Method)

Algoritmus založen na rozdelení S do svislých ci vodorovných pásu (Slabs),castejší je vertikální varianta (Dobkin & Lipton, 1975).

Takto navržená geometrická struktura umožnuje rychlé vyhledávání,nemusíme prohledávat celou rovinu, pouze její podmnožinu.

Každým bodem vedena rovnobežka s osou y , dve sousední rovnobežkyvymezují jeden pás.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 22 / 46

Page 23: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny

21. Vlastnosti pásu

Každý pás prochází práve dvema body (krome prípadu, kdy dataset S obsahuje body se stejnou souradnicí x)Uvnitr pásu se nenachází žádný jiný pocátecní/koncový bodžádné z hran.Uvnitr pásu se žádné dva segmenty neprotínají.

Prunikem oblasti a pásu lichobežník (popr. zdegenerovaný na4).Každý lichobežník uvnitr pásu (s výjimkou okrajového) máhorního a dolního souseda.Okrajové polygony v pásu jsou neohranicené.Každý lichobežníku uvnitr pásu prísluší jiné oblasti.

Princip nalezení mnohoúhelníku príslušejícího q:1) Nalezení pásu, ve kterém leží q.2) Pro tento pás nalezen lichobežník, uvnitr kterého q leží.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 23 / 46

Page 24: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny

22. Popis algoritmu

Pro nalezení prusecíku pásu se stranami mnohoúhelníku používán Line Sweep Algorithm.

Hranice pásu predstavují souradnice x bodu pi .

Body umísteny do vhodné datové struktury, ve které jsou serazeny dle souradnice x (pole,strom, prioritní fronta).

Výber pásu dle souradnice x bodu q lze realizovat se složitostí O(log(n)).

Poté nalezení stran mnohoúhelníku, které protínají tento pás.

V datové strukture pásu uchovávány úsecky v poradí protínajícím tento pás (dle y souradnice).

Každá úsecka nese informaci o horním lichobežníku, jehož je stranou.

V pásu hledáme takovou úsecku, nad kterou tento bod q leží.

Krok lze realizovat se složitostí O(n).

Celková složitost O(n · log(n)).

Pamet’ová složitost O(n2), není vhodné pro velká data.

Jednotlivé polygony usporádány v topologické strukture, každá hrana obsahuje informaci olevém a pravém sousedovi.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 24 / 46

Page 25: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Line Sweep Algorithm

23. Line Sweep Algorithm

Line Sweep Algorithm (Nievergeld & Preprata, 1982) využíván pro výpocet prusecíku pásu sestranami mnohoúhelníku.

Založen na myšlence, že dlouhé hrany protínají takové pásy, které spolu sousedí.

Strany serazeny dle souradnice y pocátecního bodu.

Sweep Line L se pohybuje zleva doprava nad datasetem.

Seznam aktivních segmentu LV každém bode pi dochází k zastavení L a zpracování události predstavovanépridáním/odebráním incidujících stran do seznamu L serazených v nem dle y .

Tímto postupem je udržován aktuální seznam stran, u nichž má smysl pocítat jejich prusecíky s

L.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 25 / 46

Page 26: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Line Sweep Algorithm

24. Typy událostí

Tri typy událostí v závislosti na vztahu incidujících hran ei , ej k bodu p:

Hrana ei vlevo od L, hrana ej vpravo od L.Bod p konc. bod ei a poc. bod ej . Odeber ei z L, pridej ej do L.

Hrany ei , ej vpravo od L.Bod p poc. bod ei , ej . Pridej ei , ej do L.

Hrany ei , ej vlevo od L.Bod p konc. bod ei , ej . Odeber ei , ej z L.

L zpravidla implementován jako strom ci seznam, body uloženy v prioritní fronte.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 26 / 46

Page 27: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Line Sweep Algorithm

25. Implementace Line Sweep algoritmu

Prioritní fronta Q poc. a konc. bodu pi hran ej setrídená dle x .

Každý bod pi obsahuje pointer na hranu ej .

Seznam aktivních segmentu L setrídený dle y .

Algoritmus 4: Line Sweep Algorithm

1: Inicializuj Q všemi body p všech hran e.2: Inicializuj L = jako prázdnou množinu, pold

i = null .

3: Opakuj, dokud Q není prázdná:4: Odeber bod pi (L prochází pi ) a nalezni odpovídající ej .

5: if (pi 6= poldi ), opakuj k krát pro ∀ hranu ek v L

6: Spocti prusecík ek s L.7: if (pi = poc. bod hrany ej ) pridej ej do L .

8: else if (pi = konc. bod hrany ej ) odeber ej z L .

9: poldi 6= pi .

Seznam prusecíku z 6) je udržován pro každý pás setrídený dle y s informací o príslušejícímmnohoúhelníku, uchováván pointer na hranu ej , ze které vznikl.Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 27 / 46

Page 28: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

26. Metoda trapezoidálních map

Trapezoidální (lichobežníková) mapa T predstavuje vertikální dekompozici mnohoúhelníku namnožinu sousedících a neprotínajících se lichobežníku nebo jejich degenerovaných variant(trojúhelníku).

Každý lichobežník4 má jednu/dve vertikální strany a dve nevertikální strany tvorené cástmistran mnohoúhelníku.

Pro konstrukci vertikálních stran použity dvojice poloprímek vedených z každého bodu pi k

prusecíkum s nejbližší vyšší a nejbližší nižší stranou.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 28 / 46

Page 29: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

27. Trapezoidální mapa TZjednodušení pro dataset S:

• Na rozdíl od metody pásu není žádný lichobežník4 otevrený, kolem datasetu S vygenerován

opsaný obdélník se zadaným presahem (Mnimum Bounding Rectangle, MBR).

• V datasetu S neexistují dva body se stejnými souradnicemi.

Veta o poctu prvku trapeozoidální mapy T (S):

Každá trapezoidální mapa T (S) množiny S tvorené n liniemi je tvorena nejvíce 3n + 1 lichobežníky4 a6n + 4 vrcholy.

Pro každý lichobežník4 definovány dva typy segmentu:

• top(4): segment ohranicující lichobežník4 shora.

• bottom(4): segment ohranicující lichobežník4 zdola.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 29 / 46

Page 30: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

28. Typy lichobežníku4Pro každý lichobežník4 dále definovány dva typy bodu:

• leftp(4): bod ležící na levém vertikálním segmentu.

• rightp(4): bod ležící na pravém vertikálním segmentu.

Existuje 10 typu lichobežníku, uvedeno 5 variant (5 dalších zrcadlove symetrických dle y ):

• Levá vertikální strana4 zdegenerovaná v bod leftp(4), který je prusecíkem top(4): a bottom(4).

• Bod leftp(4) leží v levém horním rohu4, tj. na segmentu top(4).

• Bod leftp(4) leží v levém doním rohu4, tj. na segmentu bottom(4).

• Bod leftp(4) leží v levém vertikální hrane4.

• Levá vertikální hrana4 tvorena MBR.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 30 / 46

Page 31: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

29. Sousednost lichobežníkuDva lichobežníky ∆ a ∆′ jsou oznaceny jako sousedící, jestliže sdílejí vertikální hranu.

Pro sousedící lichobežníky platí:top(∆) = top(∆′) ∆′ je horní soused ∆

bottom(∆) = bottom(∆′) ∆′ je dolní soused ∆

Existují 4 varianty sousedství: levé horní, levé dolní, pravé horní a pravé dolní.

Sousedství pro 5 variant lichobežníku:

ad 1) Vlevo 0 sousedu, vpravo sdílejí vertikální hranu, 1 soused.

ad 2, 3) Sdílejí vertikální hranu vlevo i vpravo, vlevo i vpravo 1 soused.

ad 4) Sdílejí vertikální hranu vlevo i vpravo, vlevo dva sousedé., vpravo 1 soused.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 31 / 46

Page 32: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

30. Datová struktura

Dve datové struktury pro koncové body pi a strany ej :

Koncové body serazeny dle x .Strany serazeny dle y .

Na rozdíl od predchozího algoritmu není používán Line Sweep Algorithm.

Datová struktura T (S):Uchovává pointery na top(∆), bottom(∆), leftp(∆) and rightp(∆) a pointery na své(max 4) sousedy.

Binární vyhledávací strom DV prubehu konstrukce trapeozoidální mapy je budována speciální datová strukturapredstavovaná binárním vyhledávacím stromem D ⇒ inkrementální konstrukce.

Binární vyhledávací strom D obsahuje tri typy vrcholu:

Interní X uzly: Leží bod q vlevo/vpravo od zadaného bodu pi .Interní Y uzly: Leží bod q nahore/dole od zadaného strany ej .Listy: obsahují jednotlivé lichobežníky ∆.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 32 / 46

Page 33: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

31. Inkrementální konstrukce DBinární strom D je konstruován prubežne pridáváním stran e datasetu S.

Každý update stromu D je predstavován následujícími kroky.

Oznacme e = (p1, p2) stranu, která má být pridávána do T .

Algoritmus 5: Update Binary Tree D.

1: Pridání bodu p1, p2:2: Nalezení lichobežníku ∆ v D který bod p1 obsahuje.3: Rozdelení lichobežníku ∆ v D prímkou ‖ x procházející x1.

4: Vytvorení 2 nových X uzlu, které jsou potomky4.5: Opakuj 2-4) pro bod p2.6: Pridání strany e :

7: Nalezení lichobežníku ∆ protnutých e a jejich rozdelení e.8: Spojení lichobežníku ∆ podle e, jejichž horní a dolní hranicnísegmenty jsou identické a neobsahují žádný bod pi .

9: Vytvorení nových Y uzlu pro rozdelené ∆.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 33 / 46

Page 34: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

32. Príklad tvorby D

Postup pridání e1 = (p1, p2) do D:

Pridání bodu p1.Vytvorení uzlu X(p1) a dvou lichobežníku A,B odelených x = x1.

Pridání bodu p2.Vytvorení uzlu X(p2) a dvou lichobežníku C,D odelených x = x2.

Pridání hrany e1.Nalezení protnutého lichobežníku C.Vytvorení uzlu Y (e1) a dvou lichobežníku E , F oddelených e1.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 34 / 46

Page 35: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

33. Ilustrace pridání e1 do D

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 35 / 46

Page 36: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

34. Pridání e2 do DPostup pridání e2 = (p3, p4) do D:

Pridání bodu p3.Bod p3 totožný s bodem p1, žádná akce.

Pridání bodu p4.Vytvorení uzlu X(p4) a dvou lichobežníku G,H odelených x = x4.

Pridání hrany e2.Nalezení protnutých lichobežníku G,H.Vytvorení dvou uzlu Y (e2) a ctyr lichobežníku I, J a K , L oddelených e2.

Spojení lichobežníku podél e2.Spojení lichobežníku J, L sdílejících stejnou vertikální hranu v novýlichobežník M.Odstranení pravejšíhoho z uzlu (J, L) a presmerování odkazu na novýlichobežník M.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 36 / 46

Page 37: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

35. Ilustrace pridání e2 do D

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 37 / 46

Page 38: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

36. Ilustrace pridání e2 do D

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 38 / 46

Page 39: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

37. Pridání e3 do DPostup pridání e3 = (p5, p6) do D:

Pridání bodu p5.Vytvorení uzlu X(p5) a dvou lichobežníku N,O odelených x = x5.

Pridání bodu p6.Vytvorení uzlu X(p6) a dvou lichobežníku P,Q odelených x = x6.

Pridání hrany e3.Nalezení protnutých lichobežníku O,K ,P.Vytvorení trí uzlu Y (e3) a šesti lichobežníku R,S a T ,U a V ,Woddelených e3.

Spojení lichobežníku podél e2.Spojení lichobežníku S,U a T ,V sdílejících stejnou vertikální hranu vnové lichobežníy X ,Y .Odstranení pravejšíhoho z uzlu (S,U) a (T ,V ) presmerování odkazu nanové lichobežníky X ,Y .

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 39 / 46

Page 40: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

38. Ilustrace pridání e3 do D

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 40 / 46

Page 41: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

39. Ilustrace pridání e3 do D

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 41 / 46

Page 42: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

40. Postup nalezení bodu q v DPri hledání polohy bodu q = [xq, yq] v D vzhledem k lichobežníku ∆ postupujemetakto:

Prohledáváme stromovou strukturu od korene.

V každém X uzlu porovnáváme xq a xp. Pokud

xq

< xp, prejdeme do Lpodstromu.

> xp,, prejdeme do Ppodstromu.

V každém Y uzlu porovnáváme polohu yq a strany e. Pokud

yq

pod e, prejdeme do Lpodstromu.

nad e, Prejdeme do Ppodstromu.

Opakujeme, dokud aktuální uzel není list (obsahuje hledaný lichobežník ∆).

Složitost konstrukce O(n · log(n)).

Vyhledávání O(log(n))

Pamet’ové nároky pouze O(N).

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 42 / 46

Page 43: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

41. Ilustrace nalezení ∆ pro zadané q

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 43 / 46

Page 44: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

42. Nalezení ∆ protnutých e

Rychlé nalezení lichobežníku ∆ protnutých e je duležitým krokem algoritmu.

Necht’ ∆1,∆2,∆3,∆4,∆5 predstavují lichobežníky v T protnuté e serazené tak, že∆j+1 je pravým sousedem ∆j .

Pokud

rightp(4j )

nad e, ∆j+1 je pravý dolní soused∆j

pod e ∆j+1 je pravý horní soused∆j

Tato vlastnost je využita pri vyhledávacím algoritmu, který vrací4 s informací, zda sejedná o horního ci dolního souseda.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 44 / 46

Page 45: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

43. Algoritmus tvorby T (S).

Konstrukce probíhá inkrementální technikou.

V každém kroku pridáme nový segment ei .

Následne provedeme update struktur T a D.

Algoritmus 6: Trapeozoidalní mapa T (S).

1: Konstrukce MBR nad datasetem S2: Inicializace T ,D.3: Opakuj pro i = 1, n:4: Nalezení lichobežníku ∆1,∆2,∆3, ...,∆k protnuté ei .5: Odstranení ∆1,∆2,∆3, ...,∆k z T a6: Nahrazení ∆1,∆2,∆3, ...,∆k novými ∆ vzniklými protnutím e.7: Odstranení lichobežníku ∆1,∆2,∆3, ...,∆k (tj. listu) z D8 : Vytvorení nových listu ∆ vzniklých protnutím ∆1,∆2,∆3, ...,∆k linií e.

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 45 / 46

Page 46: Geometrické vyhledání.bayertom/images/courses/Adk/adk3.pdf · 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Metody

Metody založené na planárním delení roviny Trapezoidální mapy

44. Algoritmus nalezení ∆ protnutých e

Algoritmus zacíná nalezením ∆ v D obsahujícího p1.

Hledání potenciálních ∆ probíhá tak dlouho, dokud p2 leží vpravo odrightp(∆j).

Algoritmus 7: Nalezení protnutých ∆ (T ,D, ei ).

1: Oznac p1, p2 koncové body e.2: Pro p1 nalezni v D odpovídající ∆1

3: j = 1.3: Opakuj pro p2 ležící vpravo od rightp(∆j ):

4: Opakuj:5: if rightp(∆j ) leží nad ei , pak4j+1 je pravý dolní soused4j+1

6: jinak4j+1je pravý horní soused4j+1

7: j=j+1

8: Vrat’ ∆1,∆2,...,∆j

Tomáš Bayer | [email protected] (Katedra aplikované geoinformatiky a kartografie. Prírodovedecká fakulta UK.)Geometrické vyhledání. 46 / 46