WYKŁ 3 WYPŁNINI OSZRÓW. Wypełnianie wieloboku Zasada parzystości: Prosta, która nie przechodzi przez wierzchołek przecina wielobok parzystą ilość razy. Plan wykładu: Wypełnianie wieloboku Wypełnianie konturu zadanego w postaci obrazu Pewne problemy związane z wypełnianiem Rysowanie pogrubionych tworów pierwotnych położenie przecięć położenie 3 przecięcia położenie 3 przecięć położenie? przecięć 3 lgorytm przeglądania linii ( (scan line algorithm) Założenie: any jest wielobok ( bez krawędzi poziomych ) opisany jako zbiór kolejnych krawędzi. krawędź y max Opis geometrii wieloboku x min x max 0 0 0 Podstawowa zasady działania algorytmu: Przesuwać poziomą linię skanującą od dołu do góry. la danego położenia linii należy rysować punkty pomiędzy poszczególnymi parami krawędzi. 0 0 0 y = 0 la linii skanującej w położeniu y = 0 należy wypełnić punkty (narysować poziome odcinki) pomiądzy krawędziami i oraz i.
Opis algorytmu: Krok 0 Utworzyć globalną tablicę krawędzi (T). Krok Ustawić y na najmniejszej wartości współrzędnej y z globalnej tablicy krawędzi (T), czyli y dla pierwszej niepustej grupy krawędzi Krok Wyzerować aktywną tablicę krawędzi (T). Przenieść z grupy y tablicy globalnej (T) do tablicy aktywnej (T) te krawędzie, dla których = y i posortować je ze względu na x. Wypełnić piksele w linii y, wykorzystując pary x z tablicy aktywnej (T). Usunąć z tablicy aktywnej (T) te krawędzie, dla których y = max. y = y max Zwiększyć y o (następna linia). la każdej pary krawędzi, która nie jest pionowa wyliczyć i wstawić do tablicy aktywnej (T) nowe wartości x. Krok 3 Powtarzać tak długo, dopóki tablica globalna (T) i tablica aktywna (T) nie będą puste. Tablica globalna (T) krawędzie Tablica aktywna (T) Krok 0 - Tworzenie globalnej tablicy krawędzi (T) 0 -/ * 0 * 0 * -/ * y max x /a /3 * / * minimum minimum x min minimum y max minimum x max 0 0 0 - przypisanie do grupy - porządkowanie w grupie - porządkowanie w grupie max - porządkowanie w grupie Krok Ustawiamy y na najmniejszej wartości współrzędnej y z globalnej tablicy krawędzi. y = Krok Zerujemy aktywną tablicę krawędzi (T). Krok 3 Przenosimy z grupy y tablicy globalnej (T) do tablicy aktywnej (T) te krawędzie, dla których = y i sortujemy krawędzie ze względu na x. (T) ymin 0 -/ * / * ymax x /a
Wypełniamy piksele w linii y, wykorzystując pary x z tablicy aktywnej (T) i zasadę parzystości. 0 0 0 y = Usuwamy z tablicy aktywnej (T) te krawędzie, dla których, y = y max ( brak takich krawędzi ) Zwiększamy y o ( o ( y = ). la każdej pary krawędzi, która nie jest pionowa wyliczamy i wstawiamy do tablicy aktywnej (T) nowe wartości x. Sposób obliczania nowych wartości x ; (T) x ( y ) = x( y ) + a a) ( algorytm ) b) algorytm resenhama ymin -/ * 0 / * ymax x /a Koniec pierwszego przebiegu dla kroku 3 W kolejnym przebiegu kroku 3 uzyskamy rysunek : la y = rysunek wygląda następująco: 0 0 0 y = Postępujemy analogicznie aż do osiągnięcia y = 0 0 0 y = la krawędzi zachodzi y = y max ( koniec krawędzi ). Usuwamy z tablicy aktywnej (T). Przenosimy do tablicy aktywnej z tablicy globalnej (T) krawędź, dla której = y. Porządkujemy tablicę (T) ze względu na x. Tablica aktywna przybiera postać: 3
(T) ymin 0 * / * ymax x /a Kontynuujemy wypełnianie aż osiągniemy koniec krawędzi występującej w tablicy aktywnej 0 (T), lub początek krawędzi z tablicy globalnej (T). W rozważanym przypadku dla y =, osiągamy koniec krawędzi. Uzyskany efekt wypełnienia pokazuje rysunek. 0 0 0 Po usunięciu z tablicy aktywnej (T) krawędzi, zwiększeniu y i przeniesieniu z tablicy globalnej (T) krawędzi tablica aktywna przyjmuje postać: (T) 0 * 0 * Wypełniając dalej, osiągamy wartość y =.Rysunek wygląda Wypełniając dalej, osiągamy wartość następująco: 0 0 0 Stwierdzamy, że dla y = para krawędzi i spełnia Stwierdzamy, że dla para krawędzi i spełnia warunek = y W związku z tym przenosimy krawędzie i do tablicy aktywnej (T), która po uporządkowaniu elementów ze względu na x wygląda tak: (T) 0 * -/ * /3 * 0 * Tablica globalna (T) staje się pusta. Kontynuujemy wypełnianie między parami krawędzi z tablicy (T), aż do osiągnięcia y =. Uzyskujemy efekt jak na następnym rysunku: 0 0 0 Usuwamy z tablicy (T) parę krawędzi,. (T) /3 * 0 *
Wypełniamy następną linię i osiągamy końce krawędzi i. Usuwany krawędzie z tablicy T. Tablica (T) jest już pusta, czyli kończymy wypełnianie. Ostateczny efekt pokazuje rysunek. 0 0 0 Problem krawędzi poziomych: Na początku, przyjęto założenie, że wypełniany wielobok nie ma krawędzi poziomych. Jak pozbyć się tego założenia? G Rozwiązanie: Pomijanie krawędzi poziomych w tablicy (T). Przykłady: - w tablicy (T) znajdzie się J i, - w tablicy (T) znajdzie się IJ i, 3 - w tablicy (T) znajdzie się IJ i, - w tablicy (T) znajdzie się GH i, J I H 3. Wypełnianie konturu zadanego jako obraz Prosty algorytm wypełniania konturu wypukłego Założenie: any jest kontur w postaci zbioru różnych od tła pikseli i punkt leżący wewnątrz konturu. x 0 Przypadek gdy kontur jest wypukły: la dowolnej pary punktów x, x leżących wewnątrz konturu odcinek, którego końcami są te punkty leży w całości wewnątrz konturu. x x wypełniamy w linii poczynając od punktu startowego, aż do prawej granicy konturu, znajdujemy " niższy " punkt konturu i wypełniamy linię do lewej granicy konturu, powtarzamy tak długo, dopóki możemy znaleźć punkt " niższy ", wracamy do punktu startowego i kontynuujemy proces poruszając się " w górę ".
Przypadek gdy kontur nie jest wypukły: lgorytm wypełniania przez spójność 3. Pewne problemy wypełniania Problem brzegu wieloboku: Trzeba narysować kilka wypełnionych wieloboków o wspólnych krawędziach. Każdy z wieloboków jest wypełniony innym kolorem. ziarno ziarno sąsiad W W W W W W. Wypełniane jest ziarno,. Sprawdzani są kolejno sąsiedzi, jeżeli sprawdzany sąsiad nie należy do konturu, przyjmowany jest jako nowe ziarno i następuje powrót do punktu. W piksel Jak rysować obrazy krawędzi wieloboków? W Problem wieloboków "bardzo wąskich" : W W W W W W W W piksele kandydaci piksele wypełnione zęsto stosowane rozwiązanie: rysować piksele leżące wewnątrz wieloboku, ale nie na brzegu, rysować piksele należące do lewej krawędzi, rysować piksele należące do dolnej krawędzi. W Zastosowano poprzednio opisaną konwencję rysowania. Obraz wieloboku W składa się tylko z dwóch punktów. rak zadawalającego rozwiązania przy tym sposobie rysowania. Należy zastosować wypełnianie wielotonowe. W
. Rysowanie pogrubionych tworów pierwotnych Metoda powielania pikseli : Metoda powielania pikseli dla krzywej: rysunek podstawowy piksele powielone piksele powielone rysunek podstawowy la każdego piksela rysunku podstawowego, rysowane są dodatkowe piksele pogrubiające. gdy a < w kolumnie, w przypadku przeciwnym w wierszu. Zaleta - Wada - prosty algorytm grubość rysunku dla różnych fragmentów krzywej jest różna Metoda prostokątnego pióra: ślad pióra rysowana krzywa ślad pióra porusza się wzdłuż krzywej piksel rysunku podstawowego znajduje się w centrum śladu Zaleta - lepsze niż w poprzedniej metodzie rysunki Wada - występuje powielanie pikseli