CHƯƠNG III
XÉN HÌNH
3.1. ĐẶT VN ĐỀ
Cho mt min D Rn và F là mt hình trong Rn (F Rn). Ta gi F D lành
được t F bng cách xén vào trong D và ký hiu là ClipD(F).
Bài toán đặt ra là xác định ClipD(F).
3.2. XÉN ĐON THNG VÀO VÙNG HÌNH CH NHT CA R2
3.2.1. Cnh ca hình ch nht song song vi các trc ta độ
Lúc này:
D =
maxmin
maxmin
|),( 2
YyY
XxX
Ryx
và F là đon thng ni 2 đim (x1,y1), (x2,y2) nên phương trình ca F là:
t [0,1]
xx x xt
yy y yt
=+
=+
121
121
()
(
.
).
Do đó, F có th được viết dưới dng:
F = {(x,y) R2 | x = x1 + (x2 -x1).t; y = y1 + (y2 -y1).t; 0 t 1}
Khi đó, giao đim ca F và D chính là
nghim ca h bt phương trình (theo t):
xMin xMax X
y
yMax
yMin
AP
Q
Hình 3.1
B
Xmin x1+ (x2 - x1). t Xmax
Ymin 1+ (y2 - y1). t max
0t1
≤≤
≤≤
≤≤
yY
Gi N là tp nghim ca h phương trình
trên.
Nếu N = thì ClipD(F) =
Nếu N thì N = [t1, t2] (t1 t2)
Gi P, Q là 2 giao đim xác định bi:
Chương III. Xén hình
Px x x x t
Py y y y t
=+
=+
121
121
().
()
1
1.
2
2
>
laûi Ngæåüc0
maxP nãúu xX1
Qx x x x t
Qy y y y t
=+
=+
121
121
().
().
thì: ClipD(F) = PQ (Hình 3.1)
3.2.1.1. Thut toán Cohen - Sutherland
Chia mt phng ra làm 9 vùng, mi vùng đánh mt mã nh phân 4 bit (hình 3.2).
Bit 1: Qui định vùng nm bên trái ca s 100
1
000
1
011
0
010
0
Hình 3.2
010
1
101
0
001
0
100
0
000
0
Bit 2: Qui định vùng nm bên phi ca s
Bit 3: Qui định vùng nm bên dưới ca s
Bit 4: Qui định vùng nm bên trên ca s
Xét đim P R2 :
Pleft =
<
laûi Ngæåüc0
minP nãúu xX1
PRight =
PBelow =
<
laûi Ngæåüc0
minP nãúu yY1
PAbove =
>
laûi Ngæåüc0
maxP nãúu yY1
Xét đon thng AB, ta có các trường hp sau:
i/ Nếu Mã(A) = Mã(B) = 0000 thì AB D ClipD(F) = AB
ii/ Nếu Mã(A) AND Mã(B) 0000 thì đon AB nm hoàn toàn bên ngoài hình
ch nht ClipD(F) =
Chú ý: Phép toán AND là phép toán Logic gia các bit.
iii/ Nếu (Mã(A) AND Mã(B) = 0000) và (Mã(A) 0000 hoc Mã(B) 0000) thì:
Gi s Mã(A) 0000 A nm ngoài hình ch nht.
Nếu Aleft = 1 : thay A bi đim nm trên đon AB và ct cnh trái (ni dài)
ca hình ch nht.
33
Chương III. Xén hình
Nếu Aright = 1: thay A bi đim nm trên đon AB ct cnh phi (ni dài) ca
hình ch nht.
Nếu ABelow = 1: thay A bi đim nm trên đon AB và ct cnh dưới (ni
dài) ca hình ch nht.
Nếu AAbove = 1: thay A bi đim nm trên đon AB và ct cnh trên (ni
dài) ca hình ch nht.
Chú ý: Quá trình này được lp li: Sau mi ln lp, ta phi tính li mã ca A.
Nếu cn, phi đổi vai trò ca A và B để đảm bo A luôn luôn nm bên ngoài hình ch
nht. Quá trình s dng khi xy ra mt trong 2 trường hp: i/ hoc ii/
3.2.1.2. Thut toán chia nh phân
Ý tưởng ca thut toán này tương t như thut toán tìm nghim bng phương pháp
chia nh phân.
Mnh đề: Cho M: trung đim ca đon AB, Mã(A)
0000, Mã(B)
0000, Mã(M)
0000 thì ta có:
[Mã(A) AND Mã(M)]
0000
hoc [Mã(M) AND Mã(B)]
0000.
Ý nghĩa hình hc ca mnh đề: Nếu c ba đim A, B, M đều ngoài hình ch
nht thì có ít nht mt đon hoàn toàn nm ngoài hình ch nht.
Ta phát tho thut toán như sau:
i/ Nếu Mã(A) = 0000 và Mã(B) = 0000 thì ClipD(F) = AB
ii/ Nếu Mã(A) AND Mã(B) 0000 thì ClipD(F) =
iii/ Nếu Mã(A) = 0000 và Mã(B) 0000 thì:
P:=A; Q:=B;
Trong khi |xP -xQ| + |yP - yQ| 2 thì:
Ly trung đim M ca PQ;
Nếu Mã(M) 0000 thì Q:= M.
34
Chương III. Xén hình
Ngược li: P:= M.
ClipD(F) = AP
iv/ Nếu Mã(A) 0000 và Mã(B) = 0000 thì: Đổi vai trò ca A, B và áp dng ii/
v/ Nếu Mã(A) 0000 Mã(B) và [Mã(A) AND Mã(B)]= 0000 thì:
P:=A; Q:=B;
Ly M: trung đim PQ;
Trong khi Mã(M) 0000 và |xP - xQ| + |yP - yQ| 2 thì:
Nếu Mã(M) AND Mã(Q) 0000 thì Q:=M. Ngược li P:=M.
Ly M: trung đim PQ.
Nếu Mã(M) 0000 thì ClipD(F) = . Ngược li, áp dng ii/ ta có:
ClipD(MA) = MA1
ClipD(MB) = MB1
Suy ra: ClipD(F) = A1B1
3.2.1.3. Thut toán Liang - Barsky
Đặt x = x2 - x1 y = y2 - y1
p1 = - x q1 = x1 - xMin
p2 = x q2 = xMax - x1
p3 = - y q3 = y1 - yMin
p4 = y q4 = yMax - y1
thì h bt phương trình giao đim ca F và D có th viết li:
=
1..4k ,Q.tP kk
10 t
Xét các trường hp sau:
i/ k: Pk = 0 và Qk < 0: ( Đường thng song song vi các biên và nm ngoài vùng
hình ch nht )
35
Chương III. Xén hình
ClipD(F) =
ii/ k {1,2,3,4}: Pk 0 hoc Qk 0:
Đặt K1 = {k | Pk > 0 }
K
2 = {k | Pk < 0 }
u
1 = Max({
k
k
P
Q| k K2} {0})
u
2 = Min({
k
k
P
Q| k K1} {1})
Nếu u1 > u2 thì ClipD(F) =
Ngược li: Gi P, Q là 2 đim tha
+=
+=
1
1
1
1
uyyPy
uxxPx
.
.
+=
+=
2
2
1
1
uyyQy
uxxQx
.
.
thì ClipD(F) = PQ
3.2.2. Khi cnh ca vùng hình ch nht to vi trc hoành mt góc α∈(0,Π/2)
Ta dùng phép quay trc ta độ để đưa bài toán v trường hp các cnh ca hình
ch nht song song vi các trc ta độ (hình 3.3).
α
x
O
y
Hình 3.3
Gi R là ma trn quay ca phép đổi trc, ta có:
= R.
X
Y
min
min
X
Y
min
min
= R.
X
Y
max
max
X
Y
max
max
vi R =
cos( ) sin( )
sin( ) cos( )
αα
αα
36