Professional Documents
Culture Documents
Bresenhamlinedrawing
Bresenhamlinedrawing
Dy Dx
x tng 1 v y gi nguyn hay tng 1
iu ny bo m cho ng thng lin tc Nu ln ca h s gc ln hn 1, chng ta i vai tr ca x & y
yi+1
yi
yi-1
xi
xi+1
Thut ton
Phng trnh ng thng qua 2 im (x1, y1) v (x2, y2) l y=mx+b vi m=Dy/Dx v b=y1-mx1. t d1=y-yi v d2=(yi+1)-y, do vic chn ta ca yi+1 ph thuc vo d1 v d2 ( hay du ca d1 - d2):
Nu d1-d2<0 th chn yi+1=yi Ngc li, chn yi+1=yi+1
yi+1
P
(xi+1,y=f(xi+1))
d2 d1
yi xi
S xi+1=xi+1
4
Do du ca pi v (d1-d2) ging nhau nn khi xt du ca pi th ta xc nh c yi+1 Mc khc, pi+1 pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C) = 2Dy 2Dx(yi+1 yi) T y, ta suy ra cch tnh pi+1 theo pi:
Nu pi<0 th yi+1=yi nn pi+1 = pi + 2Dy Ngc li th yi+1=yi+1 nn pi+1 = pi + 2Dy 2Dx
Begin
x<x2
End
p<0 p=p+const2; y = y + 1;
p=p+const1;
x=x+1; putpixel(x,y,color);
Tng kt
Xc nh d1 v d2 sao cho d1 l lch t y n im hin hnh yi Xc nh pi sao cho pi cng du vi (d1 d2) v mang gi tr nguyn Tnh pi+1 theo pi theo 2 trng hp pi < 0 v pi > 0. Ch trng hp pi = 0. Tnh p1
yi+1
P
(xi+1,y=f(xi+1))
d2 d1
yi xi
S xi+1=xi+1
8
M rng
3 2
4 Dx<0,Dy>0,|Dx|>Dy
1 Dx>0,Dy>0,Dx>Dy 8 Dx>0,Dy<0,Dx>|Dy| 6 7
5 Dx<0,Dy<0,|Dx|>|Dy|
Kt hp vng 1 v 8
x tng 1 Vng 1 y tng cn vng 2 y gim
... int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x++; putpixel(x, y, color); } ...
10
Kt hp vng 1 v 4
Vng 1 x tng 1, vng 4 x gim 1 y tng
... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x += dx; putpixel(x, y, color); } ...
11
Kt hp vng 1, 4, 5, 8
x tng 1 khi Dx > 0, gim 1 khi Dx < 0 y tng khi Dy > 0, gim khi Dy < 0
... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy);
while (x != x2) { if (p < 0) { p += const1; } else { p += const2; y += dy; } x += dx; putpixel(x, y, color); } ...
12
while (y != y2) { if (p < 0) { p += const1; } else { p += const2; x += dx; } y += dy; putpixel(x, y, color); } ...
13
putpixel(x, y, color); if (Dx > Dy) { int p = 2 * Dy Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); while (x != x2) { if (p < 0) { p += } else { p += y += } x += dx; putpixel(x, y, } } else {// i vai tr gia x v y } }
color);
14
Bi tp
Ci t thut ton Bresenham cho: ng trn tm (xc,yc) bn knh R: (x-xc)2 + (y-yc)2 = R2 ng elip tm (xc,yc) bn knh di l a, rng l b: (x-xc)2 / a2 + (yyc)2 / b2 = 1
15