You are on page 1of 7

CC THUT TON V ON THNG

1. Biton: Vonthngi qua 2 im A(x1,y1) v B(x2,y2)


* Trnghp x1=x2 hoc y1=y2: rtngin.
* Trnghpngthngchsgc m:
tng:

Vcc Pixel cv
ccvtrnguynnnngthngcvgingnhhnhbcthang (do lmtrn).
Vntralchncctanguyngnvingthng
2. Thutton DDA (Digital differential analyzer)

Xtngthngchsgc 0<m1(gisimu A nmbntrivimcui B


nmbnphi). Nu ta chn x=1v tnhgitr y ktipnhsau:
yk+1

= yk + y = yk + m.x
= yk + m

Vihsgc m>1: ta honivaitrcax,ychonhau. Nuchn y=1 th:


xk+1

= xk + 1/m

Tngt, nuim B nmbntrivAnmbnphith:


yk+1

= yk - m

(0<m1, x= -1)

xk+1

= xk - 1/m

(m>1, y= -1)

Tmli: Ta c thut tonv ng thng DDA nh sau:

Nhp A(x1,y1) B(x2,y2)


Tnh x = x2 - x1

y = y2 - y1

Step = Max(|x| , |y|)

Khitoccgitr:
IncX = x/Step;
x = x1;
y1;

IncY = y/Step; {bctngkhiv}

y=
{Chn imvutin}

Vim (x,y);
Cho i chy t 1 n Step:
x = x + IncX;

y = y + IncY;

Vim (Round(x),Round(y))

T ta cthtcvonthngtheothutton DDA nhsau:


Procedure DDALine(x1,y1,x2,y2:Integer);
vardx,dy,step,i:integer;
xInc,yInc,x,y:real;
Begin
dx:=x2-x1; dy:=y2-y1;
If abs(dx)>abs(dy) Then step:=abs(dx)
else step:=abs(dy);
xInc:=dx/step;
yInc:=dy/step;
x:=x1;
y:=y1;
Putpixel(round(x),round(y),15);
for i:=1 to step do
Begin
x:=x+xInc;
y:=y+yInc;
Putpixel(round(x),round(y),15);
End;
End;

xi

xi+1

yi+1

yi

Hnh 1.2
3. ThuttonBresenham
Phngtrnhngthngcthphtbiudidng: y = m.x + b

(1)

Phngtrnhngthng qua 2 im:


=
t

(*)
x = x2 - x1
y = y2 - y1

(*) y = x. + y1 - x1.
Suyra m = nn

y = m. x

(2)

b = y1 - m.x1 (3)

Ta chxttrnghphsgc 0<m<1.
Gisim (xi,yi) cv. Ta phichnimktipl:
(xi + 1,yi) hoc (xi +1,yi +1)

(Xemhnh 1.2)

Xtkhongcchgia 2
imchnviimnmtrnngthc.Nukhongcchnobhnth ta lyim.
t:

d1 = y - yi = m.(xi +1) + b - yi
d2 = (yi +1) - y = yi + 1 - m.(xi + 1) - b

Suyra:
d1 - d2 = 2m.(xi + 1) - 2yi + 2b - 1
= 2. .(xi + 1) - 2yi + 2b - 1

x(d1 - d2) = 2y.xi - 2x.yi + 2y + x.(2b - 1)


t

pi = x(d1 - d2)

th

pi = 2y.xi - 2x.yi + C

C = 2y + x.(2b - 1)

v
(4)

pi+1 = 2y.xi+1 - 2x.yi+1 + C

Suyra:
pi+1 - pi = 2y(xi+1 - xi) - 2x(yi - yi+1)
= 2y - 2x(yi+1 - yi)

(5)

( v xi+1 - xi = 1 )
* Nhnxt:
. Nu pi < 0: Chn yi+1 = yi T (5) pi+1 = pi + 2y.
. Nu pi 0: Chn yi+1 =yi + 1

(d1<d2)

T (5) pi+1 = pi + 2y - 2x.

(d1>d2)

