Brezenxeym algoritmi. Kesmaning rastr tasviri.
(X
1
,Y
1
) va (X
2
,Y
2
) nuqtalarini tutashtiruvchi kesmaning rastr tasvirini
ko`rish masalasini ko`ramiz. Faraz qilamiz
Berilgan ikki nuqtadan o`tuvchi to`g`ri chiziq tenglamasini tuzamiz:
unda kesma quyidagi tenglama bilan beriladi:
yoki:
y
=
ky
+
b
,
bu yerda,
Paskal tilida programmasi:
Procedure line(x1, x2, y1, y2: integer; s: word);
var k, b: real;
x, y: integer;
Begin
K: = (y2-y1)/(x2-x1);
B: = y1-r*x1;
For x:=x1 to x2 do
(3.1.3)
(3.1.4)
(3.1.5)
(3.1.6)
(3.1.7)
45
keyingi qadamga ya’ni i+1:
d
i+1
dan d
i
ayiramiz va x
i
- x
i-1
=1
ni hisobga olgan holda:
So`ng, agar d
i
<0 bo`lsa s
i
tanlanadi, u holda yi= y
i
-1 va d
i
+1= d
i
+2dy.
Aks holda, ya’ni d
i
≥ 0 bo`lsa s
i
tanlanadi va u holda y
i
-y
i
-1=1
Shunday qilib biz d
i+1
ni d
i
ning qiymati orqali hisoblash va
s
i
,T
i
nuqtalarni tanlash
uchun iterativ usulni hosil qildik. Boshlang`ich holatda
d
1
=2dy-dx (x
0
, y
0
)=(0,0)
ni
hisobga olgan holda
i=1
da topiladi.
Brezenxeym algoritmi
uchun programmasi quyidagicha:
Procedure BREZENHAM(x1, x2, y1, y2: integer; c: word);
Var dx, dy, d, d1, d2, x, y, xend: integer;
Begin dx:= abs(x2-x1);dy:=abs(y2-y1);
d:=2*dy-dx; d1:=1*dy;d2:=:2*(dy-dx);
If x1>x2
Then begin
x:=x2; y:=y2; xend:=x2; end;
Else begin
x:=x1; y:=y1; xend:=x1; end;
PutPixel (x,y,c);
While xIf d<0
Then d:=d+d1;
Else begin
y:=y+1; d:=d+2; end;
PutPixel(x,y,c);
End; {while}
End. {BREZENHAM}
(3.1.8)
(3.1.9)
(3.1.10)
46
SAVOL VA TOPSHIRIQLAR
1. To`rt bog`lanishlik haqida tushuncha bering.
2. Sakkiz bog`lanishlik haqida tushuncha bering.
3. Brezenxeym algoritmi. Kesmaning rastr tasviri haqida tushuncha bering.
4. Brezenxeym algoritmini tushuntiring?
3.2. Ko`pburchak va murakkab sohalarni bo`yash (Rendering)
Kompyuter grafikasida soha
2 ta usul
bilan berilishi mumkin:
1. Sohani tashkil etuvchi tashqi nuqtalari bilan, ya’ni sohani ichida yotuvchi
har bir piksel biror bir rang (oldcolor) bilan beriladi (chegaradagi piksellar bu
qiymatga ega emas).
2. Soha chegarasi bilan berilishi mumkin , ya’ni chegaradagi piksellar biror bir
rang bilan (bcolor) beriladi (chegara ichidagi piksellar bu qiymatga ega emas). Shu
sababli sohani bo`yash, algoritmlari ikki turga bo`linadi. Bundan tashqari 4 va 8
bog`lanishlik sohalar uchun algoritmlar mavjud. Ichki oldcolor rang bilan berilgan
yangi newcolor rang bilan 4-bog`lanishlik sohani bo`yash oddiy rekursiya
algoritmini keltiramiz:
Procedure fill4(x, y: integer;
Newcolor, oldcolor: word);
Begin if (GetpPixel(x,y)=oldcolor)
Then begin
PutPixel (x,y,newcolor);
Fill4(x, y-1, newcolor, oldcolor);
fll4(x, y+1, newcolor, oldcolor);
Fill4(x-1, y, newcolor, oldcolor);
Fill4(x+1, y, newcolor, oldcolor);
End;
End;
{fill}
47
Bu yerda, (x,y) ixtiyoriy sohani ichida yotuvchi nuqta, oldcolor qiymatiga ega
piksel. Chegaradagi rangi bilan berilgan (bcolor) sohani bo`yash algoritmi
quyidagicha:
Procedure
bfill4(x, y: integer; Bcolor, newcolor: word);
Begin
If GetPixel(x, y)<>bcolor and
GetPixel(x, y)<>newcolor
Then begin
PutPixel (x, y, newcolor);
Bfill4(x, y-1, bcolor, newcolor);
Bfill4(x, y+1, bcolor, newcolor);
Bfill4(x-1, y, bcolor, newcolor);
Bfill4(x+1, y, bcolor, newcolor);
End;
End;
{bfill4}
Bu yerda, (x,y)
- sohani ichida yotuvchi biror bir nuqta (piksel),
newcolor
bo`yash
rangi. Keltirilgan algoritmlarni 8-bog`lanishlik sohalarga 4-ta yo`nalishni 8-ta
yo`nalishga almashtirish orqali osongina o`tkazish mumkin.
0>0> |