Geometria obliczeniowa Wykład 3

Slides:



Advertisements
Podobne prezentacje
Sympleksy n=2.
Advertisements

Grażyna Mirkowska PJWSTK 15 listopad 2000
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Temat: WIELOŚCIANY KLASA III P r.
Przygotowały: Jagoda Pacocha Dominika Ściernicka
Trian_mon(P) Input: y-monotoniczny wielokąt zapamiętany jako zbiór boków, Output: triangulacja D jako zbiór krawędzi. Wyodrębnij prawy i lewy łańcuch punktów,
Okręgiem o środku O i promieniu r nazywamy zbiór punktów płaszczyzny, których odległości od punktu O są równe r r - promień okręgu. r O O - środek.
ALGORYTMY I STRUKTURY DANYCH
CZWOROKĄTY Patryk Madej Ia Rad Bahar Ia.
Geometria obliczeniowa Wykład 1
Geometria obliczeniowa Wykład 2
ALGORYTMY GEOMETRYCZNE.
WYKŁAD 2. Kolorowanie wierzchołków
WYKŁAD 7. Spójność i rozpięte drzewa
WYKŁAD 8. Siła spójności Wierzchołek v nazywamy wierzchołkiem cięcia grafu G, gdy podgraf G-v ma więcej składowych spójności niż G. Krawędź e nazywamy.
WYKŁAD 8. Siła spójności A,B – dowolne podzbiory V(G)
GRAFY PLANARNE To grafy, które można narysować na płaszczyźnie tak, by krawędzie nie przecinały się (poza swoimi końcami). Na przykład K_4, ale nie K_5.
Geometria obrazu Wykład 6
Geometria obrazu Wykład 2
Geometria obrazu Wykład 11
„Własności figur płaskich” TRÓJKĄTY
WYKŁAD 7. Spójność i rozpięte drzewa Graf jest spójny, gdy dla każdego podziału V na dwa rozłączne podzbiory A i B istnieje krawędź z A do B. Definicja.
Krótki kurs geometrii płaszczyzny
GEOMETRIA PROJEKT WYKONALI: Wojciech Szmyd Tomasz Mucha.
,, W KRAINIE CZWOROKĄTÓW ,, Adam Filipowicz VA SPIS TREŚCI
MATEMATYKAAKYTAMETAM
Geometria obliczeniowa Wykład 8
Geometria obliczeniowa Wykład 9
Geometria obliczeniowa Wykład 3
Figury płaskie I PRZESTRZENNE Wykonała: Klaudia Marszał
Geometria obliczeniowa Wykład 4
Trójkąty.
Geometria obliczeniowa Wykład 6
FIGURY GEOMETRYCZNE.
Geometria obliczeniowa Wykład 7
PODSTAWOWE WŁASNOŚCI PRZESTRZENI
Geometria obliczeniowa Wykład 5
Geometria obliczeniowa Wykład 12
Geometria obliczeniowa Wykład 13
Zasady przywiązywania układów współrzędnych do członów.
Własności figur płaskich
Pola i obwody figur płaskich.
Geometria obliczeniowa Wykład 13 Planowanie ruchu 1.Znajdywanie ścieżki między dwoma punktami. 2.Ruch postępowy robota wielokątnego na płasz- czyźnie.
Geometria obliczeniowa Wykład 10
Grafika i komunikacja człowieka z komputerem
Geometria obliczeniowa Wykład 5 Geometryczne struktury danych 1. Drzewa odcinków 2. Drzewa czwórkowe 3. Drzewa BSP.
Najważniejsze twierdzenia w geometrii
Geometria obliczeniowa Wykład 12 Planowanie ruchu 1.Najkrótsza ścieżka między dwoma punktami. 2.Znajdywanie ścieżki między dwoma punktami. 3.Ruch postępowy.
Geometria obrazu Wykład 6
Autor: Marcin Różański
Trójkąty Katarzyna Bereźnicka
WIELOKĄTY Karolina Zielińska kl.v Aleksandra Michałek kl v
Geometria obliczeniowa Wykład 2
Geometria obliczeniowa Wykład 13 Algorytmy randomizowane 1.Lokalizacja punktu w siatce trapezów. 2.Znajdywanie średnicy zbioru punktów w R 3. Algorytmy.
WSZYSTKO CO POWINIENEŚ O NICH WIEDZIEĆ…
FIGURY PŁASKIE.
Figury płaskie.
Geometria obliczeniowa Wykład 10 Dualizacja liniowa c.d. 1. Poziomy 2. Otoczka wypukła Ciągi Davenporta-Schinzela Problemy optymalizacyjne 1. Problem wyważania.
Geometria obliczeniowa Wykład 6
Geometria obliczeniowa Wykład 3
Podział odcinka na równe części i w danym stosunku.
Figury geometryczne.
Geometria obliczeniowa Wykład 7
Geometria obliczeniowa Wykład 1
Geometria obliczeniowa Wykład 6
Geometria obliczeniowa Wykład 8
ALGORYTMY I STRUKTURY DANYCH
ALGORYTMY I STRUKTURY DANYCH
Zapis prezentacji:

