Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

ALGORYTMY GEOMETRYCZNE. ZNAJDOWNIE OTOCZKI WYPUKŁEJ ZBIORU PUNKTÓW NA PŁASZCZYŹNIE.

Podobne prezentacje


Prezentacja na temat: "ALGORYTMY GEOMETRYCZNE. ZNAJDOWNIE OTOCZKI WYPUKŁEJ ZBIORU PUNKTÓW NA PŁASZCZYŹNIE."— Zapis prezentacji:

1 ALGORYTMY GEOMETRYCZNE

2 ZNAJDOWNIE OTOCZKI WYPUKŁEJ ZBIORU PUNKTÓW NA PŁASZCZYŹNIE

3 DANE : Q = {p 1,...,p n }, n 3, p i R 2 - zbiór punktów na płaszczyźnie WYNIK : Otoczka wypukła zbioru Q. DEF. Otoczką wypukłą zbioru punktów Q na płaszczyźnie nazywamy najmniejszy zbiór wypukły na płaszczyźnie zawierający Q. FAKT. Jeśli |Q| < 0, to otoczką wypukłą zbioru Q jest najmniejszy wielokąt wypukły P, taki że każdy punkt ze zbioru Q leży albo na brzegu, albo w jego wnętrzu.

4 GRAHAM-SCAN (Q) { Q = {p 1,...,p n }, n 3, jest danym zbiorem punktów na płaszczyźnie.} Algorytm wyznacza stos S zawierający wszystkie wierzchołki otoczki wypukłej CH(Q) uporządkowane przeciwnie do ruchu wskazówek zegara. Procedura korzysta z funkcji TOP(S), której wartością jest element na szczycie stosu oraz NEXT-TO-TOP(S), której wartością jest element poprzedzający wierzchołek stosu ; obie procedury nie modyfikują S }

5 begin Wyznacz punkt p 0 = (x 0, y 0 ), gdzie : y 0 = min { y i : p i = (x i, y i ) Q } x 0 = min { x i : p i = (x i, y 0 ) Q } ; Posortuj punkty ze zbioru Q – {p 0 } ze względu na współrzędną kątową w biegunowym układzie współrzędnych o środku w p 0 przeciwnie do ruchu wskazówek zegara; jeśli więcej niż jeden punkt ma taką samą współrzędną kątową, usuń wszystkie z wyjątkiem punktu położonego najdalej od p 0. Oznacz otrzymany zbiór : Q = { p 0, p 1,..., p m };

6 Utwórz stos pusty S; PUSH (p 0,S); PUSH (p 1,S); PUSH (p 2,S); { punkty p 0, p 1, p 2 są na stosie S } for i := 3 to m do begin while (przejście od NEXT-TO-TOP(S) przez TOP(S) do p i nie oznacza skrętu w lewo w TOP(S) ) do POP(S); PUSH( p i, S); end; return S; end ; T(n) = O(nlgn)

7 ALGORYTM TESTUJĄCY CZY W ZBIORZE ODCINKÓW NA PŁASZCZYŹNIE ISTNIEJE PARA ODCINKÓW PRZECINAJĄCYCH SIĘ

8 ANY-SEGMENTS_INTERSECT (S); { S jest skończonym zbiorem odcinków na płaszczyźnie S = { S 1,... S n } ; S i = [ k i L, k i P ] i = 1,...,n Zakładamy, że żaden odcinek nie jest prostopadły do osi Ox oraz żadne trzy różne odcinki nie przecinają się w jednym punkcie. Procedura sprawdza czy w S istnieje co najmniej jedna para odcinków przecinających się }

9 begin T := ; Utwórz listę LS posortowanych końców odcinków z S w kolejności od najmniejszej współrzędnej x do największej, w przypadku równych – najpierw punkt o mniejszej współrzędnej y; dla każdego zaznacz czy jest lewym czy prawym końcem odcinka ;

