You are on page 1of 13

4/4/2011

CH 2. XN HNH, T MU
Trng Vn Quc Nht

Ni dung
Xn hnh
1. Xn on thng vo hnh ch nht
CohenSutherland, Thut ton Chia nh phn, LiangBarsky
2. Xn on thng vo hnh trn
3. Xn ng trn vo hnh ch nht
4. Xn a gic vo hnh ch nht
5. Xn a gic vo a gic

T mu
1. Thut ton Loang
2. Thut ton Dng qut (Scan-line)
2

Bi tp

4/4/2011

Xn (clipping)

1. Xn on thng vo hnh ch nht


4

1
3

Thut ton Chia nh phn


CohenSutherland
LiangBarsky

4/4/2011

Thut ton CohenSutherland


4

6
D

2
B

A = B = 0000 AB
ClipD F AB

A & B 0000 AB
ClipD F

A & B = 0000 v A | B 0000:


Xt A (gi s A nm ngoi):

1
3

Thay A bi giao ca AB
vi cnh tri ni di
Thay A bi giao ca AB
vi cnh phi ni di
Thay A bi giao ca AB
vi cnh di ni di

Thay A bi giao ca AB
vi cnh trn ni di
5

Bit:

Thut ton Chia nh phn


4

Bit:

4/4/2011

Thut ton Liang-Barsky

Ptrnh tham s:

2
1

3
2

Bit:

yA

xA

xm ax

ym in

y A t yB

yA

ym ax
t:

xB

x A , y yB y A
x , q1 x A xmin (tri)
x , q2 xm ax x A (phi)
y , q3 y A ym in (di)
y , q4 ymax y A (trn)

C: pk

pk
pk

triphitrndi

pk
pk
pk

y A t yB

pk t qk , k 1,4
0 t 1

t:

Kim tra

x A t xB

Th t ct:

xA

xm in

x
p1
p2
p3
p4

Cohen- : Cp nht y
Liang- : Cp nht t

x A t xB

0 t 1

4
1

0 : AB // 1 cnh
0 : ngoi trong
0 : trong ngoi

x
p1
p2
p3
p4

0 : AB // 1 cnh
0 : ngoi trong
0 : trong ngoi

xB

x A , y yB y A
x , q1 x A xmin (tri)
x , q2 xm ax x A (phi)
y , q3 y A ym in (di)
y , q4 ymax y A (trn)

ymax
D

xmax

xmin

ymin

Cnh tri
p1 x A xB

Cnh phi
p2 x B x A

yB

Cnh trn
p4 y B y A

Cnh di
p3

yA

4/4/2011

Thut ton Liang-Barsky

t0=0; dx=xB-xA;
t1=1; dy=yB-yB;

//duyt ln lt cc cnh
//0.tnh p,q,r

for (canh=14){
switch (canh){
1: p=-dx; q=xA-xmin;
2: p=dx; q=xA-xmin;
3: p=-dy; q=xA-xmin;
4: p=dy; q=xA-xmin;
}

r=q/p;
if (p=0 && q<0) return
if (p<0){
if (r>t1) return
if (r>t0) t0=r;
} else if (p>0) {
if (r<t0) return
if (r>t1) t1=r;
}

11

//1.cnh song song ko v

//2.ngoi trong
//nm ngoi ko v
//xn c 1 t

//3.trong ngoi
//nm ngoi ko v
//xn c 1 t

}
x0=xA+t0*dx; y0=yA+t0*dy;
x1=xA+t1*dx; y1=yA+t1*dy;
return on:(x0,y0)(x1,y1);

Xn on thng vo HCN xin

xoay
-

ct

xoay

12

4/4/2011

Xn a gic vo hnh ch nht

13

tng Sutherland-Hodgeman
trn

tri

phi
di
14

4/4/2011

Ct dc theo cnh trn

U
Un

U1

D
9
8
7
6
5
4
C
B
1
A

A=10;
for (B=110){

10

d
D

1
9

if (B trong){
if (A ngoi) Thm(ABd);
Thm(B);
} else {
if (A trong) Thm(ABd);
}

8
4

A=B;
}

15

Thut ton Sutherland-Hodgeman


