Geometrické vyhledání.

Podobné dokumenty
Geometrické vyhledávání

Konvexní obálka množiny bodů.

ÚLOHY S POLYGONEM. Polygon řetězec úseček, poslední bod je totožný s prvním. 6 bodů: X1, Y1 až X6,Y6 Y1=X6, Y1=Y6 STANOVENÍ PLOCHY JEDNOHO POLYGONU

Dynamické datové struktury III.

Voronoiův diagram. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta

Triangulace. Význam triangulace. trojúhelník je základní grafický element aproximace ploch předzpracování pro jiné algoritmy. příklad triangulace

Vzorce počítačové grafiky

Úvod do výpočetní geometrie. Základní vztahy.

Topologická kostra. Medial Axis. Straight Skeleton.

Dvěma různými body prochází právě jedna přímka.

Dynamické datové struktury IV.

Konvexní obálka množiny bodů.

Algoritmizace prostorových úloh

Výpočetní geometrie Computational Geometry

Konvexní obal a množina

Úvod do mobilní robotiky AIL028

P L A N I M E T R I E

5. P L A N I M E T R I E

Operace s uzavřenými oblastmi v GIS

PROGRAMY PRO GIS. Formovat/formulovat problém pro aplikaci v počítači. Fungování GIS programů na základní úrovni - "uvažovat" jako počítač

Triangulace. RNDr. Petra Surynková, Ph.D. Univerzita Karlova v Praze Matematicko-fyzikální fakulta.

INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA

Algoritmy pro ořezávání 2D polygonů

Algoritmy používané ve výpočetní geometrii

2. Vyšetřete všechny možné případy vzájemné polohy tří různých přímek ležících v jedné rovině.

Algoritmy výpočetní geometrie

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

17 Kuželosečky a přímky

( ) ( ) 6. Algebraické nerovnice s jednou neznámou ( ) ( ) ( ) ( 2. e) = ( )

Další polohové úlohy

Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování

Syntetická geometrie I

Urci parametricke vyjadreni primky zadane body A[2;1] B[3;3] Urci, zda bod P [-3;5] lezi na primce AB, kde A[1;1] B[5;-3]

Přijímací zkouška na MFF UK v Praze

Elementární plochy-základní pojmy

3.1.2 Polorovina, úhel

bfs, dfs, fronta, zásobník, prioritní fronta, halda

11. VEKTOROVÁ ALGEBRA A ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ

(4x) 5 + 7y = 14, (2y) 5 (3x) 7 = 74,

ZÁKLADNÍ PLANIMETRICKÉ POJMY

Cyklografie. Cyklický průmět bodu

Omezíme se jen na lomené čáry, jejichž nesousední strany nemají společný bod. Jestliže A 0 = A n (pro n 2), nazývá se lomená čára uzavřená.

Rozvinutelné plochy. tvoří jednoparametrickou soustavu rovin a tedy obaluje rozvinutelnou plochu Φ. Necht jsou

Mgr. Markéta Trnečková, Ph.D. Palacký University, Olomouc

Určete a graficky znázorněte definiční obor funkce

Je-li dána hranolová nebo jehlanová plocha s podstavou v rovině σ a rovina řezu ρ:

AB = 3 CB B A = 3 (B C) C = 1 (4B A) C = 4; k ]

Matematika 1 MA1. 1 Analytická geometrie v prostoru - základní pojmy. 4 Vzdálenosti. 12. přednáška ( ) Matematika 1 1 / 32

GIS Geografické informační systémy

Stromové struktury v relační databázi

VE 2D A 3D. Radek Výrut. Abstrakt Tento článek obsahuje postupy pro výpočet Minkowského sumy dvou množin v rovině a pro výpočet Minkowského sumy

Dynamické datové struktury I.

GIS Geografické informační systémy

FAKULTA STAVEBNÍ VUT V BRNĚ PŘIJÍMACÍ ŘÍZENÍ PRO AKADEMICKÝ ROK

ZÁKLADNÍ ZOBRAZOVACÍ METODY

Úvod do mobilní robotiky AIL028

