POLITECHNIKA KOSZALICSKA - WYDZIAA ELEKTRONIKI
URZDZENIA ZEWNTRZNE
Ćwiczenie laboratoryjne N 3
Ćwiczenie laboratoryjne N 3
TEMAT: OBSAUGA KART GRAFICZNYCH Z WYKORZYSTANIEM
PRZERWAC
Celem ćwiczenia jest zapoznanie się z przerwaniami obsługującymi karty graficzne, oraz
z podstawowymi algorytmami rysowania linii prostych i krzywych.
Przygotowanie pracy laboratoryjnej wykonywane przed ćwiczeniem.
1. Zapoznaj się z przerwaniem BIOS'u o numerze 10h. W szczególności z jego funkcjami
00h i 0Ch, obsługującymi karty graficzne.
2. Zapoznaj siÄ™ z dyrektywÄ… MACRO i EQU.
3. Zastanów się w jaki sposób narysować odcinek pionowy lub poziomy z wykorzystaniem
informacji zawartych w pkt. 1 i 2.
4. Zapoznaj się z algorytmem Bresenhama dla odcinków innych niż pionowe lub poziome.
Stwórz schemat blokowy dla tego algorytmu uwzględniając specyfikę układu
współrzędnych na ekranie monitora.
Kolejność wykonywania ćwiczenia:
I. Napisz program w Asemblerze wyświetlający na monitorze w dowolnym punkcie
ekranu pojedynczy pixel w rozdzielczości 320x200 w kolorze białym i sprawdz jego
działanie.
II. Wykorzystując dyrektywę MACRO rozbuduj wcześniejszy program, tak aby w
makrze znajdował się fragment kodu odpowiedzialny za umieszczenie piksela w
zadanym punkcie ekranu.
III. Przekształć program tak aby rysował odcinki o parametrach zadanych w Tabeli I.
IV. Używając algorytmu Bresenhama połącz linią ukośną dwa (dowolne) końce linii
uzyskanych z poprzedniego programu.
Algorytm Bresenhama
Założenia wstępne algorytmu Bresenhama:
" kwadratowy raster
" początkiem wektora jest początek układu współrzędnych punkt (0, 0)
1
" kat nachylenia Ä… d" 45°
Idea algorytmu Bresenhama jest optymalny, względem bieżącego punktu, wybór punktu
następnego. Jak widzimy na rysunku (Rys. 2) wybór taki dokonuje sie na podstawie
minimalnego błędu popełnianego przy liczeniu odległości oczek rastra od rzeczywistej linii.
1 Mimo ze ograniczamy sie do pierwszej ćwiartki, to rozszerzenie do pozostałych ćwiartek jest
natychmiastowe i trywialne.
1 z 4
POLITECHNIKA KOSZALICSKA - WYDZIAA ELEKTRONIKI
URZDZENIA ZEWNTRZNE
Ćwiczenie laboratoryjne N 3
Drawing 1: Wybór następnego punktu w algorytmie
Bresenhama
Punkt początkowy wektora P1(0, 0) ogólnie P1(x1, y1)
Punkt końcowy wektora P2(dx, dy) ogólnie P2(x2, y2)
gdzie dx = x2 - x1 i dy = y2 - y1 z czego y = (dy/dx)x.
e1 = (dy/dx)(x + 1) - y
e2 = 1 - e1 = 1 - (dy/dx)(x + 1) + y (2)
Chcąc określić, dla wyboru którego z punktów E(x+1, y) czy NE(x+1, y+1) popełniamy
większy błąd zbadamy różnice:
e1 - e2 = 2(dy/dx)(x + 1) - 2y - 1 (3)
zgodnie z założeniem, dla dx > 0 mnożąc obie strony przez dx nie zmieniamy znaku
różnicy:
(e1 - e2)dx = 2(x + 1)dy - 2ydx - dx (4)
Wprowadzmy zmienna decyzyjna ´ jako:
´ = (e1 - e2)dx = 2(x + 1)dy - 2ydx - dx (5)
Znak ´ decyduje o wyborze punktu bliższego rzeczywistej prostej.
jeÅ›li ´ < 0, to e1 < e2, zatem należy wybrać punkt E(x + 1, y)
jeÅ›li ´ e" 0, to e1 e" e2, zatem należy wybrać punkt NE(x + 1, y + 1).
Kolejne wartoÅ›ci bieżących x, y i ´ wyznaczajÄ… formuÅ‚y rekurencyjne:
jeśli wybrano punkt E(x + 1, y):
xi+1 = xi + 1
yi+1 = yi
´i+1 = 2(xi + 1 + 1)dy - 2yidx - dx
= 2(xi + 1)dy - 2yidx - dx + 2dy = ´i + 2dy (6)
jeśli wybrano punkt NE(x + 1, y + 1):
xi+1 = xi + 1
yi+1 = yi + 1
´i+1 = 2((xi + 1) + 1)dy - 2(yi + 1)dx - dx
= ´i + 2(dy - dx) (7)
Ponieważ dx i dy są stałymi, można dodatkowo uprościć obliczenia przyjmując:
incrNE = 2dy - 2dx
incrE = 2dy (8)
a mnożenia zastąpić przesunięciem w lewo.
2 z 4
POLITECHNIKA KOSZALICSKA - WYDZIAA ELEKTRONIKI
URZDZENIA ZEWNTRZNE
Ćwiczenie laboratoryjne N 3
Tabela I:
Długość
Lp. Kolor Kształt Pkt 'styku'
[pixel]
1 jasnoniebieski 30 % 10, 10
2 jasnozielony 60 % 300,10
3 jasno siny 90 % 10,180
4 jasnoczerwony 120 % 300,180
5 różowy 20 % 150,100
6 żółty 40 $% 150,100
7 biały 80 ,% 150,100
8 zielony 160 4% 190,100
9 czerwony 25 <% 100,100
10 niebieski 50 % 50,50
11 siny 100 % 100,100
12 fioletowy 150 % 5,5
13 brÄ…zowy 30 % 200,20
14 jasnoszary 60 % 70,100
15 szary 90 % 100,100
16 jasnoniebieski 120 % 150,10
17 siny 20 $% 150,100
18 zielony 40 ,% 30,30
19 jasnoczerwony 80 4% 100,120
20 jasnoszary 160 <% 160,160
Algorytm Bresenhama:
procedure Bresenham(x0, y0, x1, y1, kolor: integer);
var
"x,"y, incrE, incrNE, ´, x, y: integer;
begin
"x := x1 - x0;
"y := y1 - y0;
´ := 2 * "y - "x; (* Wartość poczÄ…tkowa ´ *)
incrE := 2 * "y; (* Inkrementacja przy wyborze punktu E *)
incrNE := 2 * ("y - "x); (* Inkrementacja przy wyborze punktu NE *)
x := x0; y := y0;
PutPixel(x, y, kolor); (* Piksel poczÄ…tkowy *)
3 z 4
POLITECHNIKA KOSZALICSKA - WYDZIAA ELEKTRONIKI
URZDZENIA ZEWNTRZNE
Ćwiczenie laboratoryjne N 3
while x < x1 do begin
if ´ <= 0 then begin (* Wybrano E *)
´ := ´ + incrE;
x := x + 1;
end
else begin (* Wybrano NE *)
´ := ´ + incrNE;
x := x + 1;
y := y + 1;
end;
PutPixel(x, y, kolor);
end; (* while *)
end; (* Bresenham *)
Przykładowe pytania i polecenia:
1. Omów działanie napisanych programów.
2. Do czego służy MACRO?
3. Do czego służy EQU?
4. Omów zasadę działania algorytmu Bresenhama.
5. Do czego służy przerwanie 10h, 0Ch?
6. Co oznacza dyrektywa .STACK?
7. Czym różni się procedura od makra?
Literatura
S. Kruk: Programowanie w języku Assembler, PLJ, W-wa, 1992.
G. Syck: Turbo Assembler. Biblia użytkownika, LT&P, W-wa, 1994.
M. Gieroń: Przerwania systemowe i programy rezydentne, Karat, Tarnów, 1993.
S. Kruk: Turbo debugger PLJ, W-wa, 1995.
R. Goczyński, M.Tuszyński: Mikroprocesory 80286,80386 i i486, Help, W-wa, 1991
P. Metzger, A. Jełowicki: Anatomia PC, Helion, Gliwice, 1997
http://www.republika.pl/wmula/prog/bresenham.html
4 z 4
Wyszukiwarka
Podobne podstrony:
Urz Zew Cw09Urz Zew Cw5Urz Zew Cw2Urz Zew Cw10Urz Zew Cw1W208 demontaż listwy szyby przedniej zew14 EW ZEW Srodowisko do metody Johnacw3 2Cw3?rrorezonans napiec i pradowDz Urz Min Fin z dnia 10 września 2014 r pozCW3 Klasyfikacja ubezpieczencw3 lab chemia pomiary tempwięcej podobnych podstron