Geometria obliczeniowa Wykład 3 Podział wielokąta prostego na wielokąty monotoniczne. Podział wielokąta prostego na wielokąty wypukłe. Znajdowanie par przecinających się odcinków. Znajdowanie pary najbliższych punktów.

Podział wielokąta prostego na wielokąty monotoniczne. Do rozwiązania tego problemu wykorzy-stamy metodę zamiatania. Miotła będzie równoległa do osi x-ów. Definicje. Pomocnikiem krawędzi e wielokąta P nazy-wamy wierzchołek v, który jest prawym końcem równoległego do miotły odcinka łączącego v z e, leżącego powyżej miotły i najbliższego niej, którego wnętrze jest zawarte we wnętrzu P. Wielokąt nazywamy y-monotonicznym, gdy jest monotoniczny względem osi y-ów. v e v e

Wyróżniamy pięć rodzajów wierzchołków wielokąta w zależności od pozycji miotły przechodzącej przez dany wierzchołek (badamy wewnętrzne kąty wielokąta) : początkowy, gdy obie wychodzące z niego krawędzie leżą przed miotłą i tworzą kąt < , dzielący, gdy obie wychodzące z niego krawędzie leżą przed miotłą i tworzą kąt > , końcowy, gdy obie wychodzące z niego krawędzie leżą za miotłą i tworzą kąt < , łączący, gdy obie wychodzące z niego krawędzie leżą za miotłą i tworzą kąt > , prawidłowy, w pozostałych przypadkach.

Lemat. Wielokąt, który nie ma wierzchołków dzielących i łączących, jest y-monoto-niczny. Dowód. Załóżmy, że wielokąt nie jest y-mono-toniczny. Wtedy przecięcie poziomej prostej l z wielokątem tworzy co naj-mniej dwie spójne składowe. Istnieje odcinek na zewnątrz wielokąta łączący je. Weźmy ciąg krawędzi wielokąta łączących końce tego odcinka i nieprzecinający prostej. Najbardziej odległy od l wierzchołek takiej łamanej jest wierzchołkiem dzielącym lub łączącym. l l

Naszym zadaniem będzie dodanie prze-kątnych likwidujących wierzchołki łą-czące i dzielące. Strukturą zdarzeń będzie lista L uporząd-kowanych malejąco względem y-ów wierzchołków danego wielokąta P. Strukturą stanu będzie wzbogacone, zrównoważone drzewo poszukiwań binarnych T przechowujące w liściach ciąg aktualnie przecinanych przez miotłę krawędzi ograniczających wielokąt P z lewej strony wraz z dowiązaniami do ich pomocników.

W zależności od rodzaju wierzchołka v, który odwiedza miotła wykonywane są na-stępujące procedury. Niech el (ep) oznacza lewą (prawą) krawędź o końcu w wierz-chołku początkowym, końcowym, dzielącym lub łączącym. Niech ev oznacza krawędź le-żącą bezpośrednio na lewo od v. Wierzchołek początkowy . wstaw el do T; pomocnik(el) := v; Wierzchołek końcowy. if pomocnik(el) jest wierzchołkiem łączącym then wstaw przekątną miedzy v i pomocnik(el); usuń el z T; v v

Wierzchołek dzielący. znajdź w T krawędź ev ; wstaw przekątną między v i pomocnik(ev); pomocnik(ev) := v; wstaw ep do T i pomocnik(ep) := v; Wierzchołek łączący. if pomocnik(ep) jest wierzchołkiem łączącym then wstaw przekątną między v i pomocnik(ep); usuń ep z T; if pomocnik(ev) jest wierzchołkiem łączącym pomocnik(ev); v v

