Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 15

Thut ton v ng thng Bresenham

Mi tng quan gia X & Y khi ln h s gc nh hn 1

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

x c gi l independent variable v y l dependent variable

Thut ton Bresenham Gii thiu


Gi s ng cong c xp x thnh cc im ln lt l (xi,yi). Cc im ny c ta nguyn v c hin th trn mn hnh. Bi ton t ra l nu bit c ta (xi,yi) ca bc th i, th im bc i+1 l (xi+1,yi+1) s c xc nh nh th no. Trong trng hp h s gc 0<=m<=1, chng ta c xi+1=xi+1 v yi+1=yi hay yi+1=yi+1

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

Thut ton (cont.)


d1 - d2 = (2y 2yi 1) l mt s thc do cha m Xt pi = Dx (d1 - d2) = Dx (2y - 2yi - 1) = 2Dy xi - 2Dx yi + C
C = 2Dy + (2b - 1)Dx

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

Gi tr p u tin c tnh ti (x1, y1) l p1 = 2Dy x1 -2Dx y1 + C = 2Dy Dx

Begin

p = 2Dy - Dx; const1=2Dy; const2=2(Dy-Dx); x = x1; y = y1; putpixel(x,y,color);

x<x2

End

p<0 p=p+const2; y = y + 1;

p=p+const1;

x=x+1; putpixel(x,y,color);

Chng trnh (Dx>Dy>0)


BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 x1, Dy = y2 y1; int x = x1, y = y1; int p = 2 * Dy Dx; int const1 = 2 * Dy, const2 = 2 * (Dy-Dx); putpixel(x, y, color); while (x < x2) { if (p < 0) { p += const1; } else { p += const2; y++; } x++; putpixel(x, y, color); } }
7

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

Kt hp vng 2, 3, 6, 7: x tnh theo y


y tng 1 khi Dy > 0, gim 1 khi Dy < 0 x tng khi Dx > 0, gim khi Dx < 0
... int dx = (Dx < 0) ? -1 : 1; Dx = abs(Dx); int dy = (Dy < 0) ? -1 : 1; Dy = abs(Dy);

while (y != y2) { if (p < 0) { p += const1; } else { p += const2; x += dx; } y += dy; putpixel(x, y, color); } ...

13

Chng trnh hon chnh


BresenhamLine(int x1, int y1, int x2, int y2, int color) { int Dx = x2 x1, Dy = y2 y1; int x = x1, y = y1; int dx = (Dx < 0) ? -1 : 1; int dy = (Dy < 0) ? -1 : 1; Dx = abs(Dx); Dy = abs(Dy);

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 } }

const1; const2; dy;

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

You might also like