Wypełnianie obszaru.

Slides:



Advertisements
Podobne prezentacje
Funkcje tworzące są wygodnym narzędziem przy badaniu zmiennych losowych o wartościach całkowitych nieujemnych. Funkcje tworzące pierwszy raz badał de.
Advertisements

Sympleksy n=2.
Równanie różniczkowe zupełne i równania do niego sprowadzalne
Grażyna Mirkowska PJWSTK, 10 stycznia 2001
CIĄGI.
Grażyna Mirkowska PJWSTK 15 listopad 2000
JEJ WŁASNOŚCI ORAZ RODZAJE
Funkcje Barbara Stryczniewicz.
Wykład 06 Metody Analizy Programów System Hoare
Wykład 6 Najkrótsza ścieżka w grafie z jednym źródłem
Geograficzne bazy danych
Przygotowały: Jagoda Pacocha Dominika Ściernicka
W Krainie Czworokątów.
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,
ALGORYTMY I STRUKTURY DANYCH
Filip Starzyński Grafika 2d - Podstawy Filip Starzyński
WEKTORY Każdy wektor ma trzy zasadnicze cechy: wartość (moduł), kierunek i zwrot. Wartością wektora nazywamy długość odcinka AB przedstawiającego ten wektor.
Geometria obliczeniowa Wykład 1
ZŁOŻONOŚĆ OBLICZENIOWA
ALGORYTMY GEOMETRYCZNE.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
12 grudnia 2001Matematyka Dyskretna, Elementy Kombinatoryki G.Mirkowska, PJWSTK 1 Wykład 11 Elementy Kombinatoryki.
Eliminacja powierzchni niewidocznych Wyznaczanie powierzchni widocznych Które powierzchnie, krawędzie i punkty są widoczne ze środka rzutowania (albo wzdłuż.
Pola Figur Płaskich.
Geometria obrazu Wykład 6
Metody matematyczne w Inżynierii Chemicznej
Edytor Graficzny Paint
Modele (graficznej reprezentacji) danych przestrzennych
Figury w otaczającym nas świecie
Biomechanika przepływów
,, W KRAINIE CZWOROKĄTÓW ,, Adam Filipowicz VA SPIS TREŚCI
Zbiór do posortowania mieści się w pamięci
TWIERDZENIE O STYCZNEJ I SIECZNEJ
Geometria obliczeniowa Wykład 8
AUTOMATYKA i ROBOTYKA (wykład 6)
Geometria obliczeniowa Wykład 3
Stabilność Stabilność to jedno z najważniejszych pojęć teorii sterowania W większości przypadków, stabilność jest warunkiem koniecznym praktycznego zastosowania.
Figury płaskie I PRZESTRZENNE Wykonała: Klaudia Marszał
Opracowanie: mgr Barbara Benisz
Opracowanie Dorota Libera
Grafika komputerowa Wykład 6 Podstawowe algorytmy grafiki 2D
FIGURY GEOMETRYCZNE.
Teoria sterowania 2011/2012Stabilno ść Kazimierz Duzinkiewicz, dr hab. in ż. Katedra In ż ynierii Systemów Sterowania 1 Stabilność Stabilność to jedno.
Wykład 6. Redukcje odwzorowawcze
Sygnały cyfrowe i bramki logiczne
Przykładowy algorytm geometryczny (geometria płaska)
K o s t k a i k a R u b.
Funkcje Barbara Stryczniewicz Co z tym zrobisz Ćwiczenia wstępne Opis funkcji,elementy Własności funkcji 4 Sposoby przedstawiania funkcji 5.
Aplikacje internetowe
EDYTOR GRAFIKI PAINT - podstawy pracy.
Algorytmy i Struktury Danych
Grafika i komunikacja człowieka z komputerem
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.
Grafika Komputerowa i wizualizacja
Metody matematyczne w inżynierii chemicznej Wykład 3. Całkowanie numeryczne.
Grafika i komunikacja człowieka z komputerem
Zagadnienia AI wykład 2.
Grafika i komunikacja człowieka z komputerem
WYKŁAD 06 Programowanie dynamiczne Grażyna Mirkowska.
Geometria obrazu Wykład 6
WIELOKĄTY Karolina Zielińska kl.v Aleksandra Michałek kl v
Pojęcia podstawowe c.d. Rachunek podziałów Elementy teorii grafów
każdy rysunek powinien być opatrzony
FIGURY PŁASKIE.
Figury płaskie.
Co to jest i gdzie występuje
Teoria sterowania Wykład /2016
Wypełnianie obszaru.
Grafika Komputerowa i wizualizacja
Zapis prezentacji:

Wypełnianie obszaru

Wprowadzenie W wielu praktycznych zadaniach problemem jest wypełnienie obszaru zadanym kolorem lub wzorcem. Dzieje się tak w systemach interaktywnych, gdzie użytkownik myszą, piórem świetlnym lub przy pomocy tabliczki graficznej rysuje brzeg obszaru, wskazuje jego wnętrze i wybiera kolor lub wzorzec jakim on ma być wypełniony. W wielu innych zadaniach obszar może być dany w postaci wieloboku, a jego wierzchołkami są współrzędne rzeczywiste (nie ekranowe).

Wprowadzenie Rozróżnia się więc następujące sytuacje: wypełniany obszar jest pewnym zbiorem pikseli o ustalonych własnościach (np. o danym kolorze) - jest to przypadek dyskretnym, wypełniany obszar dany jest w postaci wieloboku (jest on podany analitycznie przez krzywą zamkniętą składającą się odcinków i ew. łuków - jest to przypadek ciągły.

Przypadek dyskretny W tym przypadku wprowadza się następujące definicje: Zbiór pikseli jest spójny, gdy od dowolnego piksela z tego zbioru możemy przejść do każdego innego przez piksele sąsiednie. Rozważamy zbiór czterospójny, gdy za piksele sąsiednie są uważane piksele leżące odpowiednio: na górze, na dole, na lewo i na prawo od rozważanego piksela. Jeżeli dodatkowo rozważamy sąsiedztwo po kierunkach ukośnych to taki zbiór nazywamy ośmiospójnym. Ziarnem nazywać będziemy dowolny piksel leżący wewnątrz obszaru spójnego.

Przypadek dyskretny - definicje Najczęściej rozważanym przypadkiem jest przypadek wnętrza czterospójnego i brzegu ośmiospójnego, rys. obok. Dopuszczamy także istnienie dziur (wysp) wewnątrz obszaru – będą to podobszary ograniczone ośmiospójnymi brzegami pikseli w zadanym kolorze.

Algorytm „przez sianie” Najprostszy algorytm można skonstruować wykorzystując rekurencję, która polega na tym, że znając ziarno można „siać” kolor wnętrza (oznaczamy go jako Cn) we wszystkich czterech kierunkach (bo wnętrze jest czterospójne). Kolor brzegu oznaczamy jako Cb. Algorytm można zapisać następująco w postaci procedury (funkcja kolor(x,y) oznacza kolor badanego piksela, procedura setcolor(x,y,cn) ustawia kolor cn w zadanym pikselu):

Algorytm w postaci pseudokodu procedure fill4(x,y,cb,cn) /* x,y -współrzędne piksla, */ /* cb,cn -kolor brzegu i wnętrza */ begin if color(x,y)<>cb and color(x,y)<>cn then begin setcolor(x,y,cn); fill4(x,y-1,cb,cn); fill4(x,y+1,cb,cn); fill4(x-1,y,cb,cn); fill4(x+1,y,cb,cn); end;

Przykład działania algorytmu Przykład działania procedury dla prostokąta: prostokąt(0,0,10,10), ziarno (5,5). Fill4(5,5,cb,cn) Fill4(5,4,cb,cn) Fill4(5,3,cb,cn) Fill4(5,2,cb,cn) Fill4(5,1,cb,cn) Fill4(5,0,cb,cn) – powrót Fill4(5,1,cb,cn) – powrót Fill4(4,1,cb,cn) Fill4(4,0,cb,cn) ....

Uwagi Algorytm ten można praktycznie stosować jedynie dla niewielkich obszarów. W przypadku większych obszarów następuje szybko przepełnienie stosu. Algorytm jest także bardzo kosztowny, gdyż pojedynczy piksel bada się kilka razy.

Nowa idea Efektywniejsze metody otrzymujemy wtedy, gdy operujemy nie na pojedynczych pikselach ale na ich grupie. Najczęściej są to poziome segmenty definiowane jako ciągi leżące wewnątrz obszaru pikseli sąsiadujących ze sobą w poziomie, są one ograniczone z prawej i z lewej strony pikselami brzegowymi (przykładem są odcinki).

Nowa idea Schemat postępowania w takich przypadkach jest następujący: wyznaczamy segment początkowy zawierający dane ziarno, wyznaczamy segmenty sąsiadujące z segmentem początkowym, mogą się one znajdować nad segmentem początkowym lub pod. W przypadku kilku segmentów leżących nad lub po układamy je na stosie np. wg. kolejności od lewej do prawej, postępowanie powtarzamy dla kolejnych elementów leżących na stosie.

Nowa idea – praktyczna realizacja Typowym algorytmem dla rozważanej klasy jest algorytm Smitha, przykład na rys. na następnym slajdzie: mamy dane ziarno, segmentem jest linia, wypełniamy segment, wyznaczamy początkowe współrzędne pikseli sąsiednich (leżących najbardziej na lewo) nie wypełnionych jeszcze nowym kolorem; wyznaczone współrzędne segmentu i ewentualnie jego długość odkładamy na stos, piksel, którego adres leży na wierzchołku stosu bierzemy jako nowe ziarno, powtarzamy do momentu, aż stos będzie pusty, kolejnymi ziarnami są współrzędne ze stosu.

Przykład Przykład działania algorytmu Smitha pokazuje rysunek poniżej; x -jest ziarnem początkowym, piksele 1,2,...,6 są kolejnymi ziarnami.

Algorytmy wektorowe - przypadek ciągły Dalej zajmiemy się przypadkiem ciągłym. W tym wariancie podstawowym elementem jest wielobok. Rozważmy szczególny przypadek wieloboku jakim jest trapez, rys. Wierzchołki na ogół nie są całkowite, a rzeczywiste, więc należy je zaokrąglić. Algorytm można zapisać następująco A=(x1,y1), B=(x2,y2), C=(x3,y3), D=(x4,y4): Niech ymin=round(y4); ymax=round(y1); cl=(x4-x1)/(y4-y1); cp=(x3-x2)/(y3-y2); dla y=ymin,ymin+1,..., ymax wyznacz punkt przecięcia linii poziomej y z x=x1+(y-y1)*cl i z x=x2+(y-y2)*cp; wypełnij nowym kolorem piksele leżące na tej linii od round(xl) do round(xp),

Dowolny wielokąt Zadanie wypełniania dowolnego wielokąta można sprowadzić do przypadku trapezu, lub do szczególnego przypadku trapezu jakim jest trójkąt. Algorytmem, który to wykorzystuje jest algorytm Brassela i Fegeasa, który jest stosowany do rozkładu wielokąta na sumę trapezów. Oprócz zagadnień związanych z wypełnianiem ten algorytm stosowany jest w rysowaniu obiektów oświetlonych trójwymiarowych lub gdy wielokrotnie wypełniamy obszary tego samego kształtu ale różnych rozmiarów (np. czcionki tego samego kroju). W algorytmie wykorzystywane jest pojęcie stalaktytu, stalagmitu i wierzchołka normalnego. Stalaktytem jest taki wierzchołek yk, dla którego zachodzi yk-1>yk, yk+1>yk. Natomiast regularnym jest ten wierzchołek, który nie jest ani stalaktytem ani stalagmitem. Zakładamy ponadto, że wielokąt jest zwykłym wielokątem, tzn. jego krawędzie nie przecinają się oraz przyjmujemy, że nie ma krawędzi poziomych.

Dowolny wielokąt Algorytm jest postaci (narzucającym się sposobem jest poprowadzenie linii przez wszystkie wierzchołki, otrzymuje się wtedy dużo trapezów): Dane: Wi=(xi,yi), i=1,...,n, uporządkowane odwrotnie do ruchu wskazówek zegara, (dla krawędzi WiWi+1 to co jest po lewej stronie należy do wielokąta.

Algorytm posortuj wierzchołki według rosnących wartości y, i=1,..,n, yi1<yi2,...<yin, dla i=i1, i2, ..., in niech lista LO zawiera odcinki (P1,P2), (P3,P4),..., (P2m-1,P2m), niech LK zawiera krawędzie (Wk1,Wk2), (Wk3,Wk4),... Wyznaczamy punkty przecięcia P1’, P2’,..., prostej y=yi z krawędziami LK, dołączamy trapezy (P1,P2;P1’,P2’), ..., (P2m-1,P2m;P2m-1’,P2m’) do wynikowych trapezów, Klasyfikujemy wierzchołek Wi i rozważamy: Wi jest regularny - jeśli yi-1<yi<yi+1 to wymieniamy w LK krawędź (Wi-1,Wi) na (Wi,Wi+1), a jeżeli zachodzą nierówności przeciwne to następuje wymiana odwrotna. Przyjmujemy nową LO={(p1’,P2’),(P3’,P4’),...,(P2m-1’,P2m)}, Wi jest stalaktytem (obydwa wierzchołki mają składowe większe niż yi, a dwu krawędzi, których jednym z końców jest Wi=(xi,yi) nie ma w LK). Modyfikujemy listę przecięcia P1’, P2’,..., P2m’, wstawiając do niej dwukrotnie wierzchołek Wi w takie miejsce, by były spełnione nierówności xj’<xi<xj+1’. Otrzymany ciąg P1’, P2’,...,Pj’Wi,Wi,Pj+1’,...,P2m’ oznaczamy jako P1”,P2”,...,P2m+2” i jako nową listę LO przyjmujemy (P1”,P2”), ..., (P2m+1”,P2m+2”). Wstawiamy krawędzie (Wi-1,Wi) i (Wi,Wi+1) do LK w miejsce określone kolejnością punktów przecięcia w nowej LO. Wi jest stalagmitem (Oba wierzchołki leżą poniżej Wi, a więc krawędzie (Wi-1,Wi) i (Wi,Wi+1) są już elementami listy LK i stąd wśród punktów P1’, P2’, ...., P2m’ przecięcia prostej y=yi z krawędziami LK występuje dwukrotnie wierzchołek Wi. Usuwamy te punkty, a pozostałe nazywamy P1”, P2”,..., P2m-2” i uaktualniamy LO jako {(P1”,P2”),..., (P2m-3”,P2m-2”)}. Z listy LK usuwamy krawędzie (Wi-1,Wi) i (Wi,Wi+1). next i LO i LK są roboczymi strukturami danych. LO zawiera odcinki linii poziomych leżące wewnątrz wielokąta, a LK zawiera krawędzie boczne trapezów.

Okienkowanie i obcinanie W zastosowaniach elementy rysunku definiowane są w rzeczywistym układzie współrzędnych. Podczas przenoszenia na urządzenie graficzne następuje przejście od układu rzeczywistego do układu urządzenia graficznego. Można wtedy określać, jaki fragment rysunku ma być zobrazowany, oraz jak mają być usytuowane i jaka ma być ich wielkość. Wykonujemy wtedy dwie rodzaje operacji: okienkowanie, czyli odwzorowanie obszaru określonego we współrzędnych rzeczywistych na obszar zdefiniowany we współrzędnych danego urządzenia graficznego oraz obcinanie, czyli wyznaczenie elementów rysunku, leżących wewnątrz okna. Oknem nazywamy obszar w rzeczywistej przestrzeni, a widokiem nazywamy obszar obrazu na urządzeniu graficznym. Najczęściej oba prostokąty mają boki równoległe do osi układu. Okno określone jest wtedy liczbami Xmin, Xmax, Ymin, Ymax, a widok xmin, xmax, ymin, ymax.

Okienkowanie Transformacja operacji okienkowania jest postaci: x=xmin+sx(X-Xmin), y=ymin+sy(Y-Ymin), gdzie odwzorowuje okno na cały widok. Składa się ona z następujących etapów: Xi’=Xi-minXi, Xi”=Xi/maxXi’, Xi”’= Xi”(xmax-xmin) Xi””=xmin+ Xi”’.

Okienkowanie bez deformacji Na ogół sx<>sy i wtedy następuje deformacja rysunku. Możemy deformacji uniknąć wprowadzając zależności: dla sx<sy x=xmin+sx(X-Xmin), a dla sx>sy y=ymin+sy(Y-Ymin).

Obcinanie Natomiast w operacji obcinania będziemy zajmowali się wyznaczeniem elementów rysunku leżących w prostokątnym oknie. Wykorzystywane są wtedy algorytmy wyznaczania czy dany punkt leży wewnątrz dowolnego wielokąta oraz algorytmy obcinania odcinka. Przyjmujemy, że okno, do którego obcinamy punkty i odcinki, będzie zdefiniowany nierównościami: xmin<=x<=xmax oraz ymin<=y<=ymax.

Algorytm Cohena-Shuterlanda Jeżeli współrzędne danego punktu P spełniają te nierówności, to leży on już wewnątrz okna. W przypadku odcinka zadanie jest trudniejsze. Zostaną podane dwie metody. Pierwsza to algorytm Cohena-Shuterlanda. W algorytmie Cohena-Shuterlanda każdemu końcu odcinka przypisujemy czterobitowy kod, bity są numerowane od prawego: kod(P)=b4 b3 b2 b1 i zachodzi: b1=1 gdy P leży na lewo od okna, b2=1 gdy P leży na prawo od okna, b3=1 gdy P leży poniżej okna, b4=1 gdy P leży powyżej okna, a w przeciwnym przypadku bity mają wartość zero.

Algorytm Cohena-Shuterlanda Podane wyżej bity wyznacza się bardzo łatwo, gdyż b1 jest bitem znaku x-xmin, b2 jest bitem znaku x-xmax, b3 jest bitem znaku y-ymin, a b4 jest bitem znaku y-ymax. Jeżeli punkt leży wewnątrz okna to kod(P)=0000. Jeżeli odcinek leży wewnątrz okna, to kod(P1)=0000 i kod(P2)=0000. Jeżeli kod(P1) AND kod(P2)<>0, to np. gdy końce P1 i P2 leżą na lewo od okna to pierwsze bity (b1) są równe jeden. Jeżeli kod(P1) AND kod(P2)=0, to odcinek P1P2 może ale nie musi przecinać okno. Algorytm Cohena-Shuterlanda polega na tym, że koniec odcinka o kodzie niezerowym jest zastępowany punktem przecięcia badanego odcinka z prostą zawierającą jeden z boków odcinka, co powoduje odrzucenie fragmentu odcinka leżącego poza oknem. Następnie pozostała część odcinka jest obcinana prostymi zawartymi w pozostałych bokach.

Algorytm Cohena-Shuterlanda Dane P1=(x1,y1), P2=(x2,y2), xmin, xmax, ymin, ymax, (*) oblicz kod(P1) i kod(P2); jeśli kod(P1)=kod(P2)=0000, to odcinek P1P2 leży wewnątrz okna a w przeciwnym razie jeśli kod(P1) AND kod(P2) <> 0000 to odrzuć cały odcinek początkowy; w przeciwnym razie jeśli kod(P1)=0000 to zamień za sobą punkty P1 i P2 oraz ich kody; jeśli b1=1 to y1=y1+(xmin-x1)*(y2-y1)/(x2-x1); x1=xmin w przeciwnym razie jeśli b2=1, to y1=y1+(xmax-x1)*(y2-y1)/(x2-x1); x1=xmax w przeciwnym razie, jeśli b3=1, to x1=x1+(ymin-y1)*(x2-x1)/(y2-y1); y1=ymin jeśli b4=1, to x1=x1+(ymax-y1)*(x2-x1)/(y2-y1); y1=ymax wróć do (*).