Grafy. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 13.

Úlohy klauzurní části školního kola kategorie B

CVIČNÝ TEST 13. OBSAH I. Cvičný test 2. Mgr. Zdeňka Strnadová. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

Stromy, haldy, prioritní fronty

Definice globální minimum (absolutní minimum) v bodě A D f, jestliže X D f

4. Statika základní pojmy a základy rovnováhy sil

CVIČNÝ TEST 15. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

ICT podporuje moderní způsoby výuky CZ.1.07/1.5.00/ Matematika planimetrie. Mgr. Tomáš Novotný

Bakalářská matematika I

Vzdálenost uzlů v neorientovaném grafu

CVIČNÝ TEST 40. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 13 IV. Záznamový list 15

i=1 Přímka a úsečka. Body, které leží na přímce procházející body a a b můžeme zapsat pomocí parametrické rovnice

GIS Geografické informační systémy

Základní geometrické útvary

Algoritmy a datové struktury

bfs, dfs, fronta, zásobník, prioritní fronta, halda

Matematická analýza III.

Kružnice, úhly příslušné k oblouku kružnice

SHODNÁ A PODOBNÁ ZOBRAZENÍ V ROVINĚ

Matematická analýza III.

Řezy těles rovinou III

Konvexní útvary. Kapitola 4. Opěrné roviny konvexního útvaru v prostoru

Základní datové struktury III: Stromy, haldy

Analytická geometrie lineárních útvarů

Shodná zobrazení v rovině

Kapitola 5. Seznámíme se ze základními vlastnostmi elipsy, hyperboly a paraboly, které

ROTAČNÍ PLOCHY. 1) Základní pojmy

Datové struktury pro prostorové vyhledávání

TGH05 - aplikace DFS, průchod do šířky

PLANIMETRIE 2 mnohoúhelníky, kružnice a kruh

Matematika I, část I Vzájemná poloha lineárních útvarů v E 3

Výpočetní geometrie. Pavel Strachota. 9. listopadu FJFI ČVUT v Praze

Úlohy domácí části I. kola kategorie C

X = A + tu. Obr x = a 1 + tu 1 y = a 2 + tu 2, t R, y = kx + q, k, q R (6.1)

Shodná zobrazení. bodu B ležet na na zobrazené množině b. Proto otočíme kružnici b kolem

Gymnázium Jiřího Ortena, Kutná Hora. Průřezová témata Poznámky. Téma Školní výstupy Učivo (pojmy) volné rovnoběžné promítání průmětna

PLANIMETRIE úvodní pojmy

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

LDF MENDELU. Simona Fišnarová (MENDELU) Základy lineárního programování VMAT, IMT 1 / 25

autorovu srdci... Petr Hliněný, FI MU Brno 1 FI: MA010: Průnikové grafy

RELIÉF. Reliéf bodu. Pro bod ležící na s splynou přímky H A 2 a SA a reliéf není tímto určen.

Mgr. Tomáš Kotler. I. Cvičný test 2 II. Autorské řešení 6 III. Klíč 15 IV. Záznamový list 17

CVIČNÝ TEST 43. OBSAH I. Cvičný test 2. Mgr. Tomáš Kotler. II. Autorské řešení 6 III. Klíč 13 IV. Záznamový list 15

- shodnost trojúhelníků. Věta SSS: Věta SUS: Věta USU:

Transkript:

Geometrické vyhledání. Ray algoritmus. Winding algoritmus. Lichoběžníkové (trapezoidální) mapy Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie. Přírodovědecká fakulta UK. 1 / 44

Obsah přednášky 1 Úvod do problému 2 Techniky řešení problému 3 Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky Nekonvexní mnohoúhelníky 4 Line Sweep Algorithm Trapezoidální mapy 2 / 44

Úvod do problému 1. Ve kterém mnohoúhelníku leží kurzor? Data set tvoří 6000 mnohoúhelníků a cca 1 milión bodů. 3 / 44