10 for każdy punkt p z listy LS do begin if p jest lewym końcem odcinka s then begin INSERT (T,s); if (ABOVE (T,s) istnieje i przecina s ) or ( BELOW (T,s) istnieje i przecina s ) then return TRUE end; if p jest prawym końcem odcinka s then begin if oba odcinki (ABOVE (T,s ) and (BELOW (T,s)) istnieją and (ABOVE (T,s) przecina BELOW (T,s) ) then return TRUE; DELETE (T,s); end; return FALSE; end;

11 ZNAJDOWANIE NAJMNIEJ ODLEGŁEJ PARY PUNKTÓW W ZBIORZE PUNKTÓW NA PŁASZCZYŹNIE DANE : n N, n 2; Q = { p 1,... p n } : p i R 2, p i = (x i, y i ) 1 i n WYNIK : p, p ' Q : ** (p,p ' ) = min { d(p,q ) ;p,q P }

12 ZNAJDŹ-PARĘ-NAJMNIEJ-ODLEGŁYCH-PUNKTÓW( P,X,Y); { Algorytm stosuje metodę "dziel i zwyciężaj" Każde wywołanie rekurencyjne algorytmu otrzymuje jako dane wejściowe : P Q tablicę X zawierającą punkty ze zbioru P posortowane według współrzędnej x. tablicę Y zawierającą punkty ze zbioru P posortowane według współrzędnej y. } (1) Sprawdzamy czy |P| 3 TAK : wyznacz = min {d(p,q), p,q P } porównując odległości wszystkich par punktów w P; niech p, q : d(p, q ) = NIE : DZIEL (2)

13 (2) DZIEL Podziel P na dwa "równoliczne" podzbiory P L, P R tzn.: |P L | = |P| / 2, |P R | = |P| / 2 przy pomocy prostej x = l, prostopadłej do osi Ox (ozn. prosta l) tak, że : wszystkie punkty z P L leżą na lewo od prostej l lub na prostej a wszystkie punkty z P R leżą na prawo od prostej l lub na prostej Podziel X na tablice X L, X R zawierające,odpowiednio, punkty z P L, P R, posortowane według współrzędnej x ; Podziel Y na tablice Y L, Y R zawierające,odpowiednio, punkty z P L, P R posortowane według współrzędnej y ;

14 (3) ZWYCIĘŻAJ Dwa wywołania rekurencyjne : ZNAJDŹ-PARĘ-NAJMNIEJ-ODLEGŁYCH-PUNKTÓW ( P L, X L, Y L ); WYNIK : L, p L, q L ZNAJDŹ-PARĘ-NAJMNIEJ-ODLEGŁYCH-PUNKTÓW ( P R, X R, Y R ); WYNIK : R, p R, q R

15 (4) POŁĄCZ : Oblicz : = min { L, R }, niech p, q : d(p, q ) = Oblicz = min {, * } gdzie * = min { d(p L, p R ) ; p L P L,p R P R } Aby wyznaczyć * wystarczy : rozpatrywać punkty z P L o współrzędnych x z przedziału [ l -, l ] i punkty z P R o współrzędnych x z przedziału [l, l + ] (i) Utwórz tablicę Y' z tablicy Y zawierającą te punkty uporządkowane według współrzędnej y; (ii) Dla każdego p Y' znajdź punkty w Y' w promieniu od p, oblicz odległości od p i wyznacz najmniejśzą ( *) i punkty p*, q*, ( tzn.: * = d(p*, q*) )

16 Istotna obserwacja : Dla każdego p Y' wystarczy przeglądać 7 punktów z Y' powyżej p


Pobierz ppt "ALGORYTMY GEOMETRYCZNE. ZNAJDOWNIE OTOCZKI WYPUKŁEJ ZBIORU PUNKTÓW NA PŁASZCZYŹNIE."

Podobne prezentacje


Reklamy Google