Download as pdf or txt
Download as pdf or txt
You are on page 1of 5

WYKŁAD 2

Opisz algorytm przyrostowy:

Kroki:

1) obliczenie nachylenia odcinka m = Δy/Δx


2) zwiększanie wartości x z krokiem 1 zaczynając od lewej
strony
3) obliczenie yi = m(xi – x0) + y0 dla każdego xi
4) wyświetlenie piksela w punkcie (xi , Round(yi))

Eliminacja operacji mnożenia:

yi+1 = m(xi+1 – x0) + y0 =


= m(xi + 1 – x0) + y0 = m + m(xi – x0) + y0
ponieważ: yi = m(xi – x0) + y0
yi+1 = m + yi
Pseudokod:

void Line(int x0, int y0, int x1, int y1) {


int x;
float dy, dx, y, m;
dy = y1 – y0;
dx = x1 – x0;
m = dy / dx;
y = y0;
for(x = x0;x <= x1;x++) {
WritePixel(x, (int)(y+0.5));
y += m;
}
}

Zalety:
-prostota
- łatwość implementacji
Wady:
- wydajność (arytmetyka na liczbach zmiennoprzecinkowych)
Opisz równanie okręgu:

Wzory:

Pozycja piksela:

x = xC + R * cos(α)
y = yC + R * sin(α)

Krok:

Δα ≈ 1 / R

Ilośd (warunek kooca) kroków:

0 ≤ α < 2Π

Pseudokod:

void circ(int xc, int yc, int R) {


float a, step;
int x, y;

step = 1.0/R; // Jeden krok pętli

for(a=0;a < 2*M_PI;a += step) {


x = xc + R*cos(a) + 0.5; // Zaokrąglone X
y = yc + R*sin(a) + 0.5; // Zaokrąglone Y
WritePixel(x, y);
}
}ównanie okręgu

Opisz różnice w algorytmie czterokrotnej i ośmiokrotnej symetrii.


Aby zyskad na wydajności często stosuje się algorytm czterokrotnej
lub ośmiokrotnej symetrii który jest w stanie przyśpieszyd proces
rysowania okręgu cztero lub ośmiokrotnie. A to za sprawą redukcji pętli
warunku kooca który teraz ma postad:

Dla czterokrotnej symetrii:


0 ≤ α < Π/2
Dla ośmiokrotnej symetrii:
0 ≤ α < Π/4
Redukcja pętli jest możliwa dzięki odpowiednim przekształceniom pikseli
znajdujących się na rysowanym okręgu.

Ośmiokrotna symetria

Metody pogrubiania prymitywu:

Pogrubione prymitywy (punkty, odcinki, elipsy) to takie


prymitywy, których grubośd krawędzi jest większa (lub
wydaje się większa) od 1 piksela.

Powielanie pikseli:
Dla każdego wyznaczonego punktu prymitywu rysuje się
więcej niż jeden piksel. Dla odcinków o nachyleniu od -1 do 1 (od 0
do 45 stopni od poziomu) powiela się piksele w osi Y, dla
pozostałych w osi X.

Ruchome pióro:
Dwuwymiarowe pióro (prostokąt, koło), którego róg lub
środek porusza się wzdłuż rysowanego konturu.

Przez wypełnianie:
Metoda polega na narysowaniu dwóch kopii prymitywu w pewnej
odległości od siebie i wypełnianiu przestrzeni między nimi.

Co to jest obcinanie?
Obcinanie – algorytm określający widocznośd punktów
lub prymitywów geometrycznych wewnątrz określonego
obszaru 2D, zazwyczaj prostokąta
Opisz algorytm obcinania punktów.

Aby stworzyd prostokąt obcinania dla punktów wystarczy


sprawdzid pozycję punktu(x, y) i jeśli są spełnione poniższe zależności
narysowad punkt.

y p≤y≤yk
x p≤x≤xk

Opisz algorytm obcinania odcinków.

Aby stworzyd prostokąt obcinania dla odcinków należy zastosowad


algorytm Cohena-Sutherlanda.

Opis poszczególnych bitów:


● bit 1 – bit znaku dla (ymax – y)
● bit 2 – bit znaku dla (y – ymin)
● bit 3 – bit znaku dla (xmax – x)
● bit 4 – bit znaku dla (x – xmin)

Algorytm obcinania:
Początkowe i koocowe kody odcinka:
● jeżeli obydwa kody są zerowe, odcinek leży w całości
wewnątrz prostokąta;
● jeżeli iloczyn logiczny (AND) kodów punktów koocowych
jest różny od zera, odcinek można w całości odrzucid;
Opisz algorytm obcinania wielokątów.

Aby stworzyd prostokąt obcinania dla wielokątów należy użyd algorytmu


Sutherlanda-Hodgmana jest analitycznym algorytmem obcinania, który
znajduje częśd wspólną dwóch wielokątów, przy czym wielokąt obcinający musi
byd wypukły (wielokąt obcinany może byd wypukły lub niewypukły); wielokąty
są dane jako ciągi wierzchołków.

You might also like