2. Formulace problému Úvod do problému Dáno: Hledáme: V rovině dána množina n bodů {p i } tvořících vrcholy m mnohoúhelníků {P j } a bod q. Mnohoúhelník P obsahující bod q tzv. Point Location Problem. Problém často řešen v GIS, mapa představuje planární rozdělení roviny do regionů, bod q např. polohu kurzoru. V praktickém životě často potřebujeme znát svoji polohu vzhledem k jiným objektům. Rychlé nalezení hledaného mnohoúhelníku nezbytné, data sety mohou být tvořeny stovkami tisíc i miliony mnohoúhelníků. Nutno navrhnout takové datové struktury a algoritmy, které umožní problém efektivně řešit pro konvexní i nekonvexní mnohoúhelníky. 4 / 44

Techniky řešení problému 3. Techniky řešení problému Techniky řešení: Převedení problému na vztah bodu a mnohoúhelníku Problém převeden na úlohu opakovaného určení polohy bodu vzhledem k mnohoúhelníku. Planární dělení roviny Rovina rozdělena na množinu pásů či lichoběžníků (trapezoids), vzniká trapezoidální mapa. Tato struktura umožňuje rychlé vyhledání mnohoúhelníku. Druhá skupina algoritmů dosahuje výrazně vyšších výkonů, pro vyhledávání používány speciální datové struktury (binární stromy). Varianty řešení: Nekonvexní mnohoúhelníky: nejčastější varianta Konvexní mnohoúhelníky: speciální případ, např. Voroného diagramy. 5 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku 4. Princip testu polohy bodu a mnohoúhelníku Lokální procedura. Opakované určení polohy Q vzhledem k mnohoúhelníku. Výsledek lokální procedury: Bod q leží uvnitř testovaného mnohoúhelníku. Bod q leží vně testovaného mnohoúhelníku. Bod q leží na hraně testovaného mnohoúhelníku. 1 mnohoúhelník: q leží uvnitř konkrétního mnohoúhelníku (neleží na jeho hraně). > 1 mnohoúhelník: q leží na hraně či v uzlu mnohoúhelníku sdílenou sousedním mnohoúhelníkem. Globální procedura. Lokální procedura opakovaná pro mnohoúhelník data setu. Výsledek globální procedury: 0 mnohoúhelníků: q leží vně všech mnohoúhelníků 6 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky 5. Řešení pro konvexní mnohoúhelníky Lokální procedura realizována nejčastěji dvěma způsoby: Test polohy bodu vůči každé hraně mnohoúhelníku (opakovaný HalfPlane test). Paprskovým algoritmem (Ray Crossing Algorithm). Test polohy vůči hranám mnohoúhelníku: Bez předzpracování. Na každou stranu mnohoúhelníku p i, p i+1 a bod q aplikován HalfPlane test. Algoritmus 1: Test polohy q vzhledem k P (HalfPlane test). 1: Opakuj pro stranu p i, p i+1 : 2: Urči orientaci o i bodu q ke straně p i, p i+1. 3: if (q p i, p i+1 ), bod q leží ve straně P. 4: if (o i o i 1 ), bod q / P. 5: Bod q P. Nelze použít pro nekonvexní mnohoúhelníky. Složitost O(N). 7 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Konvexní mnohoúhelníky 6. Paprskový algoritmus (Ray Crossing Algorithm) Princip algoritmu: bodem q vedena přímka r (paprsek, tzv. Ray). Pokud počet průsečíků k přímky r s hranami P je sudý (pro konvexní útvary k = 2), bod q / P. Pro k liché (pro konvexní útvary k = 0) q P. Algoritmus invariantní vůči volbě r, r často volena jako y = c. Pozor na singulární případy: Přímka r prochází vrcholem P (protíná 2 segmenty). Přímka r kolineární se stranou/stranami P (nesprávný počet průsečíků). Lze zobecnit pro nekonvexní mnohoúhelníky. 8 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 7. Řešení pro nekonvexní mnohoúhelníky Používány dva algoritmy: Paprskový algoritmus (Ray Algorithm). Metoda ovíjení (Winding Algorithm). Winding Algorithm Pozorovatel stojí v bodě q. Pokud q P a pozorovatel chce vidět všechny lomové body P musí se otočit o úhel 2π. Pokud q / P je tento úhel menší než 2π. 9 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 8. Výpočet Winding Number Ω Winding Number Ω Suma všech rotací ω i měřená proti směru hodinových ručiček, které musí průvodič (q, p i) opsat nad všemi body p i P. Ω = 1 2π Úhly ω i jsou orientované (tj. se znaménkem). n i=1 Pokud je úhel p i,q, p i+1 orientován ve směru hodinových ručiček, pak ω i > 0 (test, zda p i+1 vpravo od q, p i) Pokud je úhel p i,q, p i+1 orientován proti směru hodinových ručiček, pak ω i < 0 (test, zda p i+1 vlevo od q, p i) ω i Pak Ω { = 1 q P. = 0 q / P 10 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 9. Winding number Ω Hodnota Ω uváděna v počtech oběhů, tj. v násobcích 2π. Výsledek znaménkově závislý na směru pohybu. 11 / 44

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 p i, q, p i+1 : 3: Urči orientaci o i bodu q ke straně p i, p i+1. 4: Urči úhel ω i = p i, q, p i+1. 5: if q vlevo od p i, p i+1, pak ω = ω + ω i. 6: else ω = ω ω i. 7: if ( ω 2π < ε), pak q P 8: else q / P Postačuje výpočet ω, netřeba určovat Ω. O řád pomalejší než paprskový algoritmus. Lepší ošetření singulárních případů než u paprskového algoritmu, problematický pouze případ q p i, nutnost předzpracování O(N). Složitost O(N). 12 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 11. Ray Crossing Algorithm Bodem q veden paprsek r (paprsek, tzv. ray). r : y = y q. Necht k představuje počet průsečíků přímky r s hranami P. Pak k { liché q P. sudé q / P Algoritmus je rychlý, cca o řád rychlejší než Winding Algorithm. Problémem jsou singularity. 13 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 12. Upravená varianta Ray Crossing algoritmu Cílem eliminace singularit, kdy r prochází vrcholem P nebo kolineární hranou. Tyto případy nelze ignorovat, v geoinformatice se s nimi setkáme často, např. u budov. Upravená varianta Ray Crossing Algorithm: Paprsek r rozdělí mnohoúhelník P na podoblasti P 1 a P 2. Oblast P 1 obsahuje body p i, pro které platí y i > y q. Oblast P 2 obsahuje body p i, pro které platí y i < y q. Počet průsečíků inkrementován pouze v případě, leží -li jeden z bodů hrany nad r (tj. v oblasti P 1) a druhý z bodů na nebo pod r (tj. v oblasti P 2 nebo na r). Kolineární segmenty nejsou započítávány. 14 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 13. Upravená varianta Ray Crossing algoritmu Průsečík e = (p i 1, p i ) a q existuje, pokud: 1 Polorovina nad paprskem: y > y q Bod p i nad paprskem a bodp i 1 na nebo pod paprskem. Bod p i 1 nad paprskem a bod p i na nebo pod paprskem. (y i > y q ) (y i 1 y q ) (y i 1 > y q ) (y i y q ). 2 Polorovina pod paprskem: y < y q Bod p i pod paprskem a bodp i 1 na nebo nad paprskem. Bod p i 1 pod paprskem a bod p i na nebo nad paprskem. (y i < y q ) (y i 1 y q ) (y i 1 < y q ) (y i y q ). V praxi kontrolujeme pouze 1 polorovinu, a to nad paprskem. Řešíme pouze případ 1 (1. zjednodušení). 15 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 14. Varianta s redukcí ke q (1/2) Provádíme redukci souřadnic bodů p i k bodu q, Lokální souřadnicový systém (q, x, y ). Hledáme pouze průsečíky ležící v polorovině x > 0, tj. ležící vpravo od q. Výhody: snadnější detekce hran protínajících paprsek, jednodušší výpočet průsečíku hrany e s osou x. Princip: Redukované souřadnice x i, y i jednotlivých bodů x i = x i x q, y i = y i y q. Rovnice paprsku v redukovaném souřadnicovém systému y = 0. 16 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 15. Varianta s redukcí ke q (2/2) Rovnice přímky procházející body p i 1, p i, e = (p i 1, p i) y y i 1 = k(x x i 1) = Průsečík hrany e a osy x je M[x m, y m], kde x m > 0, y m = 0. Dosadíme x = x m, y = y m = 0 yi yi 1 x i x i 1 (x x i 1). x m = (x i x i 1)y i 1 + x i 1, y i y i 1 x m = x i y i 1 x i 1y i. y i y i 1 Test existence průsečíku hrany e a paprsku r: (y i > 0) (y i 1 <= 0) (y i 1 > 0) (y i <= 0). Průsečíky počítány pouze v pravé polorovině (2. zjednodušení) pokud Postup řeší případné singularity. x m > 0. 17 / 44

Metoda opakovaného test polohy bodu a mnohoúhelníku Nekonvexní mnohoúhelníky 16. Ilustrace varianty s redukcí ke q 18 / 44

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 = {p 1,..., p n}, q) 1. Inicializuj inters = 0, 2: Opakuj pro body p i P: 3: x i = x i x q. 4: y i = y i y q. 5: if (y i > 0)&&(y i 1 <= 0) (y i 1 > 0)&&(y i <= 0). 6: x m = (x i y i 1 x i 1 y i )/(y i y i 1 ). 7: if (x m > 0) pak inters = inters + 1. 8: if (inters%2) 0 pak q P 9: else q / P Algoritmus často používán, výhodou snadná implementace. Nevýhoda RayCrossing algoritmu: Špatné zařazení bodu p i do oblasti P 1 resp P 2 v případě, že p i leží velmi blízko od paprsku, tj. y i c ε. 19 / 44

18. Metoda pásů (Slabs Method) Algoritmus založen na rozdělení data setu S do svislých či rovnoběžných pásů (Slabs), častější je vertikální varianta (Dobkin & Lipton, 1975). Takto navržená geometrická struktura umožňuje rychlé vyhledávání, nemusíme prohledávat celou rovinu, pouze její podmnožinu. Každým bodem vedena rovnoběžka s osou y, dvě sousední rovnoběžky vymezují jeden pás. 20 / 44

19. Vlastnosti pásu Každý pás prochází právě dvěma body (kromě případů, kdy data set S obsahuje body se stejnou souřadnicí x) Uvnitř pásu se nenachází žádný jiný počáteční/koncový bod žádné z hran. Uvnitř pásu se žádné dva segmenty neprotínají. Průnikem oblasti a pásu lichoběžník (popř. zdegenerovaný na ). Každý lichoběžník uvnitř pásu (s výjimkou okrajového) má horního a dolního souseda. Okrajové polygony v pásu jsou neohraničené. Každý lichoběžníků uvnitř pásu přísluší jiné oblasti. Princip nalezení mnohoúhelníku příslušejícího q: 1) Nalezení pásu, ve kterém leží q. 2) Pro tento pás nalezen lichoběžník, uvnitř kterého q leží. 21 / 44

