Giáo trình Đồ họa máy tính I (Phần 2) - Phạm Tiến Sơn

. .  
Chuong 3  
. .  
´
˙’  
Giao cua c´ac d¯ˆoi tuong  
.
.
`
˙’  
3.1 Mo d¯ˆau  
.
. .  
`
`
˙’  
Mˆot trong nhu˜ng b`ai to´an quan trong cua d¯ˆo hoa m´ay t´ınh l`a x´ac d¯inh d¯uoc phˆan giao  
.
.
.
.
.
.
. .  
˙’  
´
˙’  
˙’  
˙’  
˙’  
. .  
(c`on goi l`a cˇat x´en) c´ac nguyˆen so: giao d¯iˆem cua hai d¯oan thˇang, giao cua d¯u`ong thˇang  
.
.
.
. .  
.
`
´
`
´
˙’  
v´oi d¯u`ong tr`on hay d¯a d¯a gi´ac lˆoi... Vˆan d¯ˆe o d¯aˆy l`a x´ac d¯inh c´ac d¯oˆi tuong c´o giao nhau  
.
.
´
˙’  
khˆong? Nˆeu c´o th`ı t`ım giao cua chu´ng.  
.
. .  
.
. .  
˙’  
`
`
´
Nhu d¯˜a d¯ˆe cˆap trong Chuong 1, c´ac thuaˆt to´an cˆan thuc hiˆen nhanh nhˆat c´o thˆe d¯uoc  
.
.
.
.
.
. .  
.
.
˙’  
˙’  
´
´
˙’  
. .  
˙’  
d¯ˆe cung cˆap ngu`oi su dung cˆap nhˆat nhanh c´ac kˆet qua thay d¯oˆi trong u´ng dung. Chu´ng  
.
.
.
.
. .  
˙’  
´
˙’  
˙’  
ta s˜e ´ap dung c´ac phuong ph´ap giai t´ıch d¯ˆe giai quyˆet c´ac b`ai to´an trong chuong n`ay.  
.
˙’  
˙’  
3.2 Giao cua hai d¯oan thˇang  
.
-
˙’  
`
˙’  
Mˆot b`ai to´an thˆong dung trong d¯oˆ hoa m´ay t´ınh l`a x´ac d¯inh giao cua hai d¯oan thˇang. Dˆay  
.
.
.
.
.
.
˙’  
l`a mˆot phˆan quyˆet d¯inh cua nhu˜ng thuˆat to´an t`ım giao (chˇang han, giao hai d¯a gi´ac) v`a  
`
´
˙’  
.
.
.
.
˙’  
xuˆat hiˆen trong nhiˆeu tiˆen tr`ınh kh´ac. Phˆan n`ay ´ap dung viˆec tham sˆo ho´a cua d¯oan thˇang  
´
`
´
`
´
˙’  
.
.
.
.
˙’  
´
˙’  
d¯ˆe giai quyˆet b`ai to´an sau  
B`ai to´an  
˙’  
X´ac d¯inh giao d¯iˆem cua chu´ng nˆeu c´o.  
˙’  
˙’  
´
˙’  
Trong mˇat phˇang cho hai d¯oan thˇang  
v`a  
.
.
.
83  
. .  
.
.
˙’  
H`ınh 3.1: C´ac tru`ong hop v´oi hai d¯oan thˇang.  
.
.
3.2.1 Phˆan t´ıch  
. .  
.
.
.
˙’  
˙’  
`
˙’  
C´o nhiˆeu tru`ong hop xay ra v´oi hai d¯oan thˇang nhu trong H`ınh 3.1: Chu´ng c´o thˆe khˆong  
.
.
˙’  
˙’  
´
´
`
˙’  
giao nhau, c´o thˆe cˇat nhau tai mˆot d¯iˆem hoˇac phu lˆap mˆot phˆan lˆen nhau.  
.
.
.
.
. .  
. .  
.
˙’  
´
X´et c´ac phuong tr`ınh tham sˆo tuong u´ng hai d¯oan thˇang  
v`a  
l`a  
.
( ) := + ( − )  
∈ [0 1]  
v`a  
( ) := + ( − )  
∈ [0 1]  
.
.
˙’ ˙’  
˙’  
˙’  
˜
´
˙’  
Viˆec su dung c´ac tham sˆo kh´ac nhau v´oi hai d¯oan thˇang d¯ˆe biˆeu diˆen c´ac d¯iˆem kh´ac nhau  
.
.
.
trˆen hai d¯oan mˆot c´ach d¯oˆc lˆap.  
.
.
.
.
. .  
Ky´ hiˆeu v`a l`a c´ac d¯u`ong thˇang d¯i qua  
. .  
.
. .  
.
˙’  
˙’  
v`a  
tuong u´ng. Phuong ph´ap o  
´
1
2
.
. .  
. .  
˙’  
˙’  
´
˙’  
d¯ˆay tru´oc hˆet l`a t`ım giao d¯iˆem cua hai d¯u`ong thˇang v`a (nˆeu c´o) v`a sau d¯o´ x´ac d¯inh  
1
2
.
. .  
.
. .  
˙’  
`
˙’  
˙’  
giao d¯iˆem c´o nˇam trˆen hai d¯oan thˇang hay khˆong. Trong tru`ong hop hai d¯u`ong thˇang giao  
.
.
-
`
`
´
˙’  
nhau, ta cˆan x´ac d¯inh c´ac tham sˆo v`a  
sao cho ( ) = ( ) Diˆeu kiˆen n`ay chı ra  
0
0
0
0
0
.
.
+ (  
+ (  
−
−
)
)
=
=
+ (  
+ (  
−
−
)
(3.1)  
(3.2)  
0
0
)
0
Suy ra  
0
×
=
0
84  
trong d¯´o  
v`a  
−
−
−
−
:=  
:=  
−
−
−
−
0
. .  
.
`
˙’  
C´o hai tru`ong hop ch´ınh xay ra tuy` theo bˇang khˆong hay khˆong.  
.
kh´ac khˆong  
0
. .  
.
`
´
´
´
Nˆeu khˆong thuoˆc d¯oan [0 1] th`ı  
0
. .  
Trong tru`ong hop n`ay, tˆon tai duy nhˆat tham sˆo  
=
0
.
.
. .  
.
˙’  
kˆet luˆan hai d¯oan thˇang  
´
´
v`a  
khˆong giao nhau; nguoc lai x´ac d¯inh tham sˆo  
tu`  
0
.
.
.
.
.
. .  
˙’  
thuoˆc d¯oan [0 1] th`ı hai d¯oan thˇang giao nhau v`a  
´
Phuong tr`ınh (3.1) hoˇac (3.2). Nˆeu  
0
.
.
.
.
.
˙’  
˙’  
˙’  
toa d¯oˆ d¯iˆem giao c´o thˆe x´ac d¯inh boi ( ) = ( )  
0
0
.
.
.
`
bˇang khˆong  
. .  
Nˆeu = 0 th`ı hai d¯u`ong thˇang v`a song song hoˇac tru`ng nhau. C´ac d¯oan thˇang c´o thˆe  
˙’  
˙’  
˙’  
phu lˆap lˆen nhau nhung d¯iˆeu n`ay chı c´o thˆe xay ra khi hai d¯u`ong thˇang tru`ng nhau. Dˆe  
. .  
´
1
2
.
.
.
. .  
-
˙’  
˙’  
˙’  
˙’  
´
`
˙’  
˙’  
˙’  
˙’  
˙’  
`
˙’  
`
`
˙’  
kiˆem tra d¯iˆeu d¯´o, ta chı cˆan x´ac d¯inh d¯iˆem c´o nˇam trˆen d¯u`ong thˇang d¯i qua hai d¯iˆem  
1
.
00  
´
˙’  
˙’  
v`a khˆong. Ta c´o thuoˆc nˆeu toa d¯oˆ cua n´o thoa m˜an  
(
) = 0 trong d¯o´  
1
.
.
) :=  
. .  
.
−
−
−
00  
(
−
. .  
.
. .  
˙’  
Trong tru`ong hop nguoc lai, hai d¯u`ong thˇang v`a song song v`a khˆong tru`ng nhau; suy  
1
2
.
.
.
˙’  
˙’  
˙’  
´
´
ra hai d¯oan thˇang khˆong giao nhau. Do d¯´o tiˆen tr`ınh cuˆoi cu`ng l`a kiˆem tra hai d¯oan thˇang  
.
.
´
˙’  
c´o phu lˆap lˆen nhau khˆong.  
.
.
-
˙’  
`
`
´
Dˆe thuc hiˆen d¯iˆeu n`ay, ta cˆan x´ac d¯inh hai tham sˆo thuc  
v`a  
. .  
sao cho = ( )  
´
.
.
.
.
. .  
˙’  
`
˙’  
v`a = ( ) V`ı hai d¯u`ong thˇang tru`ng nhau nˆen chı cˆan x´et phuong tr`ınh theo (nˆeu  
1
.
. .  
.
. .  
˙’  
˜
˙’  
khˆong song song v´oi truc tung; nguoc lai su dung phuong tr`ınh theo ) Dˆe d`ang kiˆem tra  
.
.
.
.
`
rˇang  
−
=
=
−
v`a  
−
−
85  
. .  
.
-
˙’  
˙’  
´
`
`
´
Doan thˇang  
bˇat d¯aˆu v`a kˆet thu´c tuong u´ng tai = 0 v`a = 1 v`a bˇang c´ach kiˆem  
.
.
.
.
. .  
. .  
˙’  
´
´
´
˙’  
tra thu´ tu cua bˆon tham sˆo 0 1  
v`a  
chu´ng ta c´o thˆe x´ac d¯inh d¯uoc vi tr´ı tuong d¯oˆi  
.
.
.
.
.
.
˙’  
`
.
`
´
˙’  
˙’  
cua hai d¯oan thˇang. Tˆon tai phˆan chung giu˜a hai d¯oan tru` khi ca hai tham sˆo  
v`a  
cu`ng  
˙’  
.
.
.
.
.
. .  
.
˙’  
˜
`
´
˙’  
nho hon 0 hoˇac l´on hon 1. Trong tru`ong hop c´o d¯oan chung, c´ac d¯iˆem d¯ˆau cuˆoi c´o thˆe dˆe  
.
.
.
.
d`ang x´ac d¯inh tu` c´ac gi´a tri  
v`a  
.
.
˙’  
3.2.2 Thuˆat to´an x´ac d¯inh giao hai d¯oan thˇang  
.
.
.
.
.
.
.
-
`
˙’  
´
´
˙’ ˙’  
˙’  
Trˆen co so cua nhu˜ng thao luˆan trˆen ta c´o thˆe viˆet lai thuˆat to´an chi tiˆet nhu sau. Dˆau  
.
.
.
˙’  
v`ao gˆom bˆon d¯iˆem  
˙’  
v`a ; d¯aˆu ra gˆom giao d¯iˆem (nˆeu c´o) v`a biˆen  
`
´
`
`
´
´
nhˆan mˆot  
.
.
˙’  
˙’  
`
`
trong ba gi´a tri 0 1 hoˇac 2 tuy` theo khˆong tˆon tai d¯iˆem giao, tˆon tai mˆot d¯iˆem giao hoˇac  
.
.
.
.
.
.
´
`
˙’  
hai d¯oan phu lˆap lˆen nhau mˆot phˆan.  
.
.
.
˙’  
1. Khoi tao  
= 0 T´ınh  
.
.
.
˙’  
2. Nˆeu = 0 (tu´c l`a c´ac d¯oan thˇang khˆong song song) thuc hiˆen  
´
.
.
.
.
˙’  
Nˆeu ∈ [0 1] th`ı du`ng, hai d¯oan thˇang khˆong giao nhau.  
´
• T´ınh  
• T´ınh  
0
0
.
.
˙’  
´
Nˆeu  
∈ [0 1] th`ı du`ng, hai d¯oan thˇang khˆong giao nhau.  
0
0
.
. .  
˙’  
´
• Nguoc lai, kˆet luˆan  
= 1 v`a hai d¯oan thˇang giao nhau tai  
.
.
.
.
.
=
+ ( − ) =  
+
(
0
− )  
0
. .  
. .  
˙’  
˙’  
`
˙’  
´
3. Nguoc lai (c´ac d¯oan thˇang song song) v`a nˆeu d¯iˆem nˇam trˆen d¯u`ong thˇang  
.
.
.
• X´ac d¯inh  
v`a  
.
.
.
.
˙’  
cu`ng nho hon 0 hoˇac cu`ng l´on hon 1 th`ı hai d¯oan thˇang  
´
˙’  
˙’  
• Nˆeu ca hai  
v`a  
.
.
. .  
˙’  
= 2; giao hai d¯oan thˇang l`a mˆot d¯oan  
khˆong giao nhau. Nguoc lai, d¯ˇat  
.
.
.
.
.
.
˙’  
`
thˇang (t`ım hai d¯aˆu mu´t?).  
.
˙’ ˙’  
V´ı du 3.2.1 (a) Gia su (1 4) (7 6) (4 8) v`a (7 9) Ta c´o  
.
−
−
−
−
6 2  
3 1  
=
=
= 0  
. .  
Suy ra hai d¯u`ong thˇang  
-
˙’  
´
song song hoˇac tru`ng nhau. Dˆe kˆet luˆan, thay toa d¯oˆ  
. . . .  
˙’  
v`a  
. .  
00  
. .  
˙’  
d¯iˆem v`ao phuong tr`ınh  
(
) ta d¯uoc  
.
−
−
−
−
3 4  
6 2  
00  
(
) =  
=
= −18 = 0  
86  
Vˆay  
∩
= ∅  
.
.
˙’ ˙’  
(b) Gia su (1 3) (10 6) (4 7) v`a (13 1) Ta c´o  
−
−
−
−
9
3
=
=
= −81 = 0  
9 −6  
. .  
.
˙’  
´
Suy ra hai d¯u`ong thˇang  
v`a  
cˇat nhau tai Tu`  
.
−
−
−
−
3
4
0
=
˙’  
=
= −54  
9 −6  
0
2
3
. .  
. .  
c´o  
=
=
∈ [0 1] Giai  
theo Phuong tr`ınh (3.1) ta d¯uoc  
0
0
.
−3 + 923  
(
−
) + (  
−
)
1
3
0
=
=
=
∈ [0 1]  
0
−
9
˙’  
Vˆay hai d¯oan thˇang  
v`a  
=
giao nhau tai  
.
.
.
2
+ ( − ) = (1 3) + (9 3) = (7 5)  
0
3
.
-
˙’  
3.3 Doan thˇang v`a h`ınh chu˜ nhˆat  
.
.
˙’  
Trong phˆan n`ay chu´ng ta t`ım hiˆeu mˆot sˆo thuˆat to´an x´ac d¯inh giao cua d¯oan thˇang v`a h`ınh  
˙’  
`
´
˙’  
.
.
.
.
.
.
. .  
.
´
˙’  
chu˜ nhˆat ( ) (c´o c´ac canh song song v´oi c´ac truc toa d¯ˆo). H`ınh 3.2 chı ra bˆon tru`ong hop  
.
.
.
.
.
.
˙’  
c´o thˆe:  
.
˙’  
• Ca hai d¯iˆem d¯aˆu cuˆoi cua d¯oan thˇang, chaˇng han  
˙’  
˙’  
`
`
´
˙’  
˙’  
nˇam ho`an to`an trong h`ınh chu˜  
.
.
˙’  
˙’  
`
nhˆat. Hiˆen nhiˆen khi d¯o´ phˆan giao ch´ınh l`a d¯oan thˇang n`ay.  
.
.
.
˙’  
˙’  
`
`
˙’  
• Mˆot trong hai d¯ˆau mu´t cua d¯oan thˇang, chaˇng han  
nˇam trong h`ınh chu˜ nhˆat.  
.
.
.
.
.
.
˙’  
• Ca hai d¯iˆem d¯aˆu cuˆoi cua d¯oan thˇang, chaˇng han  
˙’  
˙’  
`
`
´
˙’  
˙’  
nˇam ngo`ai h`ınh chu˜ nhˆat nhung  
.
.
.
.
.
´
c´o giao kh´ac trˆong v´oi h`ınh chu˜ nhˆat.  
.
.
˙’  
• Ca hai d¯iˆem d¯ˆau cuˆoi cua d¯oan thˇang (chˇang han  
˙’  
˙’  
`
`
´
`
˙’  
˙’  
˙’  
) nˇam ho`an to`an vˆe “nua mˇat  
.
.
.
.
.
˙’  
`
˙’  
˙’  
phˇang ngo`ai” x´ac d¯inh boi mˆot canh (bˆen tr´ai) cua h`ınh chu˜ nhˆat. Ta c´o phˆan giao  
.
.
.
.
. .  
.
`
´
´
˙’  
˙’  
˙’  
bˇang trˆong. T`ınh huoˆng n`ay thu`ong xay ra khi h`ınh chu˜ nhˆat d¯u nho v`a do d¯´o c´o  
.
.
`
`
nhiˆeu d¯oan nˇam ngo`ai h`ınh chu˜ nhˆat.  
.
.
87  
.
H`ınh chu˜ nhˆat ( )  
.
.
˙’  
H`ınh 3.2: C´ac d¯oan thˇang v`a h`ınh chu˜ nhˆat ( )  
.
.
•
—
—
max  
•
•
•
min  
|
min  
max  
. .  
.
˙’  
´
˙’ ˙’  
H`ınh 3.3: C´ac tru`ong hop chaˆp nhˆan hoˇac loai bo cua mˆot d¯oan thˇang.  
.
.
.
.
.
.
. .  
.
˙’  
´
´
˙’  
H˜ay quan s´at vi tr´ı tuong d¯oˆi cua d¯oan thˇang v`a h`ınh chu˜ nhˆat ( ) chu´ng ta s˜e thˆay  
.
.
.
.
-
˙’  
˙’  
`
˙’  
`
´
˙’  
˙’ ˙’  
c´o nhiˆeu t`ınh huoˆng c´o thˆe xay ra m`a thuaˆt to´an phai xu ly´. Doan thˇang c´o thˆe nˇam bˆen  
.
.
. .  
.
˙’  
´
´
˙’  
˙’  
tr´ai, bˆen phai, ph´ıa du´oi hay ph´ıa trˆen cua h`ınh chu˜ nhˆat. Hoˇac n´o c´o thˆe cˇat bˆat ky` mˆot  
.
.
.
.
˙’  
´
´
`
´
`
˙’  
(hay hai) canh h`ınh chu˜ nhˆat, v`a vˆan vˆan. T´om lai vˆan d¯ˆe c´o ve rˇac rˆoi v`ı c´o thˆe c´o nhiˆeu  
.
.
.
.
˙’  
˙’  
`
´
˙’  
˙’ ˙’  
˙’  
kha nˇang kh´ac nhau c´o thˆe xay ra. Do d¯o´ chu´ng ta cˆan mˆot c´ach tˆo chu´c v`a tiˆep cˆan hiˆeu  
.
.
.
. .  
.
.
˙’  
˙’  
´
`
´
qua giai quyˆet b`ai to´an trong tru`ong hop tˆong qu´at v`a t´ınh to´an c´ac d¯iˆem d¯ˆau cuˆoi m´oi  
.
˙’  
`
˙’  
˙’  
cua phˆan giao. T´ınh hiˆeu qua d¯ˇac biˆet quan trong do c´o thˆe c´o h`ang trˇam, thˆam ch´ı h`ang  
.
.
.
.
.
.
˙’  
˜
`
`
`
˙’  
ng`an, d¯oan thˇang trong mˆot h`ınh v`a mˆoi d¯oan cˆan loai bo phˆan nˇam ngo`ai h`ınh chu˜ nhˆat.  
.
.
.
.
.
.
˙’  
`
´
˙’  
Phˆan n`ay tr`ınh b`ay mˆot sˆo thuaˆt to´an t`ım giao cua d¯oan thˇang v`a h`ınh chu˜ nhˆat.  
.
.
.
.
. .  
. .  
.
. .  
˙’  
`
´
`
˙’  
Tru´oc hˆet nhˆan x´et rˇang c´o hai tru`ong hop tˆam thu`ong (xem H`ınh 3.3) c´o thˆe xay ra:  
.
.
. .  
.
. .  
˙’  
˙’  
`
`
´
`
´
1. Tru`ong hop tˆam thu`ong d¯ˆau tiˆen, goi l`a chaˆp nhˆan, l`a hai d¯iˆem d¯aˆu cuˆoi d¯oan thˇang  
.
.
.
.
88  
.
.
chu´a trong h`ınh chu˜ nhˆat.  
.
. .  
.
. .  
.
˙’  
˙’  
`
`
´
˙’ ˙’  
˙’  
2. Tru`ong hop tˆam thu`ong thu´ hai, goi l`a loai bo, ca hai d¯iˆem d¯aˆu cuˆoi cua d¯oan thˇang  
.
.
.
.
.
.
.
`
˙’  
`
˙’  
˙’  
˙’  
nˇam ho`an to`an vˆe nua mˇat phˇang ngo`ai x´ac d¯inh boi mˆot canh cua h`ınh chu˜ nhˆat.  
.
.
.
.
.
. .  
3.3.1 T`ım giao bˇang c´ach giai hˆe c´ac phuong tr`ınh  
`
˙’  
.
. .  
.
.
˙’  
`
´
`
C´ach tiˆep cˆan ch´ınh trong tru`ong hop v`a khˆong d¯oˆng th`oi nˇam trong ( ) l`a kiˆem tra  
.
.
.
.
˙’  
´
˙’  
d¯oan thˇang  
.
c´o giao v´oi c´ac canh cua h`ınh chu˜ nhˆat khˆong; nˆeu c´o, x´ac d¯inh c´ac giao  
.
.
.
.
˙’  
˙’  
`
`
˙’  
d¯iˆem v`a suy ra phˆan giao. Do d¯´o d¯ua vˆe b`ai to´an x´ac d¯inh giao cua hai d¯oan thˇang v`a c´o  
.
.
.
. .  
˙’  
´
`
`
˙’  
thˆe ´ap dung nhu˜ng kˆet qua trong Phˆan 3.2. Theo phuong ph´ap n`ay, chu´ng ta cˆan t´ınh to´an  
.
˙’  
`
˙’  
˙’  
v`a kiˆem tra nhiˆeu kha nˇang; do d¯o´ khˆong hiˆeu qua.  
.
3.3.2 Thuˆat to´an chia nhi phˆan  
.
.
. .  
.
. .  
´
˙’  
˙’  
Y ch´ınh cua thuˆat to´an n`ay tuong tu thuˆat to´an t`ım nghiˆem cua phuong tr`ınh ( ) = 0  
.
.
.
.
.
. .  
`
trˆen d¯oan [ ] v´oi liˆen tuc v`a ( ) ( ) 0 bˇang phuong ph´ap chia nhi phˆan (bisection):  
.
.
.
.
. .  
˙’  
˙’  
`
´
˙’  
X´ac d¯inh c´ac giao d¯iˆem (nˆeu c´o) cua d¯oan thˇang  
v`a h`ınh chu˜ nhˆat bˇang phuong ph´ap  
.
.
.
chia nhi phˆan.  
.
. .  
. .  
.
˙’  
´
´
´
˙’  
˙’  
Thuˆat to´an tru´oc hˆet kiˆem tra hai tru`ong hop chaˆp nhˆan v`a loai bo. Nˆeu khˆong xay  
.
.
.
.
.
˙’  
`
`
`
`
˙’  
ra, n´o chia d¯oan thˇang th`anh hai phˆan bˇang nhau v`a loai bo nhu˜ng phˆan nˇam ngo`ai h`ınh  
.
.
.
. .  
.
. .  
.
˙’  
`
`
˙’  
chu˜ nhˆat. Sau d¯o´ phˆan c`on lai d¯uoc xu ly´ lˇap lai bˇang c´ach kiˆem tra c´ac Tru`ong hop 1 v`a  
.
.
.
.
.
.
.
`
´
´
`
´
`
2 v`a tiˆep tuc phˆan chia (nˆeu cˆan) cho d¯ˆen khi phˆan c`on lai ho`an to`an nˇam trong h`ınh chu˜  
.
.
.
.
. .  
`
˙’  
˙’  
˙’  
˙’  
nhˆat hoˇac nˇam trong nua mˇat phˇang ngo`ai x´ac d¯inh boi mˆot d¯u`ong thˇang bˆen tr´ai, bˆen  
.
.
.
.
.
. .  
˙’  
phai, bˆen du´oi hoˇac bˆen trˆen n`ao d¯o´.  
.
.
-
˙’  
˙’  
`
`
´
Dˆe x´ac d¯inh c´ac d¯iˆem d¯ˆau cuˆoi khi n`ao nˇam ngo`ai hay trong mˆot h`ınh chu˜ nhˆat, chu´ng  
.
.
.
.
.
˙’  
˙’  
. .  
˜
˜
˙’  
˙’  
ta d¯ˇat mˆot m˜a “nua mˇat phˇang” cho mˆoi d¯iˆem. Mˆoi canh cua h`ınh chu˜ nhˆat x´ac d¯inh mˆot  
.
.
.
.
.
.
.
. .  
.
˙’  
˙’  
˙’  
˙’  
˙’  
d¯u`ong thˇang d¯i qua n´o; d¯u`ong thˇang n`ay chia mˇat phˇang th`anh nua mˇat phˇang trong v`a  
.
.
.
.
.
. .  
.
˙’  
˙’  
´
˙’  
˙’  
˙’  
nua mˇat phˇang ngo`ai nhu trong H`ınh 3.4 d¯oˆi v´oi canh bˆen phai: Ta quy u´oc nua mˇat phˇang  
.
.
.
. .  
.
.
.
. .  
.
˙’  
˙’  
trong tuong u´ng chu´a h`ınh chu˜ nhˆat; nguoc lai l`a nua mˇat phˇang ngo`ai.  
.
.
.
.
.
˙’  
˙’  
˜
˙’  
´
´
˙’  
˙’  
Do c´o bˆon canh, ta s˜e su dung chuoˆi bˆon bit d¯ˆe m˜a ho´a mˆot d¯iˆem trong mˇat phˇang.  
.
.
.
.
.
. .  
˜
`
˙’  
Ky´ hiˆeu ( ) l`a m˜a cua d¯iˆem  
Mˆoi bit trong tu` m˜a d¯uoc d¯aˇt bˇang 1 (TRUE) hoˇac 0  
.
.
.
.
.
. .  
.
´
`
(FALSE); bˆon bit trong tu` m˜a ( ) tuong u´ng c´ac d¯iˆeu kiˆen sau:  
.
89  
( )  
.
˙’  
Nua  
˙’  
mˇat phˇang  
.
ngo`ai  
.
˙’  
Nua mˇat phˇang trong  
˙’  
.
max  
.
. .  
.
˙’  
˙’  
˙’  
˙’  
H`ınh 3.4: C´ac nua mˇat phˇang d¯uoc x´ac d¯inh boi canh bˆen phai.  
.
.
.
.
.
.
.
˙’  
`
˙’  
´
´
˙’  
˙’  
• Bit thu´ nhˆat d¯ˇat bˇang 1 nˆeu d¯iˆem thuoˆc nua mˇat phˇang ngo`ai x´ac d¯inh boi canh  
.
.
.
.
.
bˆen tr´ai;  
.
.
.
˙’  
`
˙’  
thuˆoc nua mˇat phˇang ngo`ai x´ac d¯inh boi canh  
´
˙’  
˙’  
• Bit thu´ hai d¯aˇt bˇang 1 nˆeu d¯iˆem  
.
.
.
.
.
˙’  
bˆen phai;  
.
.
.
˙’  
`
˙’  
´
˙’  
˙’  
• Bit thu´ ba d¯aˇt bˇang 1 nˆeu d¯iˆem thuˆoc nua mˇat phˇang ngo`ai x´ac d¯inh boi canh bˆen  
.
.
.
.
.
trˆen;  
. .  
.
.
˙’  
`
˙’  
´
˙’  
˙’  
• Bit thu´ tu d¯aˇt bˇang 1 nˆeu d¯iˆem thuoˆc nua mˇat phˇang ngo`ai x´ac d¯inh boi canh bˆen  
.
.
.
.
.
. .  
du´oi.  
.
˙’  
˙’  
`
`
Do d¯´o c´ac d¯iˆem nˇam trong h`ınh chu˜ nhˆat c´o m˜a 0000; c´ac d¯iˆem thuoˆc vu`ng nˇam ph´ıa  
.
.
.
. .  
.
.
˙’  
˙’  
trˆen v`a bˆen tr´ai h`ınh chu˜ nhˆat d¯uoc g´an tu` m˜a l`a 1001. Viˆec xˆay dung m˜a cua mˆot d¯iˆem  
.
.
.
.
.
.
. .  
.
˙’  
`
´
˙’  
d¯on thuaˆn l`a bˆon ph´ep so s´anh: Ho`anh d¯ˆo cua d¯iˆem d¯uoc so s´anh v´oi canh bˆen tr´ai  
;
min  
.
.
.
. .  
.
. .  
. .  
˙’  
˙’  
tung d¯oˆ d¯uoc so s´anh v´oi canh bˆen du´oi min; v.v. C´ac d¯u`ong thˇang d¯i qua c´ac canh cua  
.
.
.
.
.
˙’  
˙’  
h`ınh chu˜ nhˆat chia mˇat phˇang th`anh ch´ın vu`ng. C´ac d¯iˆem trong mˆot vu`ng c´o cu`ng mˆot m˜a  
.
.
.
.
.
.
˙’  
´
˙’  
˙’  
nhu chı ra trong H`ınh 3.5. V`ı d¯on vi nho nhˆat c´o thˆe d¯oc, ghi trˆen m´ay t´ınh l`a byte, nˆen  
.
.
.
. .  
.
.
˙’  
˙’  
˙’  
´
´
˙’  
chu´ng ta su dung kiˆeu byte d¯ˆe m˜a ho´a mˆot d¯iˆem trong d¯´o bˆon bit thˆap tuong u´ng tu` m˜a  
.
.
. .  
.
`
´
´
˙’  
˙’  
cua n´o v`a bˆon bit cao d¯uoc d¯aˇt bˇang khˆong. Thu tuc Encode() thuc hiˆen tiˆen tr`ınh n`ay:  
.
.
.
.
.
void Encode(Point2D P, float Left, float Right, float Bottom, float Top,  
char *Code)  
{
90  
1001  
1000  
0001  
0000  
0101  
0100  
max  
min  
1010  
0010  
. .  
0110  
min  
max  
.
.
.
H`ınh 3.5: C´ac tu` m˜a tuong u´ng h`ınh chu˜ nhˆat ( )  
.
*Code = 0;  
if (P.x < Left) *Code |= 8;  
if (P.x > Right) *Code |= 4;  
if (P.y < Bottom) *Code |= 2;  
if (P.y > Top) *Code |= 1;  
}
. .  
.
. .  
˙’  
˙’  
C´ac d¯iˆem  
d¯uoc m˜a ho´a th`anh c´ac tu` m˜a ( ) v`a ( ) Trˆen co so d¯´o chu´ng ta  
.
.
.
˙’  
˙’  
`
˙’  
nˇam ho`an to`an bˆen trong h`ınh chu˜ nhˆat hoˇac thuoˆc nua  
c´o thˆe x´ac d¯inh d¯oan thˇang  
.
.
.
.
.
˙’  
mˇat phˇang ngo`ai n`ao d¯´o. Ta c´o  
.
´
´
´
˙’  
1. Chˆap nhˆan nˆeu v`a chı nˆeu ( ) = ( ) = 0  
.
´
´
˙’  
˙’  
2. Loai bo nˆeu v`a chı nˆeu [ ( ) AND ( )] != 0.  
.
. .  
˙’ ˙’  
.
.
˙’  
Trˆen co so cua nhu˜ng phˆan t´ıch trˆen ta c´o thˆe viˆet lai thuˆat to´an chia nhi phˆan nhu  
´
.
.
.
sau:  
.
´
´
1. Nˆeu ( ) = 0 v`a ( ) = 0 kˆet luˆan  
∩ ( ) =  
; thuˆat to´an du`ng.  
.
.
´
´
´
2. Nˆeu [ ( ) AND ( )] != 0 kˆet luˆan  
∩ ( ) = ∅; kˆet thu´c thuaˆt to´an.  
.
.
91  
.
.
´
3. Nˆeu ( ) = 0 v`a ( ) = 0 (tu´c ∈ ( ) v`a ∈ ( )) thuc hiˆen  
.
.
-
• Dˇat  
=
=
.
.
.
. .  
´
˙’  
• Trong khi d¯ˆo d`ai k  
k l´on hon (sˆo duong nho tu`y y´)  
.
-
˙’  
˙’  
) = 0 th`ı cˆap nhˆat  
Dˇat  
l`a trung d¯iˆem cua d¯oan  
.
.
. .  
nguoc lai  
´
Nˆeu  
(
=
=
.
.
.
.
´
´
• Kˆet luˆan  
∩ ( ) =  
; kˆet thu´c thuˆat to´an.  
.
.
.
˙’  
´
˙’  
4. Nˆeu ( ) = 0 v`a ( ) = 0 (tu´c ∈ ( ) v`a ∈ ( )) ho´an d¯oˆi vai tr`o cua v`a  
;
. .  
lˇap lai Bu´oc 3.  
.
.
. .  
.
5. Nguoc lai thuc hiˆen  
.
.
.
.
-
• Dˇat  
=
=
.
.
.
• Trong khi d¯ˆo d`ai k  
k l´on hon  
.
-
˙’  
˙’  
Dˇat  
.
l`a trung d¯iˆem cua d¯oan  
.
. .  
´
Nˆeu  
´
(
) = 0 ´ap dung Bu´oc 3 cho hai d¯oan  
v`a  
Kˆet luˆan  
∩( ) =  
.
.
.
´
; kˆet thu´c thuˆat to´an.  
.
´
Nˆeu [ ( ) AND ( )] != 0 d¯aˇt  
=
=
.
´
Nˆeu [ ( ) AND ( )] != 0 d¯ˇat  
.
´
´
´
Nˆeu [ ( ) AND ( )] != 0 kˆet luˆan  
∩ ( ) = ∅; kˆet thu´c thuˆat to´an.  
.
.
—
•
max  
1
3
•
2
•
•
•
—
min  
|
|
min  
max  
˙’  
H`ınh 3.6: Minh hoa cua thuaˆt to´an chia nhi phˆan.  
.
.
.
.
˙’  
V´ı du 3.3.1 X´et v´ı du t`ım giao cua h`ınh chu˜ nhˆat  
.
.
.
2
:= {(  
) ∈  
| 3 ≤ ≤ 7 2 ≤ ≤ 5}  
92  
. .  
v`a hai d¯iˆem (5 3) v`a (10 5) Ba bu´oc d¯ˆau tiˆen cua thuˆat to´an chia nhi phˆan cho trong  
˙’  
`
˙’  
.
.
˙’  
bang sau  
( )  
( ) E(M)  
15  
2
25  
4
1
2
(5 3) (10 5)  
15  
(
(
4) 0000 0100 0100  
7
(5 3)  
(
4)  
)
0000 0100 0000  
0000 0100 0000  
2
2
3 (245 27 ) (125 4) (585  
)
15  
4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. .  
.
.
˙’  
`
˙’  
H`ınh 3.6 minh hoa ba bu´oc lˇap d¯ˆau tiˆen cua thuaˆt to´an chia nhi phˆan v´oi c´ac d¯iˆem giu˜a  
.
.
.
.
. .  
.
tuong u´ng l`a  
v`a  
1
2
3
. .  
Nhˆan x´et rˇang phuong ph´ap chia nhi phˆan khˆong hiˆeu qua do t´ınh to´an nhiˆeu d¯ˆe x´ac  
˙’  
`
`
˙’  
.
.
.
˙’  
d¯inh c´ac giao d¯iˆem.  
.
3.3.3 Thuˆat to´an Cohen-Sutherland  
.
. .  
. .  
.
.
´
˙’  
Thuˆat to´an Cohen-Sutherland thu`ong d¯uoc su dung trong c´ac u´ng dung cˇat x´en do t´ınh  
.
.
.
.
˙’  
˙’  
´
´
´
´
˙’  
˙’  
hiˆeu qua v`a phˆo biˆen cua n´o. Thuˆat to´an cung cˆap mˆot c´ach tiˆep cˆan chia d¯ˆe tri rˆat hiˆeu  
.
.
.
.
.
.
.
˙’  
qua giai b`ai to´an x´ac d¯inh giao cua d¯oan thˇang v`a h`ınh chu˜ nhˆat.  
˙’ ˙’  
˙’  
.
.
.
. .  
.
. .  
. .  
˙’  
´
Tuong tu phuong ph´ap chia nhi phˆan, thuaˆt to´an Cohen-Sutherland tru´oc hˆet kiˆem  
.
.
.
. .  
.
˙’  
´
´
˙’  
˙’  
tra Tru`ong hop 1 (chaˆp nhˆan) v`a 2 (loai bo). Nˆeu khˆong xay ra, n´o chia d¯oan thˇang th`anh  
.
.
.
.
.
. .  
.
`
`
`
`
˙’  
˙’  
hai phˆan v`a loai bo phˆan nˇam ngo`ai h`ınh chu˜ nhˆat. Sau d¯o´ phˆan c`on lai d¯uoc xu ly´ lˇap  
.
.
.
.
.
. .  
.
˙’  
`
´
´
`
´
lai bˇang c´ach kiˆem tra c´ac Tru`ong hop 1 v`a 2 v`a tiˆep tuc phˆan chia (nˆeu cˆan) cho d¯ˆen khi  
.
.
.
.
.
`
`
˙’  
`
˙’  
phˆan c`on lai ho`an to`an nˇam trong h`ınh chu˜ nhˆat hoˇac nˇam trong nua mˇat phˇang ngo`ai x´ac  
.
.
.
.
.
. .  
. .  
˙’  
˙’  
˙’  
d¯inh boi mˆot d¯u`ong thˇang bˆen tr´ai, bˆen phai, bˆen du´oi hoˇac bˆen trˆen n`ao d¯´o.  
.
.
.
. .  
.
. .  
.
˙’  
Thuˆat to´an d¯ˇac biˆet hiˆeu qua trong hai tru`ong hop chung: Trong Tru`ong hop 1, h`ınh  
.
.
.
.
.
.
.
.
.
.
˙’  
´
`
´
`
´
˙’  
chu˜ nhˆat chu´a tˆat ca hoˇac hˆau hˆet vu`ng hiˆen thi, v`a do d¯´o phˆan l´on c´ac nguyˆen so l`a chˆap  
.
.
.
. .  
.
. .  
.
`
´
˙’  
nhˆan. Tru`ong hop 2 nay sinh trong b`ai to´an chon c´ac d¯ˆoi tuong nˇam trong h`ınh chu˜ nhˆat  
.
.
.
.
.
bao quanh con chay (xem [9]).  
.
. .  
.
˙’  
´
`
˙’  
Nˆeu khˆong xay ra hai Tru`ong hop 1 hoˇac 2 chu´ng ta cˆan phˆan chia d¯oan thˇang  
.
.
.
. .  
˙’  
`
´
˙’  
thˇang x´ac d¯inh boi canh cua h`ınh chu˜ nhˆat chia d¯oan thˇang  
˙’  
th`anh hai phˆan sao cho mˆot hoˇac ca hai d¯oan con c´o thˆe bi loai bo. Muˆon vˆay x´et d¯u`ong  
.
.
.
.
.
.
.
.
˙’  
˙’  
`
`
˙’  
˙’  
˙’  
th`anh hai phˆan: Phˆan  
. .  
˙’ ˙’  
.
.
.
.
.
˙’  
˙’  
˙’  
thuˆoc nua mˇat phˇang ngo`ai s˜e bi loai bo. C´o thˆe chon c´ac canh d¯ˆe kiˆem tra theo thu´ tu tuy`  
.
.
.
.
.
.
.
.
.
.
.
.
`
´
˙’  
˙’  
y´, nhung cˆan nhˆat qu´an trong thuaˆt to´an. Chu´ng ta s˜e su dung thu´ tu tu` tr´ai sang phai  
.
.
.
93  
.
. .  
.
.
. .  
. .  
.
`
`
v`a tu` du´oi lˆen trˆen trong tu` m˜a. Chu´ y´ rˇang, bit trong tu` m˜a d¯uoc d¯ˇat bˇang 1 tuong u´ng  
.
.
.
˙’  
˙’  
`
´
˙’  
˙’  
canh cˆan x´et: Nˆeu, chˇang han, thuoˆc nua mˇat phˇang ngo`ai  
v`a  
khˆong thoa  
min  
.
.
.
.
. .  
.
.
˙’  
˙’  
phai thuoˆc nua mˇat phˇang trong  
˙’  
˙’  
˙’  
Tru`ong hop 2 th`ı d¯iˆem  
.
v`a d¯oan thˇang  
min  
.
.
.
. .  
.
˙’  
Do d¯o´ thuaˆt to´an luˆon luˆon chon mˆot d¯iˆem thuˆoc nua mˇat  
´
˙’  
˙’  
˙’  
phai cˇat d¯u`ong thˇang  
.
=
min  
.
.
.
.
.
.
. .  
. .  
. .  
˙’  
˙’  
˙’  
˙’  
phˇang ngo`ai v`a su dung tu` m˜a cua n´o d¯ˆe x´ac d¯inh canh d¯uoc x´et; canh d¯uoc chon tuong  
.
.
.
.
.
.
.
.
. .  
. . .  
.
. .  
.
`
˙’  
u´ng bit d¯uoc d¯ˇat bˇang 1 theo thu´ tu tu` tr´ai sang phai v`a tu` du´oi lˆen trˆen; tu´c l`a, n´o l`a bit  
.
.
.
.
`
´
bˆen tr´ai nhˆat bˇang 1 trong tu` m˜a.  
. .  
.
`
Thuˆat to´an gˆom c´ac bu´oc nhu sau.  
.
.
˙’  
`
1. M˜a ho´a c´ac d¯iˆem  
bˇang c´ac tu` m˜a ( ) v`a ( )  
´
2. Nˆeu ( ) = ( ) = 0 th`ı  
∩ ( ) =  
´
3. Nˆeu [ ( ) AND ( )] != 0 th`ı  
∩ ( ) = ∅  
. .  
.
.
˙’  
˙’  
`
˙’  
4. Nguoc lai chon mˆot d¯iˆem nˇam ngo`ai v`a dua v`ao tu` m˜a cua n´o d¯ˆe x´ac d¯inh canh s˜e  
.
.
.
.
.
.
.
˙’  
˙’  
´
`
`
˙’  
cˇat. Sau d¯o´ x´ac d¯inh giao d¯iˆem, loai bo phˆan nˇam ngo`ai. Cˆap nhˆat d¯iˆem ngo`ai l`a giao  
.
.
.
.
. .  
d¯iˆem v`a m˜a ho´a n´o. Chuyˆen sang Bu´oc 2.  
˙’  
˙’  
-
˙’  
˙’  
˙’  
V´ı du 3.3.2 (a) Chˇang han, x´et d¯oan thˇang  
trong H`ınh 3.7. Diˆem  
. .  
c´o m˜a 0000 v`a  
.
.
.
.
-
˙’  
d¯iˆem  
˙’  
˙’  
c´o m˜a 0110. Doan thˇang  
khˆong thoa m˜an c´ac Tru`ong hop 1 v`a 2. Do d¯´o  
.
.
.
. .  
˙’  
chon d¯iˆem ngo`ai l`a  
˙’  
´
˙’  
´
˙’  
Tu` m˜a ( ) cho biˆet d¯oan thˇang  
cˇat c´ac d¯u`ong thˇang bˆen phai  
.
.
. .  
.
.
.
˙’  
˙’  
˙’  
˙’  
=
v`a bˆen du´oi  
=
Theo thu´ tu kiˆem tra, chu´ng ta su dung canh bˆen phai d¯ˆe  
max  
min  
.
.
.
.
˙’  
´
˙’  
˙’  
v`a cˆap nhˆat tu` m˜a cua  
cˇat d¯oan thˇang  
l`a  
Thay d¯iˆem  
l`a  
l`a 0000. Trong  
.
.
.
. .  
. .  
.
˙’  
´ ´  
´
´
˙’  
bu´oc lˇap kˆe tiˆep, kiˆem tra ta thˆay  
.
thoa m˜an Tru`ong hop 1, do d¯o´ kˆet thu´c thuaˆt to´an.  
.
.
. .  
.
-
˙’  
M˜a cua c´ac d¯iˆem  
˙’  
˙’  
(b) X´et d¯oan thˇang  
v`a tuong u´ng l`a 1001 v`a 0010. Doan  
.
.
. .  
.
˙’  
˙’  
thˇang  
˙’  
˙’  
. .  
˙’  
khˆong thoa m˜an c´ac Tru`ong hop 1 v`a 2. Chon d¯iˆem ngo`ai, chaˇng han  
Do  
.
.
.
.
.
. .  
. .  
`
´
˙’  
bit kh´ac khˆong d¯aˆu tiˆen trong tu` m˜a cua  
l`a bit thu´ nhˆat nˆen d¯u`ong thˇang d¯uoc chon  
.
.
.
. .  
.
.
˙’  
˙’  
l`a  
=
Giao cua  
v´oi d¯u`ong thˇang n`ay tai  
Cˆap nhˆat  
l`a tuong u´ng tu` m˜a  
˙’  
min  
.
.
.
. .  
. .  
.
´ ´  
˙’  
0001. Bu´oc lˇap kˆe tiˆep,  
khˆong thoa m˜an c´ac Tru`ong hop 1 v`a 2, nˆen chon d¯iˆem ngo`ai,  
.
.
.
.
. .  
˙’  
chˇang han l`a  
˙’  
´
˙’  
Chı c´o mˆot bit (thu´ ba) trong ( ) kh´ac khˆong, nˆen chon d¯u`ong thˇang cˇat  
.
.
.
˙’  
. .  
l`a  
=
Ta c´o  
. .  
=
∩
Do d¯o´ cˆap nhˆat l`a v`a cˆap nhˆat m˜a cua n´o l`a 0000.  
max  
max  
.
.
.
.
.
. .  
´
´
´
˙’  
Lˇap lai mˆot bu´oc nu˜a, ta d¯uoc  
.
˙’  
ph´at tu` d¯iˆem  
=
∩ ( ) Kˆet qua n`ay cu˜ng nhˆan d¯uoc nˆeu ta xuˆat  
.
.
.
.
.
.
94  
•
•
•
•
•
•
•
•
•
˙’  
H`ınh 3.7: Minh hoa cua thuˆat to´an Cohen-Sutherland.  
.
.
.
˙’  
V´ı du 3.3.3 X´et v´ı du t`ım giao cua h`ınh chu˜ nhˆat  
.
.
.
2
:= {(  
) ∈  
| 0 ≤ ≤ 8 0 ≤ ≤ 4}  
. .  
. .  
˙’  
˙’  
v`a hai d¯iˆem (−1 −2) v`a (10 9) Phuong tr`ınh d¯u`ong thˇang  
c´o dang  
.
=
− 1;  
. .  
. .  
hay tuong d¯uong  
= + 1  
. .  
˙’ ˙’  
´
˙’  
˙’  
C´ac bu´oc cua thuˆat to´an Cohen Sutherland c´o thˆe tˆong kˆet trong bang sau  
.
. .  
-
˙’  
´
( )  
( ) CodeOut Du`ong thˇang cˇat Toa d¯ˆo giao  
.
.
1 (−1 −2) (10 9) 1010 0101  
1010  
0010  
0101  
0001  
=
=
=
=
(0 −1)  
(1 0)  
(8 7)  
(5 4)  
min  
min  
max  
max  
2
3
4
5
(0 −1) (10 9) 0010 0101  
(1 0)  
(1 0)  
(1 0)  
(10 9) 0000 0101  
(8 7) 0000 0001  
(5 4) 0000 0000  
.
˙’  
˙’  
˙’  
´
˙’  
Vˆay giao cua d¯oan thˇang  
v`a h`ınh chu˜ nhˆat l`a d¯oan thˇang nˆoi hai d¯iˆem (1 0) v`a  
.
.
.
.
(5 4)  
.
. .  
. .  
.
. .  
˙’  
˙’  
Nhu˜ng y´ tuong trˆen d¯uoc tˆap hop trong thu tuc Cohen Sutherland(). C´ac bu´oc lˇap  
.
.
.
.
.
. .  
.
˙’  
. .  
˙’  
˜
´
`
`
´
˙’  
kiˆem tra c´ac tru`ong hop chˆap nhˆan hay loai bo. Mˆoi lˆan trong v`ong lˇap hai d¯iˆem d¯ˆau cuˆoi  
.
.
.
.
.
.
˙’  
´
˙’  
d¯uoc cˆap nhˆat cu`ng v´oi tu` m˜a cua chu´ng v`a sau d¯´o tiˆen h`anh kiˆem tra.  
.
.
.
95  
.
-
˙’  
´
`
˙’  
˙’  
Dˆe thuˆat to´an hiˆeu qua hon, chu´ng ta nˆen t´ınh c´ac hˆe sˆo g´oc chı mˆot lˆan. Tuy nhiˆen,  
.
.
.
.
.
. .  
˙’  
´
´
˙’  
˙’  
˙’  
˙’  
v´oi cai tiˆen n`ay, thuˆat to´an khˆong phai l`a hiˆeu qua nhˆat. Do viˆec kiˆem tra v`a loai bo d¯uoc  
.
.
.
.
.
.
. .  
.
´
´
˙’  
thuc hiˆen theo mˆot thu´ tu nhˆat d¯inh, thuaˆt to´an d¯oˆi khi thuc hiˆen tiˆen tr`ınh loai bo khˆong  
.
.
.
.
.
.
.
.
.
. .  
.
.
˙’  
˙’  
˙’  
`
´
˙’  
˙’  
cˆan thiˆet, chaˇng han trong tru`ong hop giao d¯iˆem cua d¯oan thˇang v´oi mˆot canh cua h`ınh  
.
.
.
.
.
.
.
.
˙’  
chu˜ nhˆat l`a “d¯iˆem giao ngo`ai”; tu´c l`a, khi n´o khˆong nˇam trˆen biˆen cua h`ınh chu˜ nhˆat (v´ı  
`
˙’  
trong H`ınh 3.7). Thuˆat to´an cua Nicholl v`a Lee tr´anh viˆec  
.
.
˙’  
du, d¯iˆem trˆen d¯oan thˇang  
˙’  
˙’  
.
.
.
.
.
˙’  
`
˙’  
`
t´ınh to´an c´ac giao d¯iˆem ngo`ai bˇang c´ach phˆan chia mˇat phˇang th`anh nhiˆeu vu`ng hon (xem  
.
[14]).  
Boolean Cohen_Sutherland(Point2D *A, Point2D *B, float Left,  
float Right, float Bottom, float Top)  
{
char CodeA, CodeB, CodeOut;  
float x, y;  
Encode(*A, Left, Right, Bottom, Top, &CodeA);  
Encode(*B, Left, Right, Bottom, Top, &CodeB);  
while (1)  
{
if ((CodeA == 0) && (CodeB == 0)) return True;  
if ((CodeA & CodeB) != 0) return False;  
if (CodeA != 0) CodeOut = CodeA;  
else CodeOut = CodeB;  
if ((CodeOut & 8) != 0) // Left  
{
x = Left;  
y = (*A).y + ((*B).y - (*A).y)*(x - (*A).x)/((*B).x - (*A).x);  
}
else if ((CodeOut & 4) != 0) // Right  
{
x = Right;  
y = (*A).y + ((*B).y - (*A).y)*(x - (*A).x)/((*B).x - (*A).x);  
}
else if ((CodeOut & 2) != 0) // Bottom  
96  
{
}
y = Bottom;  
x = (*A).x + ((*B).x - (*A).x)*(y - (*A).y)/((*B).y - (*A).y);  
else // if ((CodeOut & 1) != 0) // Top  
{
y = Top;  
x = (*A).x + ((*B).x - (*A).x)*(y - (*A).y)/((*B).y - (*A).y);  
}
if (CodeOut == CodeA)  
{
(*A).x = x;  
(*A).y = y;  
Encode(*A, Left, Right, Bottom, Top, &CodeA);  
}
else  
{
(*B).x = x;  
(*B).y = y;  
Encode(*B, Left, Right, Bottom, Top, &CodeB);  
}
}
}
3.3.4 Thuˆat to´an Liang-Barsky  
.
´
˙’  
`
´
˙’  
Sau khi thuˆat to´an cˇat d¯oan thˇang v`a d¯a gi´ac lˆoi cua Cyrus v`a Beck cˆong bˆo nˇam 1978  
.
.
. .  
.
.
`
´ ´  
(d¯uoc tr`ınh b`ay trong phˆan kˆe tiˆep), nˇam 1984, Liang (d¯ˆoc lˆap v´oi Barsky) d¯a˜ xˆay dung  
.
.
.
.
.
.
˙’  
´
˙’  
thuˆat to´an giao d¯oan thˇang v`a h`ınh chu˜ nhˆat rˆat hiˆeu qua theo c´ach ho`an to`an kh´ac v´oi  
.
.
.
.
.
. .  
.
˙’  
´
˙’  
nhu˜ng thuˆat to´an tr`ınh b`ay trˆen. Phuong ph´ap n`ay dua trˆen tham sˆo ho´a cua d¯oan thˇang  
.
.
.
. .  
˙’  
´
´
´
˙’  
v`a giai hˆe c´ac bˆat phuong tr`ınh tuyˆen t´ınh theo mˆot ˆan sˆo.  
.
.
.
.
.
˙’  
`
˙’  
`
˙’  
Nhˆan x´et rˇang h`ınh chu˜ nhˆat ( ) gˆom tˆap c´ac d¯iˆem trong mˇat phˇang gi´oi han boi c´ac  
.
.
.
.
.
. .  
.
˙’  
˙’  
d¯u`ong thˇang qua c´ac canh cua n´o; tu´c l`a  
.
( ) = {(  
) ∈ R2 |  
≤
≤
≤
≤
}
min  
max min  
max  
97  
.
.
´
˙’  
Tham sˆo ho´a ho´a d¯oan  
boi ( ) := + ( − ) v´oi ∈ [0 1]  
.
.
.
.
˙’  
`
d¯ua vˆe x´ac  
˙’  
Nhu vˆay b`ai to´an x´ac d¯inh giao cua h`ınh chu˜ nhˆat ( ) v`a d¯oan thˇang  
.
.
.
.
. .  
´
´
˙’  
d¯inh c´ac gi´a tri tham sˆo thoa hˆe c´ac bˆat phuong tr`ınh  
.
.
.
0
≤
≤
≤
≤ 1  
) ≤  
+ (  
+ (  
−
−
min  
min  
max  
max  
)
≤
. .  
. .  
Hay tuong d¯uong  
0
≤
≤
≤ 1  
= 0 1 2 3  
trong d¯´o  
=
=
=
=
=
−
0
1
2
3
0
1
2
3
min  
= −  
=
−
max  
−
−
min  
= −  
max  
.
v´oi  
:=  
−
:=  
−
. .  
´
`
´
´
˙’  
. .  
Suy ra nˆeu tˆon tai chı sˆo ∈ {0 1 2 3} sao cho  
= 0 v`a  
0 th`ı hˆe bˆat phuong  
.
.
.
.
.
˙’  
`
giao v´oi h`ınh chu˜ nhˆat ( ) bˇang  
.
tr`ınh vˆo nghiˆem; trong tru`ong hop n`ay, d¯oan thˇang  
.
.
.
. .  
´
trˆong. Nguoc lai d¯ˇat  
.
.
.
:= max{0 max{  
:= min{1 min{  
|
0
= 0 1 2 3}}  
= 0 1 2 3}}  
0
1
|
0
. .  
. .  
. .  
.
´
Khi d¯´o hˆe bˆat phuong tr`ınh tuong d¯uong v´oi  
.
≤ ≤  
0
1
.
.
-
`
˙’  
`
´
´
˙’  
˙’  
. .  
Diˆeu n`ay chı ra rˇang d¯oan thˇang  
giao v´oi h`ınh chu˜ nhˆat ( ) kh´ac trˆong chı nˆeu  
;
1
0
.
.
.
v`a trong tru`ong hop n`ay,  
.
∩ ( ) = { ( ) | ∈ [  
1]}  
0
. .  
˙’  
.
´
Trˆen co so nhu˜ng phˆan t´ıch trˆen, ta c´o thuˆat to´an chi tiˆet sau:  
.
.
1. T´ınh  
.
v´oi = 0 1 2 3  
˙’  
2. Khoi tao = 0 v`a = 0 = 1  
0
1
.
.
´
´
3. Nˆeu = 0 v`a  
0 kˆet luˆan  
∩ ( ) = ∅; thuaˆt to´an du`ng.  
.
.
98  
. .  
} Chuyˆen sang Bu´oc 7.  
˙’  
´
4. Nˆeu  
0 d¯ˇat = max{  
0
0
.
. .  
˙’  
´
5. Nˆeu  
0 d¯ˇat = min{  
} Chuyˆen sang Bu´oc 7.  
1
1
.
.
´
´
6. Nˆeu  
kˆet luˆan  
∩ ( ) = ∅; thuˆat to´an du`ng.  
0
1
.
.
. .  
. .  
´
´
7. Nˆeu  
3 thay = + 1 v`a lˇap lai Bu´oc 3; nguoc lai, kˆet luˆan  
∩ ( ) =  
trong  
.
.
.
.
.
d¯o´  
=
=
+ ( − )  
0
+ ( − )  
1
˙’  
V´ı du 3.3.4 H`ınh 3.8 minh hoa mˆot v´ı du cua thuˆat to´an Lang-Barsky.  
.
.
.
.
.
7
6
5
4
3
2
1
•
@ = 1  
1
2
3
@ =  
1
( )  
1
5
@ =  
0
•
@ = 0  
0
1
2
3
4
5
6
7
8
9
˙’  
H`ınh 3.8: Mˆot v´ı du cua thuˆat to´an Liang-Barsky.  
.
.
.
.
V´ı du 3.3.5 X´et h`ınh chu˜ nhˆat  
.
.
2
:= {(  
) ∈  
|0 ≤ ≤ 8 0 ≤ ≤ 4}  
. .  
˙’  
˙’  
´
v`a hai d¯iˆem (−1 −2) v`a (10 9) Phuong tr`ınh tham sˆo d¯oan thˇang  
c´o dang  
.
.
(1 − ) +  
. .  
`
´
˙’  
Ta cˆan giai hˆe c´ac bˆat phuong tr`ınh  
.
0 ≤  
≤ 1  
0 ≤ (1 − )(−1) + (10) ≤ 8  
0 ≤ (1 − )(−2) + (9) ≤ 4  
99  
. .  
. .  
Hay tuong d¯uong  
0 ≤  
≤ 1  
1 ≤ 11 ≤ 9  
2 ≤ 11 ≤ 6  
Vˆay  
.
2
6
≤ ≤  
11  
11  
.
˙’  
˙’  
˙’  
´
˙’  
Suy ra giao cua d¯oan thˇang  
v`a h`ınh chu˜ nhˆat l`a d¯oan thˇang nˆoi hai d¯iˆem v`a trong  
.
.
.
d¯´o  
v`a  
2
2
= (1 − ) +  
11  
9
11  
2
=
(−1 −2) + (10 9) = (1 0)  
11  
11  
6
6
= (1 − ) +  
11  
5
11  
6
=
(−1 −2) + (10 9) = (5 4)  
11  
11  
˙’  
3.4 Giao cua d¯oan thˇang v`a d¯a gi´ac lˆoi  
`
˙’  
.
. .  
.
. .  
˙’  
˙’  
´
˙’  
3.4.1 Vi tr´ı tuong d¯ˆoi cua mˆot d¯iˆem v´oi d¯u`ong thˇang  
.
.
.
. .  
.
.
˙’  
`
˙’  
˙’  
Trong nhiˆeu u´ng dung ta thu`ong quan tˆam kh´ai niˆem nua mˇat phˇang trong v`a nua mˇat  
.
.
.
.
.
. .  
. .  
˙’  
˙’  
˙’  
˙’  
phˇang ngo`ai x´ac d¯inh boi mˆot d¯u`ong thˇang (xem Chuong 1). Kh´ai niˆem n`ay liˆen quan mˆat  
.
.
.
.
. .  
˙’  
´
´
thiˆet d¯ˆen ph´ap vector cua d¯u`ong thˇang.  
. .  
. .  
˙’  
´
˙’  
˙’  
Nhˇac lai l`a phuong tr`ınh tˆong qu´at cua d¯u`ong thˇang c´o dang  
.
.
+
+ = 0  
. .  
. .  
Hay tuong d¯uong  
+
= −  
N´oi c´ach kh´ac, = { ∈ R2 | h −→ i = } trong d¯´o = ( ) l`a ph´ap vector cua d¯u`ong  
. .  
˙’  
˙’  
thˇang v`a = − Ky´ hiˆeu  
.
−→  
+
( ) := { ∈ R2 | h  
i
i
}
}
−→  
−
( ) := { ∈ R2 | h  
100  
.
−
˙’  
Nua mˇat phˇang ngo`ai ( )  
•
˙’  
.
.
+
˙’  
Nua mˇat phˇang trong ( )  
˙’  
.
. .  
.
. .  
˙’  
˙’  
´
˙’  
H`ınh 3.9: Vi tr´ı tuong d¯oˆi cua d¯iˆem v´oi d¯u`ong thˇang  
.
.
.
.
˙’  
˙’  
˙’  
˙’  
˙’  
l`a c´ac nua mˇat phˇang ngo`ai v`a nua mˇat phˇang trong x´ac d¯inh boi (xem H`ınh 3.9).  
.
.
.
.
.
˙’  
˙’  
˙’  
. .  
´
`
˙’  
Vˆan d¯ˆe d¯aˇt ra o d¯ˆay l`a v´oi mˆot d¯iˆem tu`y y´ trong mˇat phˇang, h˜ay x´ac d¯inh d¯iˆem  
.
.
.
.
.
.
˙’  
`
˙’  
`
˙’  
˙’  
˙’ ˙’  
nˇam trong nua mˇat phˇang n`ao? Gia su l`a d¯iˆem nˇam trˆen d¯u`ong thˇang Ky´ hiˆeu l`a  
.
.
−→  
.
.
0
.
˜
`
´
´
˙’  
˙’  
g´oc giu˜a vector v`a vector  
˙’  
Dˆe d`ang thˆay rˇang g´oc nho hon 90 nˆeu  
thuoˆc nua  
.
mˇat phˇang ngo`ai v`a do d¯´o h −→ i 0 Tuong tu, g´oc l´on hon 90 nˆeu thuˆoc nua mˇat  
. .  
.
.
.
0
.
´
˙’  
.
˙’  
.
.
. .  
.
phˇang trong v`a do d¯o´ h −→ i 0 Cuˆoi cu`ng, g´oc bˇang 90 nˆeu thuˆoc d¯u`ong thˇang  
0
`
˙’  
´
´
.
v`a do d¯´o h −→ i = 0 Vˆay  
.
∈ ( ) nˆeu h −→ i  
0
0
+
´
1.  
2.  
3.  
∈ ( ) nˆeu h −→ i  
−
´
∈ nˆeu h −→ i = 0  
´
`
Chu´ y´ rˇang  
h
−→ i  
−→ i  
0
. .  
. .  
tuong d¯uong  
h
.
.
˙’  
˙’  
˙’  
˙’  
˙’  
´
˙’  
Do d¯´o ta c´o thˆe viˆet lai tiˆeu chuaˆn kiˆem tra d¯iˆem thuˆoc nua mˇat phˇang n`ao nhu sau:  
.
.
.
∈ ( ) nˆeu h −→ i  
+
´
1.  
2.  
3.  
∈ ( ) nˆeu h −→ i  
−
´
∈ nˆeu h −→ i =  
´
.
˙’  
˙’  
´
´
´
˙’  
˙’  
Chˇang han, gˆoc toa d¯oˆ (0 0) thuoˆc nua mˇat phˇang ngo`ai nˆeu v`a chı nˆeu  
0
.
.
.
.
.
101  
( )  
˙’  
`
˙’  
H`ınh 3.10: Giao cua d¯oan thˇang v`a d¯a gi´ac lˆoi.  
.
˙’  
`
˙’  
3.4.2 Thuˆat to´an t`ım giao cua d¯oan thˇang v`a d¯a gi´ac lˆoi  
.
.
.
˙’  
Nˇam 1978, Cyrus v`a Beck [5] d¯a˜ xˆay dung thuˆat to´an x´ac d¯inh giao cua d¯oan thˇang v`a d¯a  
˙’  
.
.
.
.
.
.
. .  
.
˙’  
˜
`
`
˙’  
gi´ac lˆoi v`a c´o thˆe mo rˆong dˆe d`ang trong ba chiˆeu. H`ınh chu˜ nhˆat l`a mˆot tru`ong hop d¯aˇc  
.
.
.
.
.
˙’  
`
˙’  
biˆet cua d¯a gi´ac lˆoi v`a do d¯o´ c´o thˆe ´ap dung thuaˆt to´an n`ay. Thuˆat to´an Liang-Barsky tr`ınh  
.
.
.
.
. .  
.
`
´
˙’  
b`ay trong phˆan tru´oc dua trˆen c´ach tiˆep cˆan cua Cyrus v`a Beck. Thuaˆt to´an Cyrus-Beck  
.
.
.
.
.
. .  
.
˙’  
˙’  
`
´
˙’  
˙’  
˙’  
dua trˆen tiˆeu chuaˆn loai bo d¯on gian bˇang c´ach x´et vi tr´ı tuong d¯ˆoi cua mˆot d¯iˆem v´oi mˆot  
.
.
.
.
.
. .  
˙’  
d¯u`ong thˇang.  
.
´
˙’  
`
´
Nhˇac lai l`a trong thuˆat to´an Cohen-Sutherland, d¯ˆoi v´oi c´ac d¯oan thˇang khˆong nˇam  
.
.
.
.
˙’  
trong h`ınh chu˜ nhˆat hoˇac bi loai bo ho`an to`an, ta cˆan t´ınh toa d¯ˆo giao d¯iˆem (  
`
˙’  
˙’  
) cua d¯oan  
.
.
.
.
.
.
.
.
. .  
˙’  
`
´
´
thˇang v´oi mˆot canh n`ao d¯´o bˇang c´ach thˆe gi´a tri d¯˜a biˆet hoˇac v`ao phuong tr`ınh canh  
.
.
.
.
.
.
. .  
.
˙’  
˙’  
´
d¯u´ng hay ngang tuong u´ng. Tuy nhiˆen, trong thuaˆt to´an tham sˆo ho´a d¯oan thˇang, ta s˜e  
.
.
. .  
˙’  
˙’  
. .  
˜
˙’  
´
˙’  
˙’  
t`ım c´ac gi´a tri tham sˆo trong khoang biˆeu diˆen cua d¯oan thˇang cho d¯iˆem giao cua d¯u`ong  
.
.
. .  
.
˙’  
˙’  
´
´
˙’  
thˇang v`a canh d¯uoc x´et. N´oi chung, v`ı tˆat ca c´ac canh s˜e giao v´oi d¯u`ong thˇang, nˆen bˆon  
.
.
.
. .  
.
.
`
´
´
˙’  
trong bˆon gi´a tri n`ay tuong u´ng v´oi c´ac d¯iˆem giao thuc su. Sau d¯o´ c´ac toa d¯oˆ (  
gi´a tri cˆan d¯uoc t´ınh. V´oi mˆot loat c´ac ph´ep so s´anh d¯on gian s˜e cho biˆet c´ac tham sˆo  
.
.
.
.
. .  
.
.
.
.
˙’  
´
˙’  
) cua  
.
.
.
.
.
. .  
.
˙’  
´
´
mˆot hoˇac hai giao d¯iˆem d¯uoc x´ac d¯inh. N´oi chung c´ach tiˆep cˆan n`ay s˜e tiˆet kiˆem th`oi gian  
.
.
.
.
.
.
.
˙’  
´
´
`
´
`
hon thuˆat to´an cˇat x´en Cohen-Sutherland do n´o tr´anh v`ong lˇap cˆan thiˆet d¯ˆe cˇat nhiˆeu canh  
.
.
.
.
.
.
.
.
´
˙’  
˙’  
cua h`ınh chu˜ nhˆat. Hon nu˜a, c´ac ph´ep t´ınh trong khˆong gian tham sˆo 1D d¯on gian hon  
.
trong khˆong gian 2D.  
.
. .  
.
`
˙’ ˙’  
˙’  
Gia su d¯a gi´ac lˆoi ( ) d¯uoc d¯inh ngh˜ıa nhu mˆot d˜ay c´ac d¯ınh  
= (  
)
=
.
.
.
.
.
.
`
`
˙’  
˙’  
0 1  
˙’  
trong hˆe toa d¯oˆ thuc v´oi  
. .  
=
Muc d¯´ıch cua phˆan n`ay l`a loai bo nhu˜ng phˆan  
0
.
.
.
.
.
˙’  
˙’  
cua d¯oan thˇang  
`
˙’  
khˆong nˇam trong “cua sˆo” ( ) (H`ınh 3.10).  
.
102  
Tải về để xem bản đầy đủ
pdf 91 trang yennguyen 20160 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Đồ họa máy tính I (Phần 2) - Phạm Tiến Sơn", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_do_hoa_may_tinh_phan_2.pdf