Referat Algorytm Bresenhama

6
SPOŁECZNA WYŻSZA SZKOŁA PRZEDSIĘBIORCZOŚCI I ZARZĄDZANIA W ŁODZI WYDZIAŁ STUDIÓW MIĘDZYNARODOWYCH I INFORMATYKI KIERUNEK INFORMATYKA JACEK LEWIŃSKI Nr albumu: 50564 ALGORYTMY RYSOWANIA WYCINKA OKRĘGU W GRAFICE RASTROWEJ Przedmiot realizowany w ramach Projektu: „Modernizacja i rozwój systemu nauczania informatyki w Społecznej Wyższej Szkole Przedsiębiorczości i Zarządzania” współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego, Program Operacyjny Kapitał Ludzki

description

Referat z przedmiotu Grafika Komputerowa i wizualizacja. Algorytmy rysowania wycinka okręgu w grafice rastrowej.

Transcript of Referat Algorytm Bresenhama

Page 1: Referat Algorytm Bresenhama

SPOŁECZNA WYŻSZA SZKOŁAPRZEDSIĘBIORCZOŚCI I ZARZĄDZANIA

W ŁODZI

WYDZIAŁ STUDIÓW MIĘDZYNARODOWYCHI INFORMATYKI

KIERUNEK INFORMATYKA

JACEK LEWIŃSKINr albumu: 50564

ALGORYTMY RYSOWANIA WYCINKA OKRĘGU W GRAFICE RASTROWEJ

Przedmiot realizowany w ramach Projektu: „Modernizacja i rozwój systemu nauczania informatyki w Społecznej Wyższej Szkole Przedsiębiorczości i Zarządzania”

współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego, Program Operacyjny Kapitał Ludzki

Page 2: Referat Algorytm Bresenhama

ŁÓDŹ 2011Wstęp

Myśląc o współczesnych komputerach, serwerach, stacjach graficznych i podziwiając

ich potęgę niezmiernie rzadko uświadamiamy sobie, że wzrost ich możliwości w kreowaniu

naszego obecnego świata polega w znacznym stopniu nie tylko na wynajdowaniu coraz

nowszych technologii ale również na opracowywaniu matematycznych algorytmów

stanowiących podstawę pracy obliczeniowej sprzętu. Wiele algorytmów znamy od dość

dawna i stanowią one podstawę przeliczania punktów budujących obraz. Do takich

algorytmów należy Algorytm Bresenhama.

Algorytm służy do rasteryzacji krzywych 2D, czyli jak najlepszego przybliżania

matematycznych krzywych na siatce pikseli. Jego prosta implementacja umożliwia obliczenia

na liczbach całkowitych oraz zmiennoprzecinkowych. Najczęściej jednak wykorzystujemy te

pierwsze (źródło:[3]). Prostota jest siłą tego algorytmu. Główna pętla algorytmu wykorzystuje tylko

dwie operacje porównania i dodawania.

Algorytm rysowania wycinka okręgu

Przy rasteryzacji okręgu będziemy potrzebować tylko jego ośmiokrotnej symetrii.

Rasteryzacja będzie obejmowała tylko jeden oktant. Pozostałe otrzymamy poprzez odbicie

symetryczne tej jednej części okręgu.

Rysunek 1 Rasterowany oktet (źródło:[3])

Pętla algorytmu będzie wykonywać się na współrzędnej x; punktem początkowym

będzie „szczyt” okręgu o współrzędnych (0, r). Punktem końcowym będzie ten w którym

Page 3: Referat Algorytm Bresenhama

nachylanie stycznej przekroczy − 1. Jak wiadomo funkcja jednej zmiennej opisująca połówkę

okręgu ma postać

dlatego końcowa wartość współrzędnej x wyniesie

Nie ma potrzeby dzielenia przez pierwiastek z dwóch, a to dlatego, że f(x0) = x0, więc

współrzędna x będzie rosnąć od zera, a y maleć od r do chwili, aż zrówna się z x.

Rysunek 2 Rasteryzacja wycinka koła (źródło:[5])

Możemy teraz przystąpić do obliczeń przyrostów; dla formalności przypomnę równanie

uwikłane dla okręgu (przyjmuje ono wartości ujemne dla punktów z wnętrza okręgu)

Wartość początkowa d wynosi f(0 + 1, r − 0.5) = − r + 1.25 i tak jak w przypadku linii

pojawiła się wartość ułamkowa. Rozwiązanie jest podobne — przemnożenie d przez 4.

Pamiętając, że y maleje, obliczamy różnice pierwszego rzędu:

deltaA = f(x + 2, y − 0.5) − f(x + 1, y − 0.5) = 2x + 3,

deltaB = f(x + 2, y − 1.5) − f(x + 1, y − 0.5) = 2x + 2y + 5.

Page 4: Referat Algorytm Bresenhama

Jak widać zależą one od chwilowych wartości współrzędnych x i y. Zostaną więc policzone

różnice drugiego rzędu.

Wartości początkowe w punkcie (0, r) — bez przesunięcia o wektor [1, 0.5] — wynoszą:

deltaA(0, r) = 3,

deltaB(0, r) = − 2r + 5.

Przy wyborze punktu A wzrasta wyłącznie współrzędna x, więc:

deltaA(A) = deltaA(x + 1, y) − deltaA(x, y) = 2,

deltaB(A) = deltaB(x + 1, y) − deltaB(x, y) = 2.

natomiast po wybraniu B maleje dodatkowo y:

deltaA(B) = deltaA(x + 1, y − 1) − deltaA(x, y) = 2

deltaB(B) = deltaB(x + 1, y − 1) − deltaB(x, y) = 4

Jak widać przyrosty drugiego rzędu już nie zależą od x ani y.

Pamiętamy, że d zostanie przemnożone przez 4.

Sposób wybierania odpowiednich pikseli przedstawia rysunek:

Rysunek 3 Rasteryzacja wycinka koła (źródło:[4])

Implementacja Algorytmu Bresenhama

void plotCircle(int xm, int ym, int r){ int x = -r, y = 0, err = 2-2*r; /* II. Quadrant */ do { setPixel(xm-x, ym+y); /* I. Quadrant */ setPixel(xm-y, ym-x); /* II. Quadrant */ setPixel(xm+x, ym-y); /* III. Quadrant */ setPixel(xm+y, ym+x); /* IV. Quadrant */ r = err; if (r > x) err += ++x*2+1; /* e_xy+e_x > 0 */ if (r <= y) err += ++y*2+1; /* e_xy+e_y < 0 */ } while (x < 0);}

Page 5: Referat Algorytm Bresenhama

Implementacja Algorytmu Bresenhama (źródło:[6])

BIBLIOGRAFIA

1. J.E. Bresenham, Algorithm for computer control of a digital plotter, IBM Systems Journal, vol. 4, no. 1, 1965.

2. M. Jankowski, Elementy grafiki komputerowej, WNT, 2006.3. W. Muła, Algorytm Bresenhama - http://0x80.pl/articles/bresenham.html4. dr Przybyszewski K., wykłady w formacie pdf

http://www.kursy.jpkps.pl/login/index.php stan na dzień 10.01.2011.5. Wikipedia http://en.wikipedia.org/wiki/Midpoint_circle_algorithm6. The Beauty of Bresenham's Algorithm http://free.pages.at/easyfilter/bresenham.html