20. Popis algoritmu Pro nalezení průsečíků pásu se stranami mnohoúhelníků používán Line Sweep Algorithm. Hranice pásů představují souřadnice x bodů p i. Body umístěny do vhodné datové struktury, ve které jsou seřazeny dle souřadnice x (pole, strom, prioritní fronta). Výběr pásu dle souřadnice x bodu q lze realizovat se složitostí O(log(n)). Poté nalezení stran mnohoúhelníků, které protínají tento pás. V datové struktuře pásu uchovávány úsečky v pořadí protínajícím tento pás (dle y souřadnice). Každá úsečka nese informaci o horním lichoběžníku, jehož je stranou. V pásu hledáme takovou úsečku, nad kterou tento bod q leží. Krok lze realizovat se složitostí O(n). Celková složitost O(n log(n)). Pamět ová složitost O(n 2 ), není vhodné pro velká data. Jednotlivé polygony uspořádány v topologické struktuře, každá hrana obsahuje informaci o levém a pravém sousedovi. 22 / 44

Line Sweep Algorithm 21. Line Sweep Algorithm Line Sweep Algorithm (Nievergeld & Preprata, 1982) využíván pro výpočet průsečíků pásu se stranami mnohoúhelníku. Založen na myšlence, že dlouhé hrany protínají takové pásy, které spolu sousedí. Strany seřazeny dle souřadnice y počátečního bodu. Sweep Line L se pohybuje zleva doprava nad datasetem. Seznam aktivních segmentů L V každém bodě p i dochází k zastavení L a zpracování události představované přidáním/odebráním incidujících stran do seznamu L seřazených v něm dle y. Tímto postupem je udržován aktuální seznam stran, u nichž má smysl počítat jejich průsečíky s L. 23 / 44