Wierzchołek prawidłowy. Niech eg (ed) będzie krawędzią powyżej (poniżej) v. if wnętrze P leży na prawo od v then if pomocnik(eg) jest wierzchołkiem łączącym then wstaw przekątną między v i pomocnik(eg); usuń eg z T; wstaw ed do T i pomocnik(ed) := v; else znajdź w T krawędź ev ; if pomocnik(ev) jest wierzchołkiem łączącym then wstaw przekątną między v i pomocnik(ev); pomocnik(ev) := v;

Algorytm podziału wielokąta P na wielokąty monotoniczne. L := {p1, p2, ..... , pn}; T := puste ; while L   do v := FRONT(L); POP(L); wywołaj odpowiednią procedurę badającą v zależnie od jego rodzaju;

Lemat. Powyższy algorytm znajduje zbiór nieprzecinających się przekątnych, które dzielą wielokąt prosty P na wielokąty monotoniczne. Dowód. Algorytm likwiduje wierzchołki łączące i dzielące, więc otrzymujemy podział na wielokąty monotoniczne. Z definicji pomocnika wynika, że w chwili dodawania przekątnej między miotłą a odcinkiem łączącym go z odpowiadającą mu krawędzią nie ma innych elementów. Zatem można go połączyć z aktualnie badanym wierzchołkiem przekątną nie przecinającą się z żadną inną.

Lemat. Prosty wielokąt o n wierzchołkach można powyższym algorytmem podzielić na y-monotoniczne wielokąty w czasie O(n log n) używając O(n) pamięci. Dowód. Sortowanie wierzchołków wymaga czasu O(n log n). Przetworzenie jednego wierzchołka wymaga czasu logarytmicznego, więc zamiatanie wykonujemy w czasie O(n log n). Wszystkie wykorzystywane struktury danych mają liniowy rozmiar. Twierdzenie (Chazelle). Dowolny wielokąt prosty można striangulować w czasie O(n).

Podział wielokąta prostego na wielokąty wypukłe. Lemat. Niech  oznacza minimalną liczbę wielokątów wypukłych, na które moż-na podzielić dany wielokąt odcinkami (niekoniecznie przekątnymi). Niech r będzie liczbą kątów wewnętrznych wielokąta o rozwartości większej niż . Wtedy:  r/2 + 1    r +1. Definicja. Dla danego podziału wielokąta przekątnymi istotną przekątną nazywamy taką, której usunięcie powoduje powstanie wielokąta mającego kąt wewnętrzny o rozwartości większej niż .

Fakt. Istotne przekątne nie są wyznaczone jednoznacznie. Lemat. Wierzchołek kąta wewnętrznego o rozwartości większej niż  jest koń-cem co najwyżej dwóch przekątnych istotnych. Dowód. Proste zawierające ramiona kąta wyznaczają dwie półpłaszczyzny. Do każdej z nich może należeć co najwyżej jedna przekątna istotna.

Algorytm Hertela i Mehlhorna. strianguluj wielokąt; usuń wszystkie przekątne, które nie są istotne; Nieistotne przekątne można wy-eliminować w czasie O(n) (w sta-łym czasie sprawdzamy, czy po usunięciu danej przekątnej, przy którymś z wierzchołków powstanie kąt większy od ) .

Twierdzenie. Liczba wielokątów wypukłych otrzymanych z pomocą algorytmu Hertela-Mehlhorna jest co najwyżej czterokrotnie większa niż minimalna liczba takich wielokątów. Dowód. Algorytm Hertela-Mehlhorna tworzy co najwyżej 2r+1 wielokątów. Na podstawie poprzednich lematów mamy: 2r+1  2r+4  4.

Znajdowanie par przecinających się odcinków. Problem: Dla zbioru n odcinków S na płaszczyźnie znajdź wszystkie pary przecinających się odcinków z S. Problem przecinających się odcinków można łatwo rozwiązać w czasie O(n2). W tym celu wystarczy sprawdzić oddzielnie każdą parę odcinków. Takie rozwiązanie jest optymalne, gdy liczba par przecinających się odcinków jest kwadratowa. Chcemy znaleźć algorytm wrażliwy na wynik, tzn. algorytm, którego złożoność będzie zależeć od rozmiaru rozwiązania.

