Laboratorium grafika2D 2


Laboratorium nr 2 1/3
Grafika Komputerowa 2D
Instrukcja
laboratoryjna Temat: Rysowanie odcinka algorytmem przyrostowym
Przygotował: dr inż. Grzegorz Aukawski, mgr inż. Maciej Lasota
2
1) Podstawowy algorytm przyrostowy
1.1) Kroki algorytmu
"y
(1) obliczenie nachylenia m = ;
"x
(2) zwiększenie wartości x o 1 zaczynając od punktu z lewej strony;
(3) obliczenie yi = m(xi - x0 ) + y0 dla każdego xi ;
(4) wyświetlenie piksela w punkcie ( xi ,Round( yi )).
gdzie: Round  zaokrąglenie od 0,5 w górę
Operację mnożenia można wyeliminować:
yi+1 = m(xi+1 - x0 ) + y0 = m(xi + "' x - x0 ) + y0 = m"' x + y0
jeżeli: "' x = 1, to yi+1 = yi + m
Jeżeli przyrosty współrzędnej x będą jednakowe, współrzędną y trzeba za każdym
przejściem pętli zwiększyć o m.
Jeżeli |m| > 1, to krok w kierunku x tworzy przyrost w kierunku y większy od
1  wówczas należy zamienić współrzędne x i y rolami.
1.2) Funkcja rysowania odcinka
Zakładamy, że -1 d" m d" 1, x0 < x1, x zmienia się od x0 do x1 z przyrostem jednostkowym
void rysujlinie(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++)
{
putpixel(screen,x,(int) (y+0.5), makecol(0,120,120));
y += m;
}
}
Laboratorium nr 2 2/3
Przykład 1:
"x = 19
"y = 5
5
m = = 0,263
19
1.3) Obsługa klawiatury w bibliotece Allegro
Do obsługi przerwania klawiatury, w bibliotece Allegro wykorzystywana jest funkcja:
install_keyboard(); Funkcje tę wywołujemy na początku programu. Jej zdaniem jest
przechwycenie oraz zainicjowanie nowej procedury obsługi przerwania klawiatury.
Dodatkowo w przypadku, gdy program nie kończy się funkcją allegro_exit(), należy
wywołać na końcu programu funkcje: remove_keyboard(); Funkcja ta zwraca obsługę
klawiatury systemowi operacyjnemu.
Biblioteka Allegro posiada zdefiniowane tzw. ScanCode (w pliku nagłówkowym
allegro/keyboard.h). Są to stałe znakowe przypisane odpowiednim kodom ASCII.
Najważniejsze funkcje służące do obsługi klawiatury:
Nazwa funkcji Parametry Opis
Funkcja zwraca wartość
keypressed int keypressed() TRUE w przypadku
naciśnięcia klawisza
Funkcja czyta znak z bufora
readkey int readkey() klawiatury w postaci kodu
ASCII
Funkcja czyta znak z bufora
ureadkey int ureadkey(int *scancode) klawiatury w postaci kodu
Unicode
Funkcja zamienia ScanCode
scancode_to_ascii int scancode_to_ascii(int scancode) na odpowiadający mu kod
ASCII
Laboratorium nr 2 3/3
Przykład 1:
int main()
{
allegro_init();
install_keyboard();
if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0)
{
allegro_message("Problem z ustawieniem trybu graficznego\n");
}
while (!keypressed())
{
// kod programu
}
// kod programu
allegro_exit();
return 0;
}
END_OF_MAIN();
Przykład 2:
int main()
{
int znak;
allegro_init();
install_keyboard();
if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0)
{
allegro_message("Problem z ustawieniem trybu graficznego \n");
}
znak = readkey();
if((znak >> 8) == KEY_SPACE)
{
allegro_message("Wciśnięto spację \n");
}
// kod programu
allegro_exit();
return 0;
}
END_OF_MAIN();


Wyszukiwarka

Podobne podstrony:
Laboratorium grafika2D 4
Laboratorium grafika3D 4
Laboratorium grafika2D 7
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 1
Laboratorium grafika3D 3
Laboratorium grafika3D 5
Laboratorium grafika3D 6
Laboratorium grafika3D 2
Laboratorium grafika2D 6
Laboratorium grafika3D 1
Rola laboratoriów w świetle wymagań systemów zarządzania jakoscią
Laboratorium 3
Arch grafika osnovi kompozicii grigoryan

więcej podobnych podstron