Line Sweep Algorithm 22. Typy událostí Tři typy událostí v závislosti na vztahu incidujících hran e i, e j k bodu p: Hrana e i vlevo od L, hrana e j vpravo od L. Bod p konc. bod e i a poč. bod e j. Odeber e i z L, přidej e j do L. Hrany e i, e j vpravo od L. Bod p poč. bod e i, e j. Přidej e i, e j do L. Hrany e i, e j vlevo od L. Bod p konc. bod e i, e j. Odeber e i, e j z L. L zpravidla implementován jako strom či seznam, body uloženy v prioritní frontě. 24 / 44

Line Sweep Algorithm 23. Implementace Line Sweep algoritmu Prioritní fronta Q poč. a konc. bodů p i hran e j setříděná dle x. Každý bod p i obsahuje pointer na hranu e j. Seznam aktivních segmentů L setříděný 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, p old i = null. 3: Opakuj, dokud Q není prázdná: 4: Odeber bod p i (L prochází p i) a nalezni odpovídající e j. 5: if (p i p old i ), opakuj k krát pro hranu e k v L 6: Spočti průsečík e k s L. 7: if (p i = poč. bod hrany e j) přidej e j do L. 8: else if (p i = konc. bod hrany e j) odeber e j z L. 9: p old i p i. Seznam průsečíků z 6) je udržován pro každý pás setříděný dle y s informací o příslušejícím mnohoúhelníku, uchováván pointer na hranu e j, ze které vznikl. 25 / 44