Vi im mt u tin, theo (4) ta c:


p1 = 2y.x1 - 2x.y1 + 2y + x[2.(y1 - m.x1) - 1] = 2y - x

T, ta c th tm tt hut ton v ng thng theo Bresenham cho trng hp h


s gc 0<m<1 nh sau:
Bc 1: Nhp cc im u mt. im u mt bn tri cha ta (x1,y1), im
u mt bn phi cha ta (x2,y2).

Bc 2: im c chn v u tin l (x1,y1).

Bc 3: Tnh x = |x2 - x1| , y = |y2 - y1| v P1 = 2y - x

Nu pi < 0 th im k tipl (xi + 1,yi)


Ngc li: im k tip l (xi + 1,yi + 1)

Bc 4: Tip tc tng x ln 1 Pixel. vtr xi +1, ta tnh:


pi+1 = pi + 2y

nu pi < 0

pi+1 = pi + 2.( y - x)

nu pi 0

Nu pi+1 < 0 th ta chn to y k tip l yi+1


Ngclith ta chn yi+1 +1

Bc 5: Lplibc 4 chonkhi x = x2.

Sauylthtccitthutton:
Procedure LINE(x1,y1,x2,y2:integer); { 0<m<1}
var dx,dy,x,y,p,c1,c2,xMax:integer;
Begin
dx:=abs(x1-x2);
dy:=abs(y1-y2);
c1:=2*dy;
c2:=2*(dy-dx);
p:=2*dy-dx;
if x1>x2 then
begin
x:=x2; y:=y2; xMax:=x1;
end
else
begin
x:=x1;y:=y1;xMax:=x2;

end;
putpixel(x,y,red);
while x<xMax do
begin
x:=x+1;
if p<0 then p:=p+c1
else begin
y:=y+1;
p:=p+c2;
end;
putpixel(x,y,red);
end;
end;
4. ThuttonMidPoint
Ta chxttrnghphsgc 0<m<1.
ThuttonnyaracchchnimS(xi+1,yi) hay P(xi+1,yi+1) bngcch so
snhimthc Q(xi+1,y) viim M (trungimca S v P).
Nuim Q nmdiim M th chnim S
Ngcli, chnim P. (Xemhnh 1.3)
Ta cdngtngqutcaphngtrnhngthng:
Ax + By + C = 0
vi A = y2 y1 , B = (x2 x1) ,
C = x2.y1 x1.y2
t F(x,y) = Ax + By + C, ta cnhnxt:
< 0 nu (x,y) nmphatrnngthng

F(x,y) = 0 nu (x,y) thucvngthng


> 0 nu (x,y) nmphadingthng
Lcny, vicchnccim S hay P cavvicxtduca:
pi = F(M) = F(xi + 1,yi + )
Nu pi < 0 M nmtrnonthng Q nmdi M Chn S
Nu pi 0 M nmdionthng Q nmtrn M Chn P

Mtkhc:
pi

= F(xi + 1,yi + )

pi+1 = F(xi+1 + 1,yi+1 + )


nn
pi+1 - pi = F(xi+1 + 1,yi+1 + ) - F(xi + 1,yi + )
= A(xi+1+1) + B(yi+1 + ) + C - A(xi+1) - B(yi + ) - C
= A(xi+1 - xi) + B(yi+1 - yi)
= A + B(yi+1 - yi) (v xi+1 - xi =1)

Suyra: pi+1 = pi + A + B(yi+1 - (*)


*Nhnxt:
. Nu pi < 0: Chnim S: yi+1 = yi

T (*) suyra pi+1 = pi + A

. Nu pi 0: Chnim P: yi+1 =yi + 1 T (*) suyra pi+1 = pi + A + B

Viimmtutin, ta c:
p1 = F(x1 + 1,y1 + ) = A(x1+1) + B(y1 + ) + C
= Ax1 + Bx1 + C + A + = A + (v Ax1 + Bx1 + C = 0)
ThuttonMidPointchoktqutngtnhthuttonBresenham.

You might also like