Documente Academic
Documente Profesional
Documente Cultură
Dorel Lucanu
Faculty of Computer Science Alexandru Ioan Cuza University, Ia si, Romania dlucanu@info.uaic.ro
PA 2013/2014
PA 2013/2014
1 / 47
Outline
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
2 / 47
Introducere
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
3 / 47
Introducere
Motivat ie
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
4 / 47
Introducere
Motivat ie
Introducere
Motivat ie
Aplicat ii
grac a (computer vision, reconstruirea de imagini) robotic a (mi scare n plan, vzizbilitate) proiectare aistat a de calculator (CAD) siteme informatice geograce (GIS) statistic a
PA 2013/2014
6 / 47
Introducere
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
7 / 47
Introducere
Puncte
Un punct p poate reprezentat prin coordonate carteziene, p = (x , y ), sau coordonate polare, p = (, ).
y x
p=(x,y)
Structura de date: p |-> {x |-> 4, y |-> 3} sau p |-> {rho |-> 5, theta |-> 0.643501109}
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 8 / 47
Introducere
Segmente
Structura de date: perechi de puncte {A |-> {x |-> 1, y |-> 2} B |-> {x |-> 4, y |-> 3}} Accesarea coordonatelor: A.x A.y B.x B.y . . .
3 2 1 4
PA 2013/2014
9 / 47
Introducere
Linii poligonale
Structura de date: lista liniare de puncte Pot : simple nchise/deschise
linie poligonala
Introducere
Dreapta
O dreapt a este reprezentat a printr-o ecuatie liniar a: a x + b y + c = 0
Structura de date: dreapta 3x + 4y + 2 = 0 este reprezentat a de structura d |-> {a |-> 3 b |-> 4 c |-> 2} Dreapta care trece prin do a puncte distincte P si Q: d.a P.x + d.b P.y + d.c = 0 Se rezolv a sistemul: d.a Q.x + d.b Q.y + d.c = 0
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 11 / 47
Introducere
Operat ii primitive
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
12 / 47
Introducere
Operat ii primitive
Fie P un punct si d o dreapt a. Relativ la d , P se poate aa: ntr-un semiplan: d.a * P.x + d.b * P.y + c > 0 pe dreapt a: d.a * P.x + d.b * P.y + c = 0 pe cel alalt semiplan: d.a * P.x + d.b * P.y + c < 0 Pozit ionarea fat a de un segment AB: se determin a dreapta suport dac a se a a pe dreapt a, se veric a dac a este ntre A si B Se poate testa si n ordine invers a. Timp: O (1)
PA 2013/2014
13 / 47
Introducere
Operat ii primitive
d = 0, sistemul are solutie unic a: x = d1 |-> {a |-> a 1 b |-> b 1 d2 |-> {a |-> a 2 b |-> b 2 d1.a d1.b d2.a d2.b Timp: O (1)
D. Lucanu (FII - UAIC)
dy dx , y= d d
c |-> c 1} c |-> c 2}
PA 2013/2014
14 / 47
Introducere
Operat ii primitive
Solut ia 1: se determin a punctul P de intersect ie a dreptelor suport se veric a dac a P apart ine segmentelor
PA 2013/2014
15 / 47
Introducere
Operat ii primitive
CCW = Counter-Clock-Wise (sensul invers arcelor de ceasornic) A.x A.y 1 ccw(A, B, C) = B.x B.y 1 C.x C.y 1 ccw(A, B, C) > 0 : A, B, C formeaz a un ciclu n sens invers arcelor de ceasornic ccw(A, B, C) < 0 : A, B, C formeaz a un ciclu n sensul arcelor de ceasornic ccw(A, B, C) = 0 : A, B, C sunt coliniare Timp: O (1)
PA 2013/2014
16 / 47
Introducere
Operat ii primitive
Introducere
Operat ii primitive
- se aplic a teorema cosinusului a = dist(C, B); b = dist(C, A); c = dist(A,B); theta = acos((a*a + b*b - c*c)/ 2*a*b); Timp: O (1) (???)
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 18 / 47
Introducere
Operat ii primitive
PA 2013/2014
19 / 47
Introducere
Operat ii primitive
PA 2013/2014
19 / 47
Introducere
Operat ii primitive
Calculul unei intersect ii: O (1) Determinarea num arului de intersect ii: O (n), n num arul de segmente ale liniei L Exercit iu: scrierea algoritmului n limbajul Alk.
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 20 / 47
Introducere
Operat ii primitive
Structura DCEL
Planar Straight Line Graph (PSLG)
P1 P2 F2 F1 P6 F6 P7 F5 P5 P8 F0 F4 P4 F3 P3
P0
PA 2013/2014
21 / 47
Introducere
Operat ii primitive
Structura DCEL
P3 P2 F3 F4 P4
P0
G[i1] = { V1 |-> 2 V2 |-> 4 F1 |-> 3 F2 |-> 4 ... G[i2] = { V1 |-> 3 V2 |-> 2 F1 |-> 3 F2 |-> ... ... G[i3] = { V1 |-> 4 V2 |-> 0 F1 |-> ... F2 |-> 4
Introducere
Operat ii primitive
Structura DCEL
DCEL = Double Connected Edge List ecare nod al structurii DCEL este memorat ntr-o component aa tabloului exist a o corespondent a 1-1 ntre muchiile PSLGului si nodurile listei V1 - primul v arf al muchiei, V2 al doilea v arf al muchiei F1 - fat a din st anga muchiei, F2 fat a din dreapta muchiei Ptr1 - adresa primului nod (muchie) nt alnit merg and n sensul CCW din V1, Ptr2 - adresa primului nod (muchie) nt alnit merg and n sensul CCW din V2 ( n ambele cazuri se pleac a din muchia curent a V1 V2)
PA 2013/2014
23 / 47
Introducere
Operat ii primitive
PA 2013/2014
24 / 47
Introducere
Operat ii primitive
banda (slab)
PA 2013/2014
25 / 47
Introducere
Operat ii primitive
Preprocesare
1 2
sorteaz a benzile n ordine cresc atoare dup ay sorteaz a segmentele de pe o band a n ordine cresc atoare dup ax Observat ie: trapezele de pe o band a pot degenera si n triunghiuri caut a binar banda pe care apare P caut a binar trapezul la care part ine P pe banda g asit a la punctul anterior.
Procesare
1 2
Timp: preprocesare: O (n2 log n) (pot n2 segmente pe o band a n cazul cel mai nefavorabil - exemplu pe tabl a) procesare: O (log n) Preprocesarea se poate reduce la O (n2 ) printr-o tehnic a de sweep plane. Exercit iu: scrierea n limbajul Alk al algoritmului
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 26 / 47
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
27 / 47
CH (S ) este conex a. CH (S ) este m arginit a. Dac aP si Q sunt dou a puncte din S astfel nc at toate celelalte puncte din S se g asesc de aceea si parte a dreptei ce trece prin P si Q , atunci segmentul PQ se a a pe frontiera lui CH (S ). Orice punct de frontiera lui CH (S ) se g ase ste pe un segment PQ cu P, Q S.
Theorem Dac a S este nit a, atunci CH (S ) este un poligon convex cu toate v arfurile apart in and la S.
1
O raz a care eman a dintr-un punct interior al unui poligon convex intersecteaz a poligonul o singur a dat a. V arfurile unui poligon convex apar n sortate dup a componenta unghiular aa coordonatelor polare calculate relativ la o origine care se a a n interiorul poligonului.
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 29 / 47
PA 2013/2014
30 / 47
CH (S )
PA 2013/2014
31 / 47
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
32 / 47
Descriere
Cunoscut a si sub numele de gift wrapping method. Idee: Se m atur a planul cu o dreapt a d p an a atinge un punct P0 S . P0 se a a pe frontiera lui CH (S ). Se rote ste d , s a zicem c a n sensul CCW, p an a atinge al doilea punct P1 . P1 se a a pe frontiera lui CH (S ). Se rote ste dreapta P0 P1 , acela si sens, p an a atinge al treilea punct P2 . P2 se a a pe frontiera lui CH (S ). Se rote ste dreapta P1 P2 , acela si sens, p an a atinge al . . . In nal punctele atinse formeaz a frontiera lui CH (S ), care e un poligon convex. Observat ie cheie: la pasul i , unghiul Pi 1 Pi Pi +1 este cel mai mare pe care l poate forma segmentul Pi 1 Pi cu un alt punct din S .
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 33 / 47
Primitive
Prseupunem |S | = n. smallestY(S) - ntoarce punctul din S cu cel mai mic y ; dac a exist a mai multe, atunci cel mai din st anga. Timp: O (|S |). smallestSlope(S, P) - ntoarce punctul Q din S a. . PQ are cea mai mic a pant a n raport cu axa x . Timp: O (n) largestAngle(S, P, Q) - ntoarce punctul Q din S a. . PQR este cel mai mare. Timp: O (n)
PA 2013/2014
34 / 47
Algoritmul
@input: o multime S cu n puncte @output: un poligon convex reprezentand frontiera lui CH(S) CHJarvis(S, n) { P[0] = smallestY(S); P[1] = smmalestSlop(S, P[0]); i = 1; while (P[i] != P[0]) { P[i+1] = largestAngle(S, P[i-1], P[i]); i = i + 1; } return P; } Timp: O (n) + O (n) + O (n) O (n) = O (n2 ).
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 35 / 47
Scanarea Graham
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
36 / 47
Scanarea Graham
Descriere
Se caut a un punct interior al lui CH (S ). Poate centrul de greutate al unui triunghi format de trei puncte din S . Se sorteaz a lexicograc dup a coordonatele polare (, ). Lista obt inut a este L. Fie P primul element din L. Dac a ccw(P, L.next(P), L.next(L.next(P)) < 0 (ciclu n sensul arcelor de ceasornic), atunci elimin a L.next(P) din L si continu a procesarea cu L.pred(P). Dac a ccw(P, L.next(P), L.next(L.next(P)) > 0 (ciclu n sensul contrar arcelor de ceasornic), atunci continu a procesarea cu L.next(P).
PA 2013/2014
37 / 47
Scanarea Graham
Primitive
median(S,n) ntoarce centrul de greutate Q al lui S (Q.x si Q.y sunt mediile coordonatelor respective ale punctelor din S ). Timp: O (n). polarSorted(S, n, Q) - ntoarce lista liniar a cont in and elementele lui S sortate lexicograc dup a coordonatele polare (, ), calculate cu originea n Q . L[0] este cel mai din dreapta (y cel mai mare) si cel mai de jos (x cel mai mic) punct din S (astfel L[0] va pe frontiera lui CH (S )). Timp: O (n log n). Operat ii peste listele liniare: L.select(p) - ntoarce al p -lea element din lista L (Timp: O (1)) L.delete(p) - sterge al p -lea element din lista L (Timp: O (1)) L.size() - ntoarce lungimea listei L (Timp: O (1))
PA 2013/2014
38 / 47
Scanarea Graham
Algoritmul
@input: o multime S cu n puncte @output: un poligon convex reprezentand frontiera lui CH(S) CHGraham(S, n) { Q = median(S, n); L = polarSorted(S, n, Q); p = 0; while (p < L.size(()) { m = L.size(); if (ccw(L.select(p), L.select((p+1)%m), L.select((p+2)%m) > 0) p = p+1; else { L.delete((p + 1) % m); p = (p - 1) % m; } } return L; }
D. Lucanu (FII - UAIC) Geometrie computat inonal a PA 2013/2014 39 / 47
Scanarea Graham
Analiza
Corectitudinea: (la tabla) Timp: O (n log n) dat de sortare. Scanarea se face n timpul O (n).
PA 2013/2014
40 / 47
Algoritm divide-et-impera
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
41 / 47
Algoritm divide-et-impera
Paradigma divide-et-impera
procedure divideEtImpera(P, n, S) if (n n0) then rezolv a subproblema P prin tehnici elementare else mparte P in P1 , . . . , Pa de dimensiuni n1 , . . . , na divideEtImpera(P1 , n1 , S1 ) ... divideEtImpera(Pa , na , Sa ) combin a S1 , . . . , Sa pentru a obt ine S end
PA 2013/2014
42 / 47
Algoritm divide-et-impera
Teorema de master
T (n) =
O (1)
(1)
Teorem a Dac a n > n0 atunci: log a , dac a a > bk O (n b ) T (n) = O (nk logb n) , dac a a = bk O (nk ) , dac a a < bk
(2)
PA 2013/2014
43 / 47
Algoritm divide-et-impera
Descriere
Ideea de baz a: CH (S1 S2 ) = CH (CH (S1 ) CH (S2 )) divizarea: partajeaz aS n S1 si S2 , cu n/2 si n n/2 puncte, respectiv apelurile recursive: L1 = CH(S1 ), L2 = CH(S2 ) asamblarea: interclaseaz a L1 si L2 :
1 2
determin aP n interiorul lui L1 dac a P nu este interior lui L2 : determin a v arfurile extreme din L2 ce pot v azute din P si elimin a din L2 v arfurile apropiate de P dintre cele dou a extreme (exclusiv) (exemplu pe tabl a); acum L1 si L2 sunt sortate dup a unghiul polar calculat cu originea n P; determin a CH (L1 L2 ) printr-o scanare Graham.
PA 2013/2014
44 / 47
Plan
Introducere Motivat ie Cunoa sterea domeniului problemei Operat ii primitive Inf a sur atoarea convex a Frontiera lui Jarvis (Jarviss March) Scanarea Graham Algoritm divide-et-impera Inf a sur atoarea convex a si Sortarea
PA 2013/2014
45 / 47
SORTARE ACOP-CONV
Teorem a SORTARE n ACOP-CONV. S = {x0 , . . . , xn }) Presupunem xi > 0, i = 1, . . . , n Se face transformarea: S S = {(x , x 2 ) | x S } Gracul lui y = x 2 este o parabol a. CH (S ) listeaz a punctele din S ordonate dup a coordonata x . Corollary ACOP-CONV are complexitatea timp n cazul cel mai nefavorabil (n log n).
PA 2013/2014
46 / 47
ACOP-CONV SORTARE
PA 2013/2014
47 / 47