Operace s uzavřenými oblastmi v GIS Booleovské operace s uzavřenými oblastmi. Minkowského suma. Offset polygonu. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie. Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 1 / 111
Obsah přednášky 1 Ukázka použití offsetu polygonu a množinových operací 2 Množinové operace, formulace problému 3 Množinové operace s nekonvexními regiony 4 Konstrukce bufferu, dissolving Analytická konstrukce offsetu Vlastnosti Minkowského sumy Ukázky Minkowského sumy různých množin Algoritmy pro konstrukci Minkowského sumy Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 2 / 111
Ukázka použití offsetu polygonu a množinových operací 1. Nalezení lesů ležících do 2 km od dálnice Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 3 / 111
Množinové operace, formulace problému 2. Formulace problému Dáno: Dvojice uzavřených, ohraničených regionů A, B v R 2. Hledáme: C = A B, C = A B, C = A B, C = B A, Množinové operace nad uzavřenými oblastmi. Základních analytický nástroj GIS. Syntéza a integrace dat z různých zdrojů. Přehled množinových operací: Sjednocení (Union): C = A B. Průnik (Intersection): C = A B. Rozdíl (Difference): C = A B resp. C = B A. Symmetric difference (XOR): C = A B = (A B) ( A B ). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 4 / 111
Množinové operace, formulace problému 3. Ilustrace množinových operací Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 5 / 111
Množinové operace, formulace problému 4. Vlastnosti množinových operací Komutativita: A B = B A, A B = B A, A B B A, ( ) ( ) (A B) A B = (B A) B A Asociativita A (B C) = (A B) C, A (B C) = (A B) C, kde A (B C) (A B) C, A (B C) = (A B) C, A (B C) = (A [(B C) (B C)]) (A [(B C) (B C)], (A B) C = ([(A B) (A B)] C) ([(A B) (A B)] C). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 6 / 111
Množinové operace s nekonvexními regiony 5. Princip algoritmu Algoritmus funguje pro jednoduché nekonvexní regiony (včetně otvorů). Uzavřené oblasti A = {p i } n i=1, B = {q j } m j=1. Složitost O(m n). Výsledkem operace C = A B, prázdná množina, 0D entita, 1D entita, 2D entita, kombinace. A, B reprezentovány kruhovými seznamy. CCW orientace. Fáze algoritmu: A) Výpočet průsečíků A, B + setřídění B) Update A, B. C) Ohodnocení vrcholů A, B dle pozice vůči B, A. D) Výběr vrcholů dle ohodnocení. E) Vytvoření fragmentů. F) Vytvoření oblastí z fragmentů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 7 / 111
6. Ukázka, oblasti A, B A p 1 p 2 p 3 p 4 B q 1 q 2 q 3 q 4 q 5 q 6 q 7 p 1 p 4 A q 6 q 4 q 2 p 2 p 3 q 5 B q 3 q 7 q 1
7. Výpočet průsečíků A, B Oblasti A, B mají k průsečíků b ij, b ij = e i e j, e i = (p i, p i+1 ), e j = (j, q j+1 ). Metoda výpočtu průsečíků: 1) Naivní algoritmus Složitostí O(m n), test všech kombinací e i e j. 2) Line Sweep (Bentley-Ottman). Složitostí θ(n log(n)), obtížnější implementace. Výpočet průsečíku b ij segmentů e i, e j : b ij = p i + α u = p j + β v, směrové vektory u, v, w u = (xi+1 x i, y i+1 y i ), Parametry α, β v = (xj+1 x j, y j+1 y j ), w = (xi x j, y i y j ). α = k 1 k 3, β = k 2 k 3, k 1 = v x w y v y w x, k 2 = u x w y u y w x, k 3 = v y u x v x u y. k 1 = 0, k 2 = 0, k 3 = 0: e i, e j kolineární. k 1 = 0 a k 2 = 0: e i, e j rovnoběžné. α 0, 1 a β 0, 1 : b ij, jinak mimoběžné.
8. Ukázky průsečíků segmentů p i+1 p i+1 p j p j+1 p i+1 p i p j p j+1 p i p j p j+1 p i p j p j+1 p i+1 p j p i+1 p j+1 p i+1 p i p j p i pj+1 p i p j p i+1 p j p j+1 p i+1 p i+1 p j p j+1 pj+1 p i p i p i
Množinové operace s nekonvexními regiony 9. Operace s průsečíky Dle hodnot α, β s průsečíky provádíme: α = 0, β = 0: p i b ij q j b ij, atribut průsečíku pro p i, q j, α = 0, β = 1: p i b ij q j+1 b ij, atribut průsečíku pro p i, q j+1, α = 1, β = 0: p i+1 b ij q j b ij, atribut průsečíku pro p i+1, q j, α = 1, β = 1: p i+1 b ij q j+1 b ij, atribut průsečíku pro p i+1, q j+1, α = 0, β (0, 1): p i b ij b ij e j, atribut průsečíku pro p i, B b ij, α = 1, β (0, 1): p i+1 b ij b ij e j, atribut průsečíku pro p i+1, B b ij, α (0, 1),β = 0: b ij e i b ij q j, A b ij, atribut průsečíku pro q j, α (0, 1),β = 1: b ij e i b ij q j+1, A b ij, atribut průsečíku pro q j+1, α (0, 1),β (0, 1): b ij e i b ij e j, A b ij, B b ij. Pro hodnoty 0,1 upravíme atributy odpovídajícího vrcholu: průsečíku. V opačném případě přidáme bod do A, B nebo do obou. Řešeno v samostatné proceduře. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 11 / 111
Množinové operace s nekonvexními regiony 10. Implementační detaily Odvozená struktura uchovává další vlastnosti: class QPointFB : public QPointF{ double alpha; double beta; bool inters; TPointPolygonPosition pos; //Value of α parameter //Value of β parameter //Is it an intersection? //Midpoint p = 0.5(p i + p i+1 ) position Kromě parametrů α, β, je/není průsečíkem i polohu M vůči 2. oblasti. Zpracování průsečíku b v oblasti P s n vrcholy, i index poč. bodu hrany e: Algoritmus 2: ProcessIntersection(b,t,P,i) 1: if ( t < ɛ): 2: P[i] inters //Startovní bod průsečíkem 3: if ( t 1 < ɛ): 4: P[(i + 1)%m] inters //Koncový bod průsečíkem 5: else: 6: i i + 1 //Inkrementuj pozici 7: P (b, i) //Přidej průsečík na pozici i + 1. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 12 / 111
Množinové operace s nekonvexními regiony 11. Výpočet průsečíků, naivní algoritmus Hledání všech průsečíků b ij. Pro segment e i = (p i, p i+1 ) procházíme postupně všechny segmenty e j = (q j, q j+1 ). Zásady: 1) Segment e j protíná e i nejvýše jednou Průsečík b ij lze přidat mezi body q j a q j+1 přímo. 2) Segment e i může být protnut více segmenty e j Průsečík b ij zatím nelze přidat mezi p i a p i+1. Nutno spočítat všechny b ij : e i testován vůči všem e j b ij = e i e j, i = const, j = 1,..., m 1. Dvojice (key, val) uchovávány v mapě M dle α Následně M přidána mezi body p i a p i+1. Složitost O(m, n). M(α) = (α i, b ij ). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 13 / 111
12. Ukázka průsečíků segmentů p 1 q 6 q 4 A q 2 p 4 b 26 b 25 b 24 b 23 b 22 b 21 p 2 p 3 q 5 B q 3 q 7 q 1
13. Update seznamů A, B S každým nalezeným průsečíkem e i e j, j = 1,..., m 1, updatován B. Průsečík b ij vložen mezi body p j, p j+1. Pro A průsečíky b ij ukládány do M(α). Po nalezení všech b ij průsečíků e i e j hromadně updatován A. M(α) přidána mezi body p i, p i+1. A p 1 p 2 p 3 p 4 B q 1 q 2 q 3 q 4 q 5 q 6 q 7 1. B q 1 b 21 q 2 q 3 q 4 q 5 q 6 q 7 2. B q 1 b 21 q 2 b 22 q 3 q 4 q 5 q 6 q 7 3. B q 1 b 21 q 2 b 22 q 3 b 23 q 4 q 5 q 6 q 7 4. B q 1 b 21 q 2 b 22 q 3 b 23 q 4 b 24 q 5 q 6 q 7 5. B q 1 b 21 q 2 b 22 q 3 b 23 q 4 b 24 q 5 b 25 q 6 q 7 6. B q 1 b 21 q 2 b 22 q 3 b 23 q 4 b 24 q 5 b 25 q 6 b 26 q 7 7. A p 1 p 2 b 26 b 25 b 24 b 23 b 22 b 21 p 3 p 4 Op. b 21 M(α) b 22 b 21 b 23 b 22 b 21 b 24 b 23 b 22 b 21 b 25 b 24 b 23 b 22 b 21 b 26 b 25 b 24 b 23 b 22 b 21 b 26 b 25 b 24 b 23 b 22 b 21
14. Algoritmus výpočtu průsečíků Pro segment e i = (p i, p i+1 ) hledány průsečíky b ij se všemi e j = (q j, q j+1 ). Pokud b ij, pro e j zpracován přímo (přidán nebo updatován q j /q j+1 ). Pro segment e i přidán do M (zatím neznáme všechny b ij ). Po nalezení všech b ij postupně sekvenčně přidány z M. Algoritmus 2: ComputeIntersections(A, B) 1: for (i = 0; i < n;i++): 2: M = map double, QPointFB //Vytvoření mapy 3: for (j = 0; j < m;j++): 4: if b ij = (p i, p (i+1)%m ) (q j, q (j+1)%m ) //Existuje průsečík 5: M[α i ] b ij //Přidej do M 6: ProcessIntersection(b ij,β,b,j) //Zpracuj první průsečík pro e j 7: if ( M > 0) //Nějaké průsečíky jsme nalezli 8: for m M: //Procházej všechny průsečíky v M 9: b m.second //Získej 2. hodnotu z páru 10: ProcessIntersection(b,α,A,i) //Zpracuj aktuální průsečík pro e i
15. Poloha hran A, B O poloze e i = (p i, p i+1 ) k B rozhoduje poloha libovolného vnitřního bodu p i = 0.5(p i + p i+1 ), analogicky pro e j = (q j, q j+1 ) vzhledem k A q j = 0.5(q j + q j+1 ). Každému p i A určíme polohu vzhledem k B. Každému q j B určíme polohu vzhledem k A. Ohodnocovací fce g OUT, p i / B, g(e i, B) = g(p i, B) = BND, p i B, IN, p i B, OUT, q j / A, g(e j, A) = gq j, A) = BND, q j A, IN, q j A. Hrany rozděleny na vnitřní, vnější, ležící na hranci A/B. Tato informace uložena do počátečního bodu hrany : TPointPolygonPosition pos; //Midpoint p = 0.5(p i + p i+1 ) position
16. Ukázka ohodnocení vrcholů A, B p 1 q 6 q 4 A q 2 p 4 p 1 q 6 q 4 A q 2 p 4 b 26 b 25 b 24 b 23 b 22 b 21 p 2 p 3 b 26 b 25 b 24 b 23 b 22 b 21 p 2 p 3 q 5 B q 3 q 5 B q 3 q 7 q 1 q 7 q 1 Inner Outer
17. Ukázka ohodnocení hran A, B p 1 q 6 q 4 A q 2 p 4 Outer Inner b 26 b 25 b 24 b 23 b 22 b 21 p 2 p 3 q 5 B q 3 q 7 q 1
Množinové operace s nekonvexními regiony 18. Ukázka ohodnocení hran A, B Ohodnocení hran vrcholů A, B: A p 1 p 2 b 26 b 25 b 24 b 23 b 22 b 21 p 3 p 4 g(e i, B) O O I O I O I O O O B q 1 b 21 q 2 b 22 q 3 b 23 q 4 b 24 q 5 b 25 q 6 b 26 q 7 g(e j, A) O I I O O I I O O I I O O V A, B se nevyskytují singulární segmenty (kolineární). Chybí ohodnocení BND (boundary). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 20 / 111
Množinové operace s nekonvexními regiony 19. Singulární A, B Přibude ohodnocení BND, kolineární segmenty. p 1 p 4 A Outer q 5 Inner q 8 q 7 b 25 b 24 q 3 q 2 Boundary p 2 p 3 q 6 B q 4 q 9 q 1 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 21 / 111
Množinové operace s nekonvexními regiony 20. Výběr hran dle ohodnocení Výběr hran A, B dle prováděné množinové operace. Z hran následně sestaveny fragmenty. Operace A B C = A B Inner Inner C = A B Outer Outer C = A B Outer Inner C = B A Inner Outer C = A B, Inner + Outer Inner + Outer Nestabilita: nepřesné určení polohy bodu a oblasti. Pro singulární případy atribut BND. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 22 / 111
Množinové operace s nekonvexními regiony 21. Výsledek množinových operací p 1 p 4 A q 6 q 4 q 2 b 26 b 25 b 24 b 23 b 22 b 21 p 2 p 3 q 5 B q 3 q 7 q 1 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 23 / 111
22. Vytvoření fragmentů Spojení vrcholů (hran) se stejným ohodnocením do polylinií (fragmentů). Uchovány v samostatných seznamech f, F jejich seznam. Každý fragment f začíná startovním bodem: průsečík. Koncový bod: první bod s jiným ohodnocením (další průsečík). Difference: f má opačné pořadí vrcholů (CW místo CCW)! Princip vytvoření fragmentů: 1) Nalezení: g(p[i s]) = g, P[i s] = inters, 1. průsečík s ohodnocení G, index i s. 2) Dokud i i s, opakuj: 2a) Najdi průsečík s ohodnocením g: g(p[i]) = g P[i] = inters. 2b) Vytvoř prázdný fragment f. 2bi) Přidej všechny vrcholy s ohodnocení g do fragmentu f. 2c) Přidej první následující průsečík do f. 2d) Pokud se jedná o Difference, reverse f. 2e) Přidej aktuální fragment f do seznamu: F f.
Množinové operace s nekonvexními regiony 23. Ukázka změny orientace: Difference A B CW CW Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 25 / 111
Množinové operace s nekonvexními regiony 24. Algoritmus: vytvoření fragmentů Vstupem polygon P s n vrcholy, ohodnocení g, swap orientation s, seznam fragmentů F. Polygon projedeme více než 1x, kruhový list, pozor na %. Algoritmus 2: CreateFragements(P, g, s, F ) 1: i 0 2: while (g(p[i]) g P[i] inters) //Dokud P[i] není průsečík s orientací g 3: i i + 1 4: if (i n) return; //Žádný bod s touto orientací neexistuje 5: i s i //Zapamatuj startovní index prvního průsečíku 6: do 7: f = //Prázdný fragment 8: if (createfragmentfromvertices(i s, P, g, i, f )) //Nalezen fragment 9: if (s) f.reverese() //Swapuj prvky fragmentu, je -li třeba 10: F [f [0]] f //Přidej fragment do mapy, klíč poč. bod 11: i (i + 1)%m 12: while (i i s) //Dokud nedojdeme k počátečnímu průsečíku Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 26 / 111
Množinové operace s nekonvexními regiony 25. Algoritmus: vytvoření fragmentu Vytvoření fragmentu f z bodů stejné orientace g. Následně přidán do f první bod s rozdílnou orientací. Algoritmus 2: createfragementfromvertices(i s, P, g, i, f ) 1: if g(p[i]) g P[i] inters //Bod není průsečíkem s orientací g 2: return false 3: for (;;) 4: f P[i] //Přidej bod do fragmentu 5: i (i + 1)%n 6: if (i i s) //Obešli jsme celý polygon 7: return false 8: if g(p[i]) g //První bod s rozdílnou orientací 9: f P[i] //Přidej ho do seznamu 10: return true //Úspěšně skončeno Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 27 / 111
Množinové operace s nekonvexními regiony 26. Ukázka fragmentů F A,F B p 1 f 12 p 4 A q 6 q 4 q 2 f 5 f 3 b 26 b 25 b 24 b 23 b 22 b 21 f 1 p 2 f 7 f 8 f 9 f p 10 f 3 11 f 4 f 2 q 5 q 3 B q 7 f 6 q 1 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 28 / 111
Množinové operace s nekonvexními regiony 27. Ukázka fragmentů F A,F B, seznamy Oblast A: Inner F A Outer f 7 b 26 b 25 f 8 b 25 b 24 f 9 b 24 b 23 f 10 b 23 b 22 f 11 b 22 b 21 f 12 b 21 p 3 p 4 p 1 p 2 b 26 Oblast B: Inner F B Outer f 1 b 21 q 2 b 22 f 2 b 22 q 3 b 23 f 3 b 23 q 4 b 24 f 4 b 24 q 5 b 25 f 5 b 25 q 6 b 26 f 6 b 26 q 7 q 1 b 21 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 29 / 111
28. Sestavení oblastí z fragmentů Algoritmus procházky po fragmentech... Po fragmentech postupujeme tak dlouho, dokud nedosáhneme poč. bodu. Vstupem seznam fragmentů F, výstupem seznam polygonů C. Postupně hledány navazující segmenty. Fragment uložen v mapě (f [0], (bool, f ) std::map<qpointf, std::pair<bool, std::vector<qpointf> > > Jako klíč použit počáteční bod. Atribut bool indikuje, zda je hrana zpracována nutno značkovat. Algoritmus 2: MergeFragementsv(F, C) 1: for f F 2: P //Vytvoř prázdný polygon 3: s f.first //Najdi startovní bod fragmentu 4: if (!f.second.first) //Pokud fragment již nebyl zpracován 5: if(createpolygonfromfragments(s, F, P)) 6: C P //Přidej polygon do seznamu
29. Ukázka sestavení z fragmentů: Union p 1 f 13 p 4 p 1 f 13 A q 6 q 4 q 2 q 6 q 4 A q 2 p 4 b 26 f f 5 b 25 b 24 3 b 23 b 22 f 1 b 21 b f 5 b f 26 25 b 24 3 b 23 b 22 f 1 b 21 f7 f7 p 2 f 8 f 9 f 10 f 12 p 3 p 2 f 4 f 2 f 8 f 9 f 10 f 12 p 3 q 5 B q 3 q f 4 5 B f q 2 3 q 7 f 6 q 1 q 7 f 6 q 1 p 1 f 13 p 4 p 1 f 13 p 4 A A q 6 q 4 q 2 q 6 q 4 q 2 b 26 f 5 b 25 b 24 f 3 b 23 b 22 f 1 b 21 b 26 f 5 b 25 b 24 f 3 b 23 b 22 f 1 b 21 p 2 f 7 f 8 f 9 f 10 f 12 p 3 p 2 f 4 f 2 f 7 f 8 f 9 f 10 f 12 f 4 f 2 p 3 q 5 B q 3 q 5 B q 3 q 7 f 6 q 1 q 7 f 6 q 1
30. Ukázka sestavení z fragmentů: Union p 1 f p 13 4 p 1 f 13 p 4 A A q 6 q 4 q 2 q 6 q 4 q 2 f 5 f 3 f 1 b 26 b 25 b 24 b 23 b 22 b 21 b 26 b 25 b 24 b 23 b 22 b 21 f 5 f 3 f 1 p 2 f f 7 8 f 9 f 10 f 12 p 3 p 2 f 4 f 2 f 7 f 8 f 9 f 10 f 12 f 4 f 2 p 3 q 5 q 3 q 5 q 3 B B q 7 f 6 q 1 q 7 f 6 q 1
31. Ukázka sestavení z fragmentů: Union Outer fragmenty: F A : Outer F B : Outer f 8 * b 25 b 24 f 2 ** b 22 q 3 b 23 f 10 ** b 23 b 22 f 4 * b 24 q 5 b 25 f 12 *** b 21 p 3 p 4 p 1 p 2 b 26 f 6 *** b 26 q 7 q 1 b 21 Sestavené fragmenty (bez počátečního bodu f [0]): C f 8 f 8 [0] C f 8 f 8 [0] f 4 f 4 [0] C f 10 f 10 [0] C f 10 f 10 [0] f 2 f 2 [0] 1 b 25 b 24 1 b 25 b 24 b 24 q 5 b 25 1 b 24 q 5 b 25 1 b 24 q 5 b 25 2 b 23 b 22 2 b 23 b 22 b 22 q 3 b 23 C f 12 f 12 [0] 1 b 24 q 5 b 25 2 b 22 q 3 b 23 3 b 21 p 3 p 4 p 1 p 2 b 26 C f 12 f 12 [0] f 6 f 6 [0] 1 b 24 q 5 b 25 2 b 22 q 3 b 23 3 b 21 p 3 p 4 p 1 p 2 b 26 b 26 q 7 q 1 b 21
Množinové operace s nekonvexními regiony 32. Algoritmus vytvoření polygonu Vstupem seznam fragmentů F, výstupem seznam polygonů C. Postupně hledány navazující segmenty. Hledání v mapě O(c). Algoritmus 2: createpolygonfromfragments(s, F, P) 1: QPoint n s //Inicializuj následující bod 2: for (;;) //Projdi všechny fragmenty tvořící polygon 3: f F.find(n) //Najdi navazující fragment 4: if (f F.end) //Fragment s takovým poč. bodem neexistuje 5: return false 6: f.second.first true //Fragment označen za zpracovaný 7: n f.second.second.back() //Najdi následující bod 8: P f.second.second {f.second.second[0]} //Přidej bez poč. bodu 9: if (n s) //Obešli jsme polygon, jsme na startu 10: return true Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 34 / 111
33. Výsledný algoritmus Výše uvedené kroky sestaveny do algoritmu. U obou polygonů CCW orientace. Algoritmus 3: BooleanOperations(A, B, oper) 1: if (o(a)! = CCW ) 2: A.switchOr() //Změň orientaci na CCW 3: if (o(b)! = CCW ) 4: B.switchOr() //Změň orientaci na CCW 5: ComputeIntersections(A, B) //Urči průsečíky A, B 6: SetPositions(A, B) //Urči polohu vrcholů vůči oblastem 7: map QPointFI, pair bool, vector QPointFB F 8: pos1 = (oper Intersection oper DifBA?Inner : Outer) 9: pos2 = (oper Intersection oper DifAB?Inner : Outer) 10: swap1 = (oper DifAB : true : false 11: swap2 = (oper DifBA) : true : false 12: CreateFragments(A, pos1, swap1, F ) 13: CreateFragments(B, pos2, swap2, F ) 14: MergeFragments(A, B, C)
Množinové operace s nekonvexními regiony 34. Problematické situace Při odladění algoritmu nutné zohlednit řadu singularit: např. oblasti mající společný pouze jeden vrchol, stranu, část strany... Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 36 / 111
35. Formulace problému Dáno: Uzavřený a ohraničený region C v R 2 či linie. Hledáme: Offset C d oblasti C. Definice 1: Offset C d oblasti C představuje ekvidistantu oblasti tvořenou hraniční křivkou této oblasti c(t) ve vzdálenosti d. Offset obecné oblasti nemusí být racionální křivkou. Rovnoběžné křivky (tzv. Bertrandovy křivky) mají společné hlavní normály (platí pro C a C d ). Definice 2: Offset C d definován jako obálka soustavy kružnic s poloměrem d, jejichž střed se pohybuje po c(t). Offset C d může protínat sám sebe, na C d. Vznikají singulární body, jejichž vzdálenost od C je menší než d singulární část offsetu. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 37 / 111
36. Ukázka offsetu C d Offset C d obsahující singulární body. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 38 / 111
37. Konstrukce offsetu: diskrétní aproximace Konstrukce offsetu pro diskretiyované tvary: 1 Analytická konstrukce Použití pro linie, lomené čáry i oblasti. Převod aproximační oblasti na buffer: metoda Winding number. Snadná implementace. 2 Opakované sjednocení bufferů Metoda dissolvingu: opakované sjednocení bufferů nad jednotlivými segmenty. Použití lomené čáry i oblasti. Snadná implementace, avšak nestabilní. Nad offsety pro linie provedena operace dissolve. 3 Minkowského suma Pro libovolný typ uzavřené oblasti (netřeba diskretizovat). Složitější konstrukce: dekompozice na konvexní oblasti. Nad každou oblast Minkowského suma: offset. Poté dissolving dílčích offsetů. Obecné problémy: numerická přesnost, stabilita, množství singularit. Topologicky korektní implementace je náročná. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 39 / 111
38. Ukázky offsetu pro různé prvky Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 40 / 111
39. Konstrukce offsetu pro liniové segmenty Definice bufferu nad segmentem e i = (p i, p i+1 ) C d (e i ) = {c c e i = d}. Tvořen 2 úsečkami a 2 kružnicovými oblouky C d (e i ) = { k i,1, l i,1, k i,2, l i,2 k i,1 p i+1 = l i,1 e i = k i,2 p i = l i,2 e i = d }, kde k i,1 (c i,1, c i,2, d), l i,1 = (c i,2, c i,3 ), k i,2 (c i,3, c i,4, d), l i,2 = (c i,4, c i,1 ). c i,4 k i,2 p i+1 d l i,2 d c i,3 c i,1 e i l i,1 p i φ i k i,1 d c i,2
40. Diskrétní tvar offsetu Parametrické rovnice oblouků k i,1, k i,2 (x i,1, y i,1 ) = (x i + d cos ϕ i,j,1, y i + d sin ϕ i,j,1 ), (x i,2, y i,2 ) = (x i+1 + d cos ϕ i,j,2, y i+1 + d sin ϕ i,j,2, ). Koncové body c i,1 (ϕ i,s,1, d), c i,2 (ϕ i,e,1, d), c i,3 (ϕ i,s,2, d),c i,4 (ϕ i,e,2, d) k i,1 : ϕ i,s,1 = ϕ i + π 2, ϕ i,e,1 = ϕ i π 2, k i,2 : ϕ i,s,2 = ϕ i π 2, ϕ i,e,2 = ϕ i + π 2, kde Vnitřní body k i,1, k i,2 vzorkovány: ϕ i = arctan y i+1 y i x i+1 x i. A) V celočíselném kroku ϕ s + β ϕ, ϕ i,s ϕ i,j ϕ i,e, nevhodné. B) V celočíselném násobku β kroku ϕ, ϕ i,s < ϕ i,j < ϕ i,e ϕ i,j,0 = α ϕ, α = { α, α α = 0 α + 1 α α = 0, α = ϕ i,s ϕ, kde ϕ i,j = ϕ i,j,0 + β ϕ, β = α, α + 1, α + 2,...
41. Diskrétní offset, vzorkování:ϕ s + β ϕ
42. Diskrétní offset, vzorkování:β ϕ
43. Offset liniového segmentu, algoritmus Postupně vzorkovány body na obou kružnicových obloucích. Parametrem velikost offsetu d a krok vzorkování ϕ. Algoritmus 2: createoffset(p 1, p 2, d, ϕ) 1: c 2: ϕ atan2(y 2 y 1, x 2 x 1 ) 3: ϕ s,1 ϕ + π/2 4: ϕ e,1 ϕ s,1 + π 5: samplearc(p 1, d, ϕ s,1, ϕ e,1, ϕ, c) 6: ϕ s,2 ϕ π/2 7: ϕ e,2 ϕ s,2 + π 8: samplearc(p 2, d, ϕ s,2, ϕ e,2, ϕ, c) 9: return c Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 45 / 111
44. Vzorkování kružnicového oblouku Vzorkování kružnicového oblouku s krokem ϕ v intervalu (ϕ s, ϕ e ). Počáteční bod, vnitřní body, koncový bod. Zaokrouhlování nahoru, ceil: a. Algoritmus 2: samplearc(p, d, ϕ s, ϕ e, ϕ, c) 1: c i (p + d cos ϕ s, p + d sin ϕ s ) 2: c c i 3: α ϕ i,s ϕ 4: α ( α α < ε)?α + 1 : α. 5: for (ϕ α ϕ; ϕ < ϕ e ; f f + ϕ) 6: c i (p + d cos ϕ, p + d sin ϕ) 7: c c i 8: c i (p + d cos ϕ e, p + d sin ϕ e ) 9: c c i Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 46 / 111
45. Liniový offset, různá vzorkování
46. Analytický tvar offsetu Neprováděno vzorkování kružnic. oblouků. Segmenty k i,1, l i,1, k i,2, l i,2 v analytickém tvaru: 2 x kruž. oblouky: střed + koncové body. 2 x liniové segmenty: koncové body. Výhodou přesnější výpočet průsečíků při dissolvingu (úsečka, kružnice). Nevýhodou obtížnější výpočet průsečíků: dekompozice na segmenty. Průsečíky: L x L, L x C, C x C. Robustnější vůči zaokrouhlovacím chybám. Datová reprezentace: class Offset{ QPointF p1, p2; //St edy kruº. obouk double d //Polom r oblouku QPointF c1, c2, c3, c4 //Konc. body segmentu }; Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 48 / 111
47. Offset, polylinie Polylinie L = {p 1,..., p n}. Nad každým segmentem e i = (p i, p i+1 ) vygenerován liniový buffer C d (e i ) = {c c e i = d}. Sjednocení n liniových bufferů nad L, dissolving: C d (L n) = n C d (e i ), i=1 = (C d (e 1 ) C d (e 2 )... C d (e n 1 )) C d (e n), = C d (L n 1 ) C d (e n). Reflexní vrchol generuje kružnicový oblouk, jinak liniové segmenty. Tento princip využívá inkrementální algoritmus: Offset nad k segmenty polylinie L z offsetu pro k 1 segmenty. Tento následně sjednocen s offsetem k-tého segmentu C d (L k ) = C d (L k 1 ) C d (e k ). Může obsahovat i uzavřené oblasti. Problém singularit: odstraněny z výsledku. Výpočetně obtížný: zaokrouhlovací chyby (dotyk bufferů). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 49 / 111
48. Offset nad segmenty polylinie p 5 p 1 d p 2 p 4 p6 p 7 p8 p 3 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 50 / 111
49. Offset polylinie: dissolve, bez singularit (GIS) p 5 p 1 d p 4 p 6 p 2 p 7 p8 p 3 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 51 / 111
50. Offset polylinie: dissolve, singularity p 5 p 1 d p 4 p6 p 2 p 7 p8 p 3 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 52 / 111
51. Vlastnosti offsetu Reflexní vrchol p i generuje kružnicový oblouk. Střed oblouku leží na bisektoru b i (p i 1, p i, p i+1 ). Počáteční body oblouků na kolmicích, svírají úhel ω i π. Konvexní vrchol p i generuje liniové segmenty, průsečík na bisektoru b i (p i 1, p i, p i+1 ). b i i i - p i p i-1 p i+1 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 53 / 111
52. Reflexní vrchol Reflexní vrchol může vést k rozpadu C d (L) na vnitřní a vnější C d (L) = {C d,o (L), C d,i (L) C d,i (L) C d,o (L)}. Offset tvořen 1x C d,o (L) a mx C d,i (L) { } C d (L) = C d,o (L), Cd,i(L), 1..., Cd,i(L) m, C j d,i (L) C d,o(l). Hovoříme o vnitřním C d,i (L) a vnějším C d,i (L) offsetu. Materiálová interpretace: vnější (Solid), vnitřní (Hole). Vnitřní offset nemusí existovat pro různá d. Důsledek: Offset není spojitý, rozpadá se do několika částí. Obtížnější implementace dissolvingu { } C d (L k ) = C d,o (L k 1 ) C d (e k ), Cd,i(L 1 k 1 ) C d (e k ),..., Cd,i(L m k 1 ) C d (e k ). Dissolving nutno řešit pro 1 vnější a m vnitřních offsetů (cyklus). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 54 / 111
53. Rozpad offsetu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 55 / 111
54. Rozpad offsetu: dissolving Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 56 / 111
55. Zánik vnitřního offsetu I. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 57 / 111
56. Zánik vnitřního offsetu II. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 58 / 111
57. Hledání průsečíků offsetu Existují 3 typy průsečíků: Linie x linie. Linie x kružnicový oblouk. Kružnicový oblouk x kružnicový oblouk. Pozor na singularity: dotyk. Hledání průsečíku offsetů: A) Naivní algoritmus Každý offset s každým, neefektivní. Kvadratická složitost vzhledem k počtu bufferů. B) Sweep Line Příznivější složitost, modifikovaný Bentley-Ottman algoriotmus. Pro každý element uchovány body x, x. Segment vstoupí do PQ pro x, vystoupí pro x. Vzájemně řešeny průsečíky segmentů pouze v PQ. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 59 / 111
58. Ukázky průsečíků bufferů Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 60 / 111
59. Průsečíky offsetů: Sweep Line Sweep Line varianta, segmenty seřazeny dle x. Hledány průsečíky segmentů, jejichž x intervaly se protínají. Každý segment v PQ přítomen ve svém [x, x] intervalu. x
Konstrukce bufferu, dissolving 60. Konstrukce offsetu metodou dissolvingu Inkrementální konstrukce, C d (L k ) approximací offsetu C d (L). Postupné sjednocování offsetu segmentu C d (e k ) s offsetem k 1 segmentů C d (L k 1 ) C d (L k ) = C d (L k 1 ) C d (e k ). Existence m vnitřních offsetů { } C d (L k ) = C d,o (L k 1 ) C d (e k ), Cd,i 1 (L k 1) C d (e k ),..., Cd,i m (L k 1) C d (e k ) vede k cyklu C 1 d,i (L k 1) C d (e k ),..., C m d,i (L k 1) C d (e k ). Offsety značkovány jako Solid, Hole. Výsledky dílčích sjednocení C d (L k ) { C d,o (L k ), C d (L k 1 ) C d (e k ), C d,i (L k ), C d (L k 1 ) C d (e k ) =. Neprováděno in-place, do temporary C T d (L k ) postupně přidávány sjednocené offsety. Následně C d (L k ) C T d (L k ). Výhodou snadná implementace. Algoritmus citlivý vzhledem k zaokrouhlovacím chybám. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 62 / 111
Konstrukce bufferu, dissolving 61. Klasifikace oblastí: Solid/Hole Klasifikace oblastí do 2 skupin (materiálová interpretace): A) Solid: Neobsahuje žádné otvory. CCW orientace. B) Hole: Oblast uvnitř oblasti. CW orientace. Hole uvnitř Solid, ale Solid také uvnitř Hole. Testování vzájemné polohy oblastí vůči ostatním. Modifikovaný Ray algoritmus: vertikální paprsek. Pro každý offset C d (e i ) uložen bod p i s nejmenší x souřadnicích. Offsety zpracovány v PQ dle p i. Lichý počet průsečíků: Hole, jinak Solid. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 63 / 111
Konstrukce bufferu, dissolving 62. Klasifikace oblastí: Sweep Line (0) (2) (1) (2) H p 2 p 3 S p 0 S p 1 S 0 1 2 3 x Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 64 / 111
63. Offset polylinie: jednotlivé fáze Konstrukce bufferu, dissolving C d (L 1 ) C d (L 2 ) C d (e 3 ) C d (e 2 ) C d (L 3 ) C d (e 4 ) C d (L 4 ) C d (e 5 ) C d (L 5 ) C d,o (L 6 ) 1 C d,i (L 6 ) C d (e 6 ) C d (e 7 ) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 65 / 111
Konstrukce bufferu, dissolving 64. Klasifikace oblastí: jednotlivé fáze 1 1 C d,i (L 6 ) C d,i (L 6 ) C d,o (L 7 ) C d,o (L 8 ) C d (e 8 ) C d (e 7 ) C d (e 10 ) 1 1 C d,i (L 6 ) C C d (e 9 ) d,i (L 6 ) C d,o (L 9 ) 2 C d,i (L 10 ) C d,o (L 10 ) C d,o (L 10 ) C d,o (L 11 ) 1 C d,i (L 6 ) C d (e 11 ) 1 C d,i (L 6 ) 2 2 C d,i (L 10 ) C d,i (L 10 ) C d (e 12 ) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 66 / 111
65. Offset, polylinie, algoritmus Inkrementální konstrukce C d (L) z C d (e). Všechny segmenty C d (L k 1 ) sjednoceny s C d (e l ). Pomocná datová datová struktura (temporary) C d (L) C d (L k ), neprováděno in-place. Výsledek k-tého offsetu uložen do C d (L), následně: C d (L k ) C d (L). Algoritmus 2: offsetpolyline(p, d, ϕ) 1: C d (L) //Prázdný offset polylinie 2: C d (e) createoffset(p[0], P[1], d, ϕ) //Offset prvního segmentu 3: C d (L) C d (e) //Přidání prvního offsetu 4: for i = 1,..., n 1 5: C d (e) createoffset(p[k], P[(k + 1)%n], d, ϕ) //Offset k tého segmentu 6: C d (L) //Vytvoření pomocné struktury 7: for j = 0,..., m 1 //Pro všechny Inner/Outer segmenty stávajíícj offsetu 8: C d (e) = C d (e) C d (L)[j] //Sjednocení se stávajícím offsetem 9: if C d (e) //Hole z předchozích iterací 10: C d (L) C d (L)[j] //Přidej stávající Hole do C d (L k ) 11: else //Nový Solid, Holes 12: C d (L) C d (e) //Přidej nový Solid a Holes do C d (L k ) 13: C d (L) C d (L) //Aktualizuj offset polyline: C d (L k ) = C d (L k 1 )
Konstrukce bufferu, dissolving 66. Offset uzvařené oblasti Uzavřená oblast P = {p 1,..., p n}. Nad každým segmentem e i = (p i, p i+1 ) vygenerován liniový buffer C d (e i ) = {c c e i = d}. Proces dissolvingu n C d (P n) = C d (e i ). i=1 Reflexní vrchol generuje kružnicový oblouk, jinak liniové segmenty. Vždy existuje vnější offset, v některých případech i vnitřní offset Inkrementální konstrukce Offset nad k segmenty oblasti P z offsetu pro k 1 segmentů P. Poté sjednocen s offsetem k-tého segmentu C d (L k ) = C d (L k 1 ) C d (e k ). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 68 / 111
67. Offset uzavřené oblasti Konstrukce bufferu, dissolving Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 69 / 111
Konstrukce bufferu, dissolving 68. Offset uzavřené oblasti, dissolving Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 70 / 111
Konstrukce bufferu, dissolving 69. Offset uzavřené oblasti: singularity Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 71 / 111
70. Reflexní vrchol Konstrukce bufferu, dissolving Reflexní vrchol p i generuje kružnicový oblouk. Střed oblouku leží na bisektoru b i (p i 1, p i, p i+1 ). Počáteční body oblouků na kolmicích, svírají úhel ω i π. Reflexní vrchol může vést k rozpadu C d (P) na vnitřní a vnější C d (P) = {C d,o (P), C d,i (P) C d,i (P) C d,o (P)}. Offset tvořen 1x C d,o (P) a mx C d,i (P) { } C d (P) = C d,o (P), Cd,i(P), 1..., Cd,i(P) m, C j d,i (P) C d,o(p). Offset není spojitý, rozpadá se do několika částí. Dissolving C d (P k ) = Algoritmus konstrukce: { } C d,o (P k 1 ) C d (e k ), Cd,i(P 1 k 1 ) C d (e k ),..., Cd,i(P m k 1 ) C d (e k ). Analogický jako u offsetu polylinie. Postupný dissolving offsetů nad segmenty. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 72 / 111
71. Rozpad offsetu: dissolving Konstrukce bufferu, dissolving Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 73 / 111
72. Offset oblasti: jednotlivé fáze Konstrukce bufferu, dissolving Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 74 / 111
Analytická konstrukce offsetu 73. Analytická konstrukce metodou Winding Number Metoda dissolvingu výpočetně obtížná. Citlivost na singularity, zaokrouhlovací chyby. Jednotlivé segmenty offsetu lze určit analyticky. Tvar segmentu závisí na reflexivitě/konvexitě vrcholu. Offset aproximován polygonem se smyčkami (topologicky nekorektní). Smyčky dle orientace CW/CCW odstraněny/ponechány. Pro výpočet orientace použito Winding number. Výhodou snadná implementace a robustnost metody. Použitelné i pro oblasti s otvory (Holes). Použitelné pro lomené čáry i uzavřené oblasti. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 75 / 111
74. Konvexita/konkavita vrcholu Analytická konstrukce offsetu Pokud (p i 1, p i, p i+1 ) tvoří left turn, pak p i konvexní. p i = { CVX, p i+1 σ L (p i 1, p i ), CNC, jinak. p 5 p 3 p 4 p 9 p 7 p 8 p 6 p 10 p 1 p 2 Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 76 / 111
74. Modifikovaný Winding number Analytická konstrukce offsetu Uzavřená oblast P = {p i } m i=1,bod q P. Bodem q veden paprsek r. Modifikovaný winding number kde ω(r, P) = n ψ(r, e i ), e i = (p i, p i+1 ), e i P 0, r e i =, ψ(r, e i ) = 1, q σ L (p i, p i+1 ), 1, q σ R (p i, p i+1 ). Hodnota ω(r, P) nezávislá na volbě q, R. Pro sousedící polygony oddělené 1 hranou se liší o 1. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 77 / 111
Analytická konstrukce offsetu 75. Ukázka modifikovaného Windimg numberu (-1) +1 P (-1) +1-1 -1-1 -1-1 +1 (-1) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 78 / 111
Analytická konstrukce offsetu 76. Klasifikace Solid/Hole s využitím WN (2) (1) (0) (1) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 79 / 111
77. Self-intersected polygon Analytická konstrukce offsetu Topologicky nekorektní části: ω(r, P) > 1. (+2) (+1) (0) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 80 / 111
78. Algoritmus konstrukce offsetu Analytická konstrukce offsetu Analytická konstrukce offsetu bez nutnosti aplikace množinových operací. Lze aplikovat na vnitřní i vnější offfset. Vnitřní offset: Nejprve zkonstruovány rovnoběžky ve vzdálenosti d ke všem prvkům. Podle typu vrcholu zkonstruován: 1 Konvexní vrchol: Kružnicový oblouk, střed leží na ose úhlu. 2 Konkávní vrchol: Propojení koncových bodů posunutých segmentů s tímto vrcholem. Umělé vytvoření smyčky: topologicky nekorektní. Vnější offset: Konkávní - kružnicový oblouk, konvexní - propojení. Následně určeny průsečíky se segmenty offsetu. Odstranění smyček dle hodnot winding numberu. Vnitřní offset: vynechání oblastí ω(r, P) < 0. Vnější offset: vynechání oblastí ω(r, P) > 1. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 81 / 111
79. Konstrukce vnitřního offsetu Analytická konstrukce offsetu (-1) (-1) (+1) (-1) (-1) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 82 / 111
80. Konstrukce vnějšího offsetu Analytická konstrukce offsetu (+2) (+2) (+1) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 83 / 111
Vlastnosti Minkowského sumy 30. Minkowského suma v E 2 Definice: Necht A, B jsou dvě množiny bodů v E 2. Minkowského suma A B je definována jako A B = b B A b, kde množina A b = {a + b a A b B} = A + b je množina A posunutá o vektor b. Komutativita Minkowského sumy: A B = B A. Asociativita Minkowského sumy: (A B) C = A (B C). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 84 / 111
Vlastnosti Minkowského sumy 31. Ilustrace Minkowského sumy: C = A B Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 85 / 111
Vlastnosti Minkowského sumy 32. Další vlastnosti Minkowského sumy V1: Necht A, B jsou dvě množiny bodů v E 2 a s, t dva vektory z E 2. Pak A s B t = (A B) s+t. Posunutí množin A, B nemá vliv na velikost a tvar Minkowského sumy. Posuneme-li množiny A, B o vektory s, t, Minkowského suma A, B bude posunuta o součet vektorů s + t. V2: Oblasti A, B mají společný bod, tj. A B 0, právě když (0, 0) A ( B). Existuje společný bod dvou oblastí A, B, pokud Minkowského suma A ( B) obsahuje bod (0, 0). Tato věta je používána k detekci kolizí obou oblastí. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 86 / 111
Vlastnosti Minkowského sumy 33. Znázornění A s B t = (A B) s+t Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 87 / 111
Vlastnosti Minkowského sumy 34. Znázornění detekci kolizí dvou oblastí Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 88 / 111
Vlastnosti Minkowského sumy 35. Další vlastnosti Minkowského sumy Extrémní bod množiny: Extrémní bod množiny A ve směru daném vektorem d představuje takový bod x A, pro který všechny ostatní body množiny A leží v polorovině (q, r), kde q(x, d) a r(x, d). V3: Necht A, B jsou dvě množiny bodů v E 2 a C = A B. Extrémní bod množiny C ve směru d je součtem extrémních bodů množin A, B ve Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 89 / 111
Vlastnosti Minkowského sumy 36. Znázornění vztahu extrémních bodů Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 90 / 111
Vlastnosti Minkowského sumy 37. Další vlastnosti Minkowského sumy V4: Minkowského suma C = A B dvou konvexních množin A, B je konvexní množina. V5: Minkowského suma C = A B dvou nekonvexních množin A, B je konvexní nebo nekonvexní množina. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 91 / 111
Vlastnosti Minkowského sumy 38. Ukázka Minkowského sumy 2 nekonvexních množin V tomto případě výsledkem konvexní množina. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 92 / 111
Vlastnosti Minkowského sumy 39. Další vlastnosti Minkowského sumy V6: Necht P i a Q j jsou množiny v E 2. Pak P i i j Q j = i,j (P i Q j ). Tato vlastnost používána při hledání Minkowského sumy nekonvexních množin. Konstrukce Minkowského sumy nekonvexních množin: Nekonvexní množinu rozdělíme na sjednocení disjunktních konvexních množin. Minkowského sumu nekonvexních množin získáme jako sjednocení Minkowského sum konvexních množin. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 93 / 111
Vlastnosti Minkowského sumy 40. Konstrukce Minkowského sumy sjednocením konvexních množin Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 94 / 111
41. Minkowského suma 2 bodů Ukázky Minkowského sumy různých množin Minkowského suma dvou jednobodových množin je jednobodová množina. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 95 / 111
Ukázky Minkowského sumy různých množin 42. Minkowského suma bodu a úsečky Minkowského suma dvou jednobodových množin je jednobodová množina. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 96 / 111
43. Minkowského suma 2 úseček Ukázky Minkowského sumy různých množin Pokud jsou úsečky rovnoběžné, je výsledkem úsečka. V opačném případě je výsledkem konvexní 4-úhelník. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 97 / 111
44. Minkowského suma 2 úseček Ukázky Minkowského sumy různých množin Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 98 / 111
Ukázky Minkowského sumy různých množin 45. Minkowského úsečky a trojúhelníku Pokud není úsečka rovnoběžná s žádnou stranou trojúhelníku, výsledkem je konvexní pětiúhelník. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 99 / 111
Ukázky Minkowského sumy různých množin 46. Minkowského suma 2 trojúhelníků Minkowského suma dvou trojúhelníků představuje konvexní n úhelník s počty vrcholů n (3, 6). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 100 / 111
47. Minkowského suma linie a kruhu Ukázky Minkowského sumy různých množin Pokud kruh k s poloměrem r má počátek v bodě [0, 0], výsledkem Minkowského sumy kruhu a linie L ekvidistanta nazývaná v GIS liniový buffer ve vzdálenosti r of linie L. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 101 / 111
Ukázky Minkowského sumy různých množin 48. Minkowského suma uzavřené oblasti a kruhu Pokud kruh k s poloměrem r má počátek v bodě [0, 0], výsledkem Minkowského sumy kruhu k a uzavřeného regionu C ekvidistanta nazývaná v GIS plošný buffer ve vzdálenosti r. 3 varianty bufferu nad uzavřenou oblastí C: Vnitřní i vnější buffer: Ekvidistanta konstruována uvnitř i vně C. Vnější buffer Ekvidistanta pouze vně C, nejčastěji používaná varianta. Vnitřní buffer Ekvidistanta pouze uvnitř C, nelze vždy zkonstruovat, problém singulárních segmentů. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 102 / 111
Ukázky Minkowského sumy různých množin 49. Minkowského suma uzavřené oblasti a kruhu Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 103 / 111
50. Naivní algoritmus Algoritmy pro konstrukci Minkowského sumy Necht A, B jsou konvexní regiony s m a n vrcholy, hledáme C = A B. Princip algoritmu: Minkowského suma C tvořena součtem polohových vektorů vrcholů A, B. Vrcholy Minkowského sumy C tvoří pouze některé z těchto součtů. Algoritmus provádí součty všech vrcholů (resp. polohových vektorů) regionů A, B. n m c ij = (p i + q j ). Minkowského sumu C tvoří body ležící na konvexní obálce H(c ij ). Časová složitost O(mn log(mn)), v praxi není používán. Algoritmus 1: Minkowski (A, B, C) i=1 1: Opakuj pro každý bod p i A: 2: Opakuj pro každý bod p j B: 3: c ij = p i + q j, c ij c. 4: C = H(c) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 104 / 111 j=1
51. Algoritmus extrémních bodů Tomiczková, 2006. Algoritmy pro konstrukci Minkowského sumy Algoritmus založen na myšlence, že extrémní bod množiny C = A B je součtem extrémních bodů množin A, B ve směru d. Hranici Minkovského sumy tvoří pouze úsečky rovnoběžné s hranami A, B. Princip algoritmu: Vypočteny orientované úhly α i, β j, kde: α i definován jako úhel vektorů p i p i+1 a (0, 1). β j definován jako úhel vektorů q j p j+1 a (0, 1). Pak nový vrchol C definován jako p i+1 + q j, pokud α i > β j, C = p i + q j+1, pokud α i < β j, p i+1 + q j+1, pokud α i = β j. Do C je přidáván vrchol vznikající součtem aktuálního vrcholu a koncového vrcholu takové z dvojice stran, jejíž úhel svíraný s osou y je větší (tj. extrémního bodu ve směru d). Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 105 / 111
52. Ilustrace algoritmu Algoritmy pro konstrukci Minkowského sumy Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 106 / 111
53. Implementace algoritmu Algoritmy pro konstrukci Minkowského sumy Při konstrukci bufferu kružnice nahrazována n úhelníkem. Složitost algoritmu O(m + n). Algoritmus 2: Minkowski (A, B, C) 1: Seřazení vrcholů p i, q j oblastí A, B ve směru hodinových ručiček. 2: Označ p 1 a q 1 extrémní vrcholy A, B ve směru d daném vektorem (0, 1). 3: Inicializuj i, j, k = 1. 4: C k = p 1 + q 1. 5: Opakuj pro všechny p i A a q j B: 6: α i = ( p i p i+1, (0, 1)). 7: β j = ( p j p j+1, (0, 1)). p i+1 + q j, pokud α i > β j, 8: Přidání bodu C k+1 = p i + q j+1, pokud α i < β j, p i+1 + q j+1, pokud α i = β j. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 107 / 111
Algoritmy pro konstrukci Minkowského sumy 54. Minkowského suma nekonvexní oblasti Algoritmus založen na principu rozkladu nekonvexního mnohohoúhelníku na monotónní polygony (např. triangulací). Na monotónní (tj. konvexní) polygony aplikovány předchozí algoritmy. Postup: A) Oblast A rozdělena na monotónní podoblasti A i. B) Oblast B rozdělena na monotónní podoblasti B j. C) Pro všechny A i a B j opakovaně konstruujeme Minkowského sumu C ij = A i B j. D) Minkowského suma C = A B určena sjednocením dílčích Minkowského sum C ij C = ij C ij. Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 108 / 111
Algoritmy pro konstrukci Minkowského sumy 55. Ilustrace Bufferu nad liniovým prvkem Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 109 / 111
Algoritmy pro konstrukci Minkowského sumy 56. Ilustrace Bufferu nad liniovým prvkem (Dissolve) Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 110 / 111
Algoritmy pro konstrukci Minkowského sumy 57. Ilustrace bufferu nad uzavřenou oblastí Tomáš Bayer bayertom@natur.cuni.cz (Katedra aplikované Operace s uzavřenými geoinformatiky oblastmia kartografie. v GIS Přírodovědecká fakulta UK.) 111 / 111