Metoda zamiatania. Miotła będzie zamiatać wzdłuż osi x-ów. W każdym położeniu miotły odcinkami przetworzonymi nazywamy wszystkie odcinki, których końce znajdują się na lewo od niej. Odcinkami aktywnymi są odcinki aktualnie przecinające miotłę. Do zbioru odcinków oczekujących należą odcinki o obu końcach na prawo od miotły. Będziemy korzystać z dwóch struktur danych. Struktura zdarzeń Q jest zrównoważonym drzewem poszukiwań binar-nych zawierającym uporządkowane rosnąco względem x-ów końce odcinków oraz punkty przecięć wszystkich par odcinków aktywnych, które kiedykolwiek były sąsiadami w strukturze. Struktura stanu T jest wzbogaconym, zrównoważonym drzewem poszu-kiwań przechowującym w liściach zbiór odcinków aktywnych uporządko-wanych względem współrzędnych y-owych.

Po dojściu miotły do kolejnego punktu zdarzenia mamy trzy możliwości. Zdarzenie jest początkiem odcinka s z S. wstaw s do T; uaktualnij dowiązania; if w jest sąsiadem s w T then if w przecina s w punkcie p then wstaw p do Q; Zdarzenie jest końcem odcinka s z S. usuń s z T; uaktualnij dowiązania; if s miał w T dwóch sąsiadów w, z then if w przecina z w punkcie p then wstaw p do Q, jeśli go tam jeszcze nie ma;

Zdarzenie jest punktem przecięcia odcinków s,z  S. Zamień kolejność s i z w T; if w jest sąsiadem s then if w przecina s w punkcie p then wstaw p do Q , jeśli go tam jeszcze nie ma; if v jest sąsiadem z then if v przecina z w punkcie q then wstaw q do Q , jeśli go tam Lemat. Jeśli punkt przecięcia dwóch odcin-ków leży po prawej stronie, najbliżej miotły, to znajduje się w strukturze Q.

Algorytm (Bentley-Ottmann). wstaw do Q końce odcinków z S; T := puste; while Q pusty do q := minimalny element w Q; usuń q z Q; wywołaj odpowiednią procedurę badającą q zależnie od jego rodzaju;

Twierdzenie. Algorytm znajduje wszystkie pary przecięć odcinków ze zbioru S w czasie O((n+k) log n), gdzie k jest liczbą przecięć. Dowód. Jeśli dwa odcinki przecinają się, to istnieje położenie miotły poprzedzające to przecięcie, w którym przecinające się odcinki sąsiadują w strukturze T. Zatem każdy punkt przecięcia jest znajdywany. Operacje wykonywane w dowolnym kroku algorytmu wymagają czasu logarytmicznego (stała liczba wstawień, usunięć, wyszukiwań elementów w zrównoważonym drzewie poszukiwań). Algorytm wykonuje 2n+k kroków. Zatem jego złożoność wynosi O((n+k) log n). Wniosek. Znalezienie odpowiedzi na pytanie, czy w zbiorze S istnieje para przecina-jących się odcinków wymaga czasu O(n log n).

Szkic algorytmu Balabana Szkic algorytmu Balabana. Obszar, w którym występują odcinki podzielmy na pionowe pasy. Porządkiem odcinków względem pionowej prostej nazywamy kolejność ich punktów przecięć z prostą. Wykorzystujemy strukturę drzewa binarnego do opisu podziału na pasy. Schodami w danym pasie nazywamy maksymalny zbiór (niekoniecznie największy) nieprzecinających się odcinków, z których każdy łączy oba brzegi pasa. Po określeniu schodów w danym pasie, dzielimy pozostałe odcinki względem mediany ich końców wewnątrz pasa i znajdujemy schody w nowych pasach. Po dojściu do liści zawracamy i zliczamy w danym pasie punkty przecięć schodów z odcinkami analizowanymi na niższych poziomach oraz dodajemy informację o przecięciach tych odcinków.

Przykład. 2 1 3 2 1 Łącznie 10 przecięć.

Twierdzenie. Algorytm Balabana jest optymalnym algorytmem czułym na wynik. Jego złożoność czasowa wynosi O(n log n + k) i wymaga O(n) pamięci gdzie k oznacza liczbę przecięć odcinków.

Znajdowanie pary najbliższych punktów na płaszczyźnie. Problem: W zbiorze S zawierającym n punktów na płaszczyźnie znajdź parę wyznaczającą odcinek o najmniejszej długości. Problem ten można łatwo rozwiązać w czasie O(n2) badając wszystkie pary punktów. Wykorzystamy algorytm zamiatania w celu znalezienia rozwiązania problemu w czasie O(n log n).

