Professional Documents
Culture Documents
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
3
4/4/2011
6
D
2
B
A = B = 0000 AB
ClipD F AB
A & B 0000 AB
ClipD F
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:
Bit:
4/4/2011
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
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
//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);
xoay
-
ct
xoay
12
4/4/2011
13
tng Sutherland-Hodgeman
trn
tri
phi
di
14
4/4/2011
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
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
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
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
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
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
T(x0,y0); dau=cuoi=0;
Qx[0]=x0; Qy[0]= y0;
while (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
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
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
13