Trapezoidální mapy 24. Metoda trapezoidálních map Trapezoidální (lichoběžníková) mapa T představuje vertikální dekompozici mnohoúhelníků na množinu sousedících a neprotínajících se lichoběžníků nebo jejich degenerovaných variant (trojúhelníků). Každý lichoběžník má jednu/dvě vertikální strany a dvě nevertikální strany tvořené částmi stran mnohoúhelníku. Pro konstrukci vertikálních stran použity dvojice polopřímek vedených z každého bodu p i k průsečíkům s nejbližší vyšší a nejbližší nižší stranou. 26 / 44

Trapezoidální mapy 25. Trapezoidální mapa T Zjednodušení pro dataset S: Na rozdíl od metody pásů není žádný lichoběžník otevřený, kolem datasetu S vygenerován opsaný obdélník se zadaným přesahem (Mnimum Bounding Rectangle, MBR). V datasetu S neexistují dva body se stejnými souřadnicemi. Věta o počtu prvků trapeozoidální mapy T (S): Každá trapezoidální mapa T (S) množiny S tvořené n liniemi je tvořena nejvíce 3n + 1 lichoběžníky a 6n + 4 vrcholy. Pro každý lichoběžník definovány dva typy segmentů: top( ): segment ohraničující lichoběžník shora. bottom( ): segment ohraničující lichoběžník zdola. 27 / 44

Trapezoidální mapy 26. Typy lichoběžníku Pro každý lichoběžník dále definovány dva typy bodů: leftp( ): bod ležící na levém vertikálním segmentu. rightp( ): bod ležící na pravém vertikálním segmentu. Existuje 10 typů lichoběžníků, uvedeno 5 variant (5 dalších zrcadlově symetrických dle y): Levá vertikální strana zdegenerovaná v bod leftp( ), který je průsečíkem top( ): a bottom( ). Bod leftp( ) leží v levém horním rohu, tj. na segmentu top( ). Bod leftp( ) leží v levém doním rohu, tj. na segmentu bottom( ). Bod leftp( ) leží v levém vertikální hraně. Levá vertikální hrana tvořena MBR. 28 / 44