U = danh_sch_nh_a_gic;
for (cnh = trnphiditri){
//lc ny: V y, U rng
VU;
//c: sau mi ln ct, n c th thay i
A=Vn;
for (B = V1Vn){
if (B trong){
if (A ngoi) nm(ABcnh);
nm(B);
} else {
if (A trong) nm(ABcnh);
}
}

A=B;

Vn

V1

17

4/4/2011

Ct i?

Ct thnh 2 ci
lun ?

6
3

5
2

18

Xn a gic vo a gic

19

4/4/2011

Ui chao, d
m!

Xc nh trong, ngoi?

trn

B(7,9)

n2

n1

ngoi

n1

yB

yA ,

xB

xA

n2

yB

yA ,

xB

xA

Gi s: AP

AP n
A
(2,3)

AP

P
(5,3)

n
20

trong

AP n

x, y

AP n cos

x yB y A y xB
cos
0 : trong
cos
0 : trn
cos
0 : ngoi

Xc nh m

xP
yP

xA

xmin xmax
ymin ymax

ymax
D

P = 0;
if (xP < xmin) P = P|1; //tri

xmin

xmax

ymin

if (xP > xmax) P = P|2; //phi


if (yP < ymin) P = P|4; //di
if (yP > ymax) P = P|8; //trn

Tnh m
21

Bit:

4/4/2011

Ni dung
Xn hnh
1. Xn on thng vo hnh ch nht
CohenSutherland, Thut ton Chia nh phn, LiangBarsky
2. Xn on thng vo hnh trn
3. Xn ng trn vo hnh ch nht
4. Xn a gic vo hnh ch nht
5. Xn a gic vo a gic

T mu
1. Thut ton Scanline
2. Thut ton Loang
22

Bi tp

Thut ton Loang tng


1
4

3
x
42 26

28 14 27
6

15 29

40 23

41 16
8

17 30

39 25 13

38 24 12

10 19 32

18 31

37 22 11 20 33
36 21 34
35

23

quy
Kh quy

10

4/4/2011

S && ChaT(x,y)] 4

17

16

15

10

14

11

12

13

Loang(x,y,mau)
{
if [(x,y)
{

Stack

Thut ton Loang quy

T(x,y);
Loang(x,y-1,mau);
Loang(x+1,y,mau);
Loang(x,y+1,mau);
Loang(x-1,y,mau);
}
}

Gi: Loang(6,8,)

24

Loang(4,4)
Loang(5,5)
Loang(6,4)
Loang(5,3)
Loang(5,4)
Loang(6,5)
Loang(7,4)
Loang(6,3)
Loang(5,5)
Loang(6,6)
Loang(7,5)
Loang(6,4)
Loang(5,6)
Loang(6,7)
Loang(7,6)
Loang(6,5)
Loang(5,7)
Loang(6,8)
Loang(7,7)
Loang(6,6)
Loang(5,8)
Loang(7,9)
Loang(7,8)
Loang(6,7)
Loang(6,8)

Queue

Thut ton Loang Kh quy


Vo: x0,y0,mau
T(x0,y0); Q = {(x0,y0)};

while (Q )
{
Pop(p);//ly p t Q
for ( v = K(p))
if [v S && ChaT(v)]
{
T(v);
Push(v);//a v vo Q
}
}

14

16

15

18

17

25 13

19

24 12

10 20

2
3

4
5
6

8
9

25

V d: (x0,y0)=(4,5)

23 11 21
x

22
x

(1,5)
(2,6)
(3,7)
(4,8)
(5,7)
(6,6)
(7,5)
(2,4)
(6,4)
(3,3)
(5,3)
(4,2)
(2,5)
(3,6)
(4,7)
(5,6)
(6,5)
(3,4)
(5,4)
(4,3)
(3,5)
(4,6)
(5,5)
(4,4)
(4,5)

11

4/4/2011

Thut ton Loang Kh quy


Vo: x0,y0,mau
T(x0,y0);
Q = {(x0,y0)};

T(x0,y0); dau=cuoi=0;
Qx[0]=x0; Qy[0]= y0;

while (Q )
{

while (dau cuoi)


{
Px=Qx[dau];
Py=Qy[dau]; dau++; //ly p t Q
for ( (vx,vy) K(px,py))
if [(vx,vy) S && ChaT(vx,vy)]
{
T(vx,vy);
cuoi++;
Qx[cuoi]=vx;
Qy[cuoi]=vy;//a v vo Q
}
}

Pop(p);//ly p t Q
for ( v
if [v
{

K(p))
S && ChaT(v)]

T(v);
Push(v);//a v vo Q
}
}
26

27

12

4/4/2011

Thut ton Dng qut (Scan-line)


x1
x1

x2
x2

x1

x3
x3

x4

x3

x4

x4

x2 x3

x2

x1
x2

x1

x1,x2,x3,x4,x5,x6
28

xi xi+1

(x1,x2), (x3,x4 ), ( x5,x6)

- Dng qut ct t 2 cnh lin tip b xi+1


- Dng qut xt qua 2 cnh lin tip gi xi+1

Bi tp
1. Bt buc (2 tun):
Xy dng (nu c) & Ci t cc thut ton :
Xn on thng vo hnh ch nht (CohenSutherland,
Liang-Barsky)
Xn a gic vo hnh ch nht (Sutherland-Hodgeman)
T mu Loang ( quy, kh quy)
Mi thut ton v l 1 phng thc, gp vo 1 file m ngun
(ui l cs).

29

2. Khng bt buc (thoi mi):


Xy dng (nu c) & Ci t cc thut ton:
Xn on thng vo HCN xin
Xn a gic vo a gic (Sutherland-Hodgeman)
T mu dng qut

13

You might also like