Miotła poruszać się będzie wzdłuż osi x-ów. Punktami aktywnymi będziemy nazywać punkty z S znajdujące się w lewo-stronnie otwartym pasie X o szerokości równej najmniejszej odległości między dotychczas zamiecionymi punktami. Początkowo szerokość pasa jest nieskończona. Niech ix oznacza minimalny indeks punktu z X. Strukturą zdarzeń jest uporządkowana lista L punktów z S. Strukturą stanu będzie zrównoważone drzewo poszukiwań binarnych T przechowujące zbiór punktów aktywnych uporządkowanych względem współrzędnej y. Lemat. Punkty w pasie X można uporządkować względem współrzędnej y. Dowód. Ponieważ pas jest lewostronnie otwarty i ma szerokość równą najmniejszej odległości między dotychczas zamiecionymi punktami, więc żadne dwa punkty w pasie nie mogą mieć tej samej współrzędnej y-owej.

Algorytm. L := {p1, p2, ..... , pn}; T := puste ; dmin:= +; ix:= 1; while L   do v := FRONT(L); POP(L); while d(ix,v)  dmin do T := T – {pix}; ix:= ix+1; znajdź w T punkty odległe od v wzglę-dem współrzędnej y o mniej niż dmin, wybierz bliższy z nich (w) i oblicz odległość d (d := + w p.p.); T := T  {v}; if d < dmin then dmin := d; C := {v, w};

Lemat. W każdym kroku algorytmu badamy co najwyżej 5 par punktów. Twierdzenie. Dla danego zbioru n punktów na płaszczyźnie najbliższą parę punktów możemy znaleźć w czasie O(n log n). Dowód. Dla każdego zdarzenia wykonujemy stałą liczbę operacji, z których każda kosztuje co najwyżej O(log n). Ponieważ zdarzeń jest n, więc złożoność algorytmu wynosi O(n log n).

Dziękuję za uwagę.

Ćwiczenia 3. 1. Udowodnij, że każdy wielokąt umożliwia triangulację, nawet jeśli ma dziury. Co można powiedzieć o liczbie trójkątów w triangulacji ? 2. Udowodnij lub zaprzecz: Graf dualny triangulacji wielokąta monotonicznego jest zawsze łańcuchem, tzn. każdy węzeł tego grafu ma stopień 2. 3. Podaj algorytm, który w czasie O(n log n) oblicza przekątną dzielącą prosty wielokąt o n wierzchołkach na dwa wielokąty z co najwyżej 2n/3 +2 wierzchołkami w każdym z nich. 4. Niech P będzie prostym wielokątem o n wierzchołkach, który podzielono na monotoniczne części. Udowodnij, że suma liczby wierzchołków tych części jest O(n).

5. Niech S będzie zbiorem n trójkątów na płaszczyźnie 5. Niech S będzie zbiorem n trójkątów na płaszczyźnie. Brzegi trójkątów są rozłączne, ale jest możliwe, że trójkąt leży całkowicie wewnątrz drugiego trójkąta. Niech P będzie zbiorem n punktów na płaszczyźnie. Podaj algorytm działający w czasie O(n log n), który znajduje punkty leżące poza trójkątami. 6. Niech S będzie zbiorem n rozłącznych trójkątów na płaszczyźnie. Chcemy znaleźć zbiór n-1 odcinków o następujących własnościach: - każdy odcinek łączy punkty brzegowe dwóch trójkątów, - wnętrza odcinków są parami rozłączne i są one rozłączne z trójkątami, - Ciągi odcinków łączą wszystkie trójkąty każdy z każdym, tzn. z każdego trójkąta można dojść do dowolnego innego. Stwórz algorytm działający w czasie O(n log n). 7. Mając dany ciąg kolejnych krawędzi wielokąta prostego oblicz w czasie liniowym jego pole.

8. Niech  oznacza minimalną liczbę wielokątów wypukłych, na które można podzielić dany wielokąt (niekoniecznie przekątnymi). Niech r będzie liczbą kątów wewnętrznych wielokąta o rozwartości większej niż . Wtedy:  r/2 + 1    r +1. 9. Niech S będzie zbiorem n okręgów na płaszczyźnie. Opisz algorytm zamiatania obliczający wszystkie punkty przecięć okręgów. (okręgi mogą zawierać się jeden w drugim) 10. W każdym kroku algorytmu znajdowania najbliższej pary punktów badamy co najwyżej 5 par punktów.