Trapezoidální mapy 27. Sousednost lichoběžníků Dva lichoběžníky a jsou označeny jako sousedící, jestliže sdílejí vertikální hranu. Pro sousedící lichoběžníky platí: { top( ) = top( ) bottom( ) = bottom( ) je horní soused je dolní soused Existují 4 varianty sousedství: levé horní, levé dolní, pravé horní a pravé dolní. Sousedství pro 5 variant lichoběžníků: ad 1) Vlevo 0 sousedů, 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. 29 / 44

Trapezoidální mapy 28. Datová struktura Dvě datové struktury pro koncové body p i a strany e j : Koncové body seřazeny dle x. Strany seřazeny dle y. Na rozdíl od předchozí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 D V průběhu konstrukce trapeozoidální mapy je budována speciální datová struktura představovaná binárním vyhledávacím stromem D inkrementální konstrukce. Binární vyhledávací strom D obsahuje tři typy vrcholů: Interní X uzly: Leží bod q vlevo/vpravo od zadaného bodu p i. Interní Y uzly: Leží bod q nahoře/dole od zadaného strany e j. Listy: obsahují jednotlivé lichoběžníky. 30 / 44

Trapezoidální mapy 29. Inkrementální konstrukce D Binární strom D je konstruován průběžně přidáváním stran e datasetu S. Každý update stromu D je představován následujícími kroky. Označme e = (p 1, p 2) stranu, která má být přidávána do T. Algoritmus 5: Update Binary Tree D. 1: Přidání bodů p 1, p 2: 2: Nalezení lichoběžníku v D který bod p 1 obsahuje. 3: Rozdělení lichoběžníku v D přímkou x procházející x 1. 4: Vytvoření 2 nových X uzlů, které jsou potomky. 5: Opakuj 2-4) pro bod p 2. 6: Přidání strany e : 7: Nalezení lichoběžníků protnutých e a jejich rozdělení e. 8: Spojení lichoběžníků podle e, jejichž horní a dolní hraniční segmenty jsou identické a neobsahují žádný bod p i. 9: Vytvoření nových Y uzlů pro rozdělené. 31 / 44

Trapezoidální mapy 30. Příklad tvorby D Postup přidání e 1 = (p 1, p 2 ) do D: Přidání bodu p 1. Vytvoření uzlu X(p 1 ) a dvou lichoběžníků A, B odělených x = x 1. Přidání bodu p 2. Vytvoření uzlu X(p 2 ) a dvou lichoběžníků C, D odělených x = x 2. Přidání hrany e 1. Nalezení protnutého lichoběžníku C. Vytvoření uzlu Y (e 1 ) a dvou lichoběžníků E, F oddělených e 1. 32 / 44

Trapezoidální mapy 31. Ilustrace přidání e 1 do D 33 / 44

Trapezoidální mapy 32. Přidání e 2 do D Postup přidání e 2 = (p 3, p 4 ) do D: Přidání bodu p 3. Bod p 3 totožný s bodem p 1, žádná akce. Přidání bodu p 4. Vytvoření uzlu X(p 4 ) a dvou lichoběžníků G, H odělených x = x 4. Přidání hrany e 2. Nalezení protnutých lichoběžníků G, H. Vytvoření dvou uzlů Y (e 2 ) a čtyř lichoběžníků I, J a K, L oddělených e 2. Spojení lichoběžníků podél e 2. Spojení lichoběžníků J, L sdílejících stejnou vertikální hranu v nový lichoběžník M. Odstranění pravějšíhoho z uzlů (J, L) a přesměrování odkazu na nový lichoběžník M. 34 / 44

Trapezoidální mapy 33. Ilustrace přidání e 2 do D 35 / 44

Trapezoidální mapy 34. Ilustrace přidání e 2 do D 36 / 44

Trapezoidální mapy 35. Přidání e 3 do D Postup přidání e 3 = (p 5, p 6 ) do D: Přidání bodu p 5. Vytvoření uzlu X(p 5 ) a dvou lichoběžníků N, O odělených x = x 5. Přidání bodu p 6. Vytvoření uzlu X(p 6 ) a dvou lichoběžníků P, Q odělených x = x 6. Přidání hrany e 3. Nalezení protnutých lichoběžníků O, K, P. Vytvoření tří uzlů Y (e 3 ) a šesti lichoběžníků R, S a T, U a V, W oddělených e 3. Spojení lichoběžníků podél e 2. Spojení lichoběžníků S, U a T, V sdílejících stejnou vertikální hranu v nové lichoběžníy X, Y. Odstranění pravějšíhoho z uzlů (S, U) a (T, V) přesměrování odkazu na nové lichoběžníky X, Y. 37 / 44

Trapezoidální mapy 36. Ilustrace přidání e 3 do D 38 / 44

Trapezoidální mapy 37. Ilustrace přidání e 3 do D 39 / 44

Trapezoidální mapy 38. Postup nalezení bodu q v D Při hledání polohy bodu q = [x q, y q ] v D vzhledem k lichoběžníku postupujeme takto: Prohledáváme stromovou strukturu od kořene. V každém X uzlu porovnáváme x q a x p. Pokud x q { < x p, přejdeme do Lpodstromu. > x p,, přejdeme do Ppodstromu. V každém Y uzlu porovnáváme polohu y q a strany e. Pokud { pod e, přejdeme do Lpodstromu. y q nad e, Přejdeme do Ppodstromu. Opakujeme, dokud aktuální uzel není list (obsahuje hledaný lichoběžník ). Složitost konstrukce O(n log(n)). Vyhledávání O(log(n)) Pamět ové nároky pouze O(N). 40 / 44

Trapezoidální mapy 39. Ilustrace nalezení pro zadané q 41 / 44

Trapezoidální mapy 40. Nalezení protnutých e Rychlé nalezení lichoběžníků protnutých e je důležitým krokem algoritmu. Necht 1, 2, 3, 4, 5 představují lichoběžníky v T protnuté e seřazené tak, že j+1 je pravým sousedem j. Pokud rightp( j ) { nad e, pod e j+1 je pravý dolní soused j j+1 je pravý horní soused j Tato vlastnost je využita při vyhledávacím algoritmu, který vrací s informací, zda se jedná o horního či dolního souseda. 42 / 44

Trapezoidální mapy 41. Algoritmus tvorby T (S). Konstrukce probíhá inkrementální technikou. V každém kroku přidáme nový segment e i. Následně provedeme update struktur T a D. Algoritmus 6: Trapeozoidalní mapa T (S). 1: Konstrukce MBR nad datasetem S 2: Inicializace T, D. 3: Opakuj pro i = 1, n: 4: Nalezení lichoběžníků 1, 2, 3,..., k protnuté e i. 5: Odstranění 1, 2, 3,..., k z T a 6: Nahrazení 1, 2, 3,..., k novými vzniklými protnutím e. 7: Odstranění lichoběžníků 1, 2, 3,..., k (tj. listů) z D 8 : Vytvoření nových listů vzniklých protnutím 1, 2, 3,..., k linií e. 43 / 44

Trapezoidální mapy 42. Algoritmus nalezení protnutých e Algoritmus začíná nalezením v D obsahujícího p 1. Hledání potenciálních probíhá tak dlouho, dokud p 2 leží vpravo od rightp( j ). Algoritmus 7: Nalezení protnutých (T,D, e i). 1: Označ p 1, p 2 koncové body e. 2: Pro p 1 nalezni v D odpovídající 1 3: j = 1. 3: Opakuj pro p 2 ležící vpravo od rightp( j): 4: Opakuj: 5: if rightp( j) leží nad e i, pak j+1 je pravý dolní soused j+1 6: jinak j+1je pravý horní soused j+1 7: j=j+1 8: Vrat 1, 2,..., j 44 / 44