Tải bản đầy đủ (.pdf) (91 trang)

Giáo trình Đồ họa máy tính I: Phần 2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.07 MB, 91 trang )

Chu.o.ng 3
Giao cu˙’a c´
ac d
¯ˆ
o´i tu.o..ng
3.1

`au
Mo˙’. d
¯ˆ

`an giao
Mˆo.t trong nh˜
u.ng b`ai to´an quan tro.ng cu˙’a d¯`ˆo ho.a m´ay t´ınh l`a x´ac d¯i.nh d¯u.o..c phˆ
(c`on go.i l`a cˇa´t x´en) c´ac nguyˆen so.: giao d¯iˆe˙’m cu˙’a hai d¯oa.n thˇa˙’ng, giao cu˙’a d¯u.`o.ng thˇa˙’ng
`oi... Vˆa´n d¯`ˆe o˙’. d¯aˆy l`a x´ac d¯i.nh c´ac d¯oˆ´i tu.o..ng c´o giao nhau
v´o.i d¯u.`o.ng tr`on hay d¯a d¯a gi´ac lˆ
khˆong? Nˆe´u c´o th`ı t`ım giao cu˙’a ch´
ung.
`an thu..c hiˆe.n nhanh nhˆa´t c´o thˆe˙’ d¯u.o..c
Nhu. d¯˜a d¯`ˆe cˆa.p trong Chu.o.ng 1, c´ac thuˆa.t to´an cˆ
´.ng du.ng. Ch´
ung
d¯ˆe˙’ cung cˆa´p ngu.`o.i su˙’. du.ng cˆa.p nhˆa.t nhanh c´ac kˆe´t qua˙’ thay d¯oˆ˙’i trong u
ta s˜e ´ap du.ng c´ac phu.o.ng ph´ap gia˙’i t´ıch d¯ˆe˙’ gia˙’i quyˆe´t c´ac b`ai to´an trong chu.o.ng n`ay.

3.2

Giao cu˙’ a hai d
¯oa.n thˇ
a˙’ ng



- ˆay
Mˆo.t b`ai to´an thˆong du.ng trong d¯`oˆ ho.a m´ay t´ınh l`a x´ac d¯i.nh giao cu˙’a hai d¯oa.n thˇa˙’ng. D
`an quyˆe´t d¯.inh cu˙’a nh˜
l`a mˆo.t phˆ
u.ng thuˆa.t to´an t`ım giao (chˇa˙’ng ha.n, giao hai d¯a gi´ac) v`a
`eu tiˆe´n tr`ınh kh´ac. Phˆ
`an n`ay ´ap du.ng viˆe.c tham sˆo´ ho´a cu˙’a d¯oa.n thˇa˙’ng
xuˆa´t hiˆe.n trong nhiˆ
d¯ˆe˙’ gia˙’i quyˆe´t b`ai to´an sau

B`
ai to´
an
Trong mˇa.t phˇa˙’ng cho hai d¯oa.n thˇa˙’ng AB v`a CD. X´ac d¯.inh giao d¯iˆe˙’m cu˙’a ch´
ung nˆe´u c´o.
83


....
...........
...........
...........
...........
.
.
.
.
.
.

.
.
.
.
...
...........
...........
...........
...........
...........
.
.
.
.
.
.
.
.
.
.
..

D

A

..............................................................................................................................

B


D

A

..
.....
.....
.....
.....
.
.
.
....
.....
.....
.....
.....
.
.
.
.
....
.....
.....
.....
.....
.
.
.
.

..
....................................................................................................................................
....
.....
.....
.
.
.
....
.....
.....
.....
.....
.
.
.
.
.....
....
.....
.....
.....
.
.
.
.
.
.....
....


C

C

C
A

..............................................................................................................................

A
s

B

..............................................................................................................................

Cs

D

B

B
s

D
s

............................................................................................................................................................................................


H`ınh 3.1: C´ac tru.`o.ng ho..p v´o.i hai d¯oa.n thˇa˙’ng.

3.2.1

Phˆ
an t´ıch

`eu tru.`o.ng ho..p xa˙’y ra v´o.i hai d¯oa.n thˇa˙’ng nhu. trong H`ınh 3.1: Ch´
C´o nhiˆ
ung c´o thˆe˙’ khˆong
`an lˆen nhau.
giao nhau, c´o thˆe˙’ cˇa´t nhau ta.i mˆo.t d¯iˆe˙’m hoˇa.c phu˙’ lˆa´p mˆo.t phˆ
X´et c´ac phu.o.ng tr`ınh tham sˆo´ tu.o.ng u
´.ng hai d¯oa.n thˇa˙’ng AB v`a CD l`a
P (t) := A + t(B − A),

t ∈ [0, 1],

Q(u) := C + u(D − C)

u ∈ [0, 1].

v`a
Viˆe.c su˙’. du.ng c´ac tham sˆo´ kh´ac nhau v´o.i hai d¯oa.n thˇa˙’ng d¯ˆe˙’ biˆe˙’u diˆ˜en c´ac d¯iˆe˙’m kh´ac nhau
trˆen hai d¯oa.n mˆo.t c´ach d¯oˆ. c lˆa.p.

y hiˆe.u l1 v`a l2 l`a c´ac d¯u.`o.ng thˇa˙’ng d¯i qua A, B v`a C, D tu.o.ng u
´.ng. Phu.o.ng ph´ap o˙’.
d¯ˆay tru.´o.c hˆe´t l`a t`ım giao d¯iˆe˙’m cu˙’a hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 (nˆe´u c´o) v`a sau d¯o´ x´ac d¯i.nh
giao d¯iˆe˙’m c´o nˇa` m trˆen hai d¯oa.n thˇa˙’ng hay khˆong. Trong tru.`o.ng ho..p hai d¯u.`o.ng thˇa˙’ng giao

- iˆ
`an x´ac d¯.inh c´ac tham sˆo´ t0 v`a u0 sao cho P (t0 ) = Q(u0 ). D
`eu kiˆe.n n`ay chı˙’ ra
nhau, ta cˆ
xA + (xB − xA )t0 = xC + (xD − xC )u0 ,

(3.1)

yA + (yB − yA )t0 = yC + (yD − yC )u0 .

(3.2)

Suy ra
d × t0 = d ,
84


trong d¯´o
d :=
v`a
d :=

xB − xA

yB − yA

xD − xC

yD − yC


xC − xA

yC − yA

xD − xC

yD − yC

,

.

C´o hai tru.`o.ng ho..p ch´ınh xa˙’y ra tu`
y theo d bˇ`a ng khˆong hay khˆong.

d kh´
ac khˆ
ong
`on ta.i duy nhˆa´t tham sˆo´ t0 = dd . Nˆe´u t0 khˆong thuˆo.c d¯oa.n [0, 1] th`ı
Trong tru.`o.ng ho..p n`ay, tˆ
kˆe´t luˆa.n hai d¯oa.n thˇa˙’ng AB v`a CD khˆong giao nhau; ngu.o..c la.i x´ac d¯i.nh tham sˆo´ u0 t`
u.
Phu.o.ng tr`ınh (3.1) hoˇa.c (3.2). Nˆe´u u0 thuˆo.c d¯oa.n [0, 1] th`ı hai d¯oa.n thˇa˙’ng giao nhau v`a
to.a d¯oˆ. d¯iˆe˙’m giao c´o thˆe˙’ x´ac d¯.inh bo˙’.i P (t0 ) = Q(u0 ).

`
d bˇ
a ng khˆ
ong
Nˆe´u d = 0 th`ı hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 song song hoˇa.c tr`

ung nhau. C´ac d¯oa.n thˇa˙’ng c´o thˆe˙’
.
- ˆe˙’
`eu n`ay chı˙’ c´o thˆe˙’ xa˙’y ra khi hai d¯u.`o.ng thˇa˙’ng tr`
phu˙’ lˆa´p lˆen nhau nhu ng d¯iˆ
ung nhau. D
`eu d¯´o, ta chı˙’ cˆ
`an x´ac d¯.inh d¯iˆe˙’m C c´o nˇ`a m trˆen d¯u.`o.ng thˇa˙’ng l1 d¯i qua hai d¯iˆe˙’m
kiˆe˙’m tra d¯iˆ
A v`a B khˆong. Ta c´o C thuˆo.c l1 nˆe´u to.a d¯oˆ. cu˙’a n´o thoa˙’ m˜an d (xC , yC ) = 0, trong d¯o´
d (x, y) :=

x − xA

y − yA

xB − xA

yB − yA

.

Trong tru.`o.ng ho..p ngu.o..c la.i, hai d¯u.`o.ng thˇa˙’ng l1 v`a l2 song song v`a khˆong tr`
ung nhau; suy
ra hai d¯oa.n thˇa˙’ng khˆong giao nhau. Do d¯´o tiˆe´n tr`ınh cuˆo´i c`
ung l`a kiˆe˙’m tra hai d¯oa.n thˇa˙’ng
c´o phu˙’ lˆa´p lˆen nhau khˆong.
- ˆe˙’ thu..c hiˆe.n d¯iˆ
`eu n`ay, ta cˆ
`an x´ac d¯.inh hai tham sˆo´ thu..c tC v`a tD sao cho C = P (tC )

D
`an x´et phu.o.ng tr`ınh theo x (nˆe´u l1
v`a D = P (tD ). V`ı hai d¯u.`o.ng thˇa˙’ng tr`
ung nhau nˆen chı˙’ cˆ
khˆong song song v´o.i tru.c tung; ngu.o..c la.i su˙’. du.ng phu.o.ng tr`ınh theo y). Dˆ˜e d`ang kiˆe˙’m tra
rˇ`a ng
xC − xA
tC =
,
xB − xA
v`a
tD =

xD − xA
.
xB − xA
85


- oa.n thˇa˙’ng AB bˇa´t d¯`aˆu v`a kˆe´t th´
D
uc tu.o.ng u
´.ng ta.i t = 0 v`a t = 1 v`a bˇ`a ng c´ach kiˆe˙’m
tra th´
u. tu.. cu˙’a bˆo´n tham sˆo´ 0, 1, tC v`a tD ch´
ung ta c´o thˆe˙’ x´ac d¯.inh d¯u.o..c vi. tr´ı tu.o.ng d¯oˆ´i
`on ta.i phˆ
`an chung gi˜
u. khi ca˙’ hai tham sˆo´ tC v`a tD c`
ung

cu˙’a hai d¯oa.n thˇa˙’ng. Tˆ
u.a hai d¯oa.n tr`
nho˙’ ho.n 0 hoˇa.c l´o.n ho.n 1. Trong tru.`o.ng ho..p c´o d¯oa.n chung, c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i c´o thˆe˙’ dˆ˜e
d`ang x´ac d¯i.nh t`
u. c´ac gi´a tri. tC v`a tD .

3.2.2

Thuˆ
a.t to´
an x´
ac d
¯i.nh giao hai d
¯oa.n thˇ
a˙’ ng

- `ˆau
Trˆen co. so˙’. cu˙’a nh˜
u.ng tha˙’o luˆa.n trˆen ta c´o thˆe˙’ viˆe´t la.i thuˆa.t to´an chi tiˆe´t nhu. sau. D
`om bˆo´n d¯iˆe˙’m A, B, C v`a D; d¯`aˆu ra gˆ
`om giao d¯iˆe˙’m I (nˆe´u c´o) v`a biˆe´n Kind nhˆa.n mˆo.t
v`ao gˆ
`on ta.i d¯iˆe˙’m giao, tˆ
`on ta.i mˆo.t d¯iˆe˙’m giao I hoˇa.c
trong ba gi´a tri. 0, 1 hoˇa.c 2 tu`
y theo khˆong tˆ
`an.
hai d¯oa.n phu˙’ lˆa´p lˆen nhau mˆo.t phˆ
1. Kho˙’.i ta.o Kind = 0. T´ınh d.
2. Nˆe´u d = 0 (t´

u.c l`a c´ac d¯oa.n thˇa˙’ng khˆong song song) thu..c hiˆe.n
• T´ınh t0 . Nˆe´u t0 ∈ [0, 1] th`ı d`
u.ng, hai d¯oa.n thˇa˙’ng khˆong giao nhau.
u.ng, hai d¯oa.n thˇa˙’ng khˆong giao nhau.
• T´ınh u0 . Nˆe´u u0 ∈ [0, 1] th`ı d`
• Ngu.o..c la.i, kˆe´t luˆa.n Kind = 1 v`a hai d¯oa.n thˇa˙’ng giao nhau ta.i
I = A + t0 (B − A) = C + u0 (D − C).
3. Ngu.o..c la.i (c´ac d¯oa.n thˇa˙’ng song song) v`a nˆe´u d¯iˆe˙’m C nˇ`a m trˆen d¯u.`o.ng thˇa˙’ng AB
• X´ac d¯i.nh tC v`a tD .
• Nˆe´u ca˙’ hai tC v`a tD c`
ung nho˙’ ho.n 0 hoˇa.c c`
ung l´o.n ho.n 1 th`ı hai d¯oa.n thˇa˙’ng
khˆong giao nhau. Ngu.o..c la.i, d¯ˇa.t Kind = 2; giao hai d¯oa.n thˇa˙’ng l`a mˆo.t d¯oa.n
thˇa˙’ng (t`ım hai d¯`aˆu m´
ut?).
V´ı du. 3.2.1 (a) Gia˙’ su˙’. A(1, 4), B(7, 6), C(4, 8) v`a D(7, 9). Ta c´o
d=

xB − xA

yB − yA

xD − xC

yD − yC

=

6 2
3 1


= 0.

- ˆe˙’ kˆe´t luˆa.n, thay to.a d¯oˆ.
Suy ra hai d¯u.`o.ng thˇa˙’ng AB v`a CD song song hoˇa.c tr`
ung nhau. D
d¯iˆe˙’m C v`ao phu.o.ng tr`ınh d (x, y) ta d¯u.o..c
d (xC , yC ) =

xC − xA

yC − yA

xB − xA

yB − yA
86

=

3 4
6 2

= −18 = 0.


Vˆa.y AB ∩ CD = ∅.
(b) Gia˙’ su˙’. A(1, 3), B(10, 6), C(4, 7) v`a D(13, 1). Ta c´o
d=


xB − xA

yB − yA

xD − xC

yD − yC

=

9

3

9 −6

= −81 = 0.

Suy ra hai d¯u.`o.ng thˇa˙’ng AB v`a CD cˇa´t nhau ta.i I. T`
u.
d =
c´o t0 =

d
d

=

2
3


xC − xA

yC − yA

xD − xC

yD − yC

=

3

4

9 −6

= −54,

∈ [0, 1]. Gia˙’i u0 theo Phu.o.ng tr`ınh (3.1) ta d¯u.o..c
u0 =

−3 + 9 32
(xA − xC ) + (xB − xA )t0
1
=
= ∈ [0, 1].
xD − xC
9
3


Vˆa.y hai d¯oa.n thˇa˙’ng AB v`a CD giao nhau ta.i
2
I = A + t0 (B − A) = (1, 3) + (9, 3) = (7, 5).
3

3.3

- oa.n thˇ
D
a˙’ ng v`
a h`ınh ch˜
u. nhˆ
a.t

`an n`ay ch´
Trong phˆ
ung ta t`ım hiˆe˙’u mˆo.t sˆo´ thuˆa.t to´an x´ac d¯.inh giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh
ch˜
u. nhˆa.t (R) (c´o c´ac ca.nh song song v´o.i c´ac tru.c to.a d¯ˆo.). H`ınh 3.2 chı˙’ ra bˆo´n tru.`o.ng ho..p
c´o thˆe˙’:
• Ca˙’ hai d¯iˆe˙’m d¯`aˆu cuˆo´i cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n AB, nˇ`a m ho`an to`an trong h`ınh ch˜
u.
`an giao ch´ınh l`a d¯oa.n thˇa˙’ng n`ay.
nhˆa.t. Hiˆe˙’n nhiˆen khi d¯o´ phˆ
• Mˆo.t trong hai d¯`ˆau m´
ut cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n BC, nˇ`a m trong h`ınh ch˜
u. nhˆa.t.
• Ca˙’ hai d¯iˆe˙’m d¯`aˆu cuˆo´i cu˙’a d¯oa.n thˇa˙’ng, chˇa˙’ng ha.n CD, nˇ`a m ngo`ai h`ınh ch˜
u. nhˆa.t nhu.ng

c´o giao kh´ac trˆo´ng v´o.i h`ınh ch˜
u. nhˆa.t.
`e “nu˙’.a mˇa.t
• Ca˙’ hai d¯iˆe˙’m d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng (chˇa˙’ng ha.n DE) nˇ`a m ho`an to`an vˆ
`an giao
phˇa˙’ng ngo`ai” x´ac d¯i.nh bo˙’.i mˆo.t ca.nh (bˆen tr´ai) cu˙’a h`ınh ch˜
u. nhˆa.t. Ta c´o phˆ
bˇ`a ng trˆo´ng. T`ınh huˆo´ng n`ay thu.`o.ng xa˙’y ra khi h`ınh ch˜
u. nhˆa.t d¯u˙’ nho˙’ v`a do d¯´o c´o
`eu d¯oa.n nˇ`a m ngo`ai h`ınh ch˜
nhiˆ
u. nhˆa.t.
87


C

............
.......... ....
..........
..........
...
.........
.
.
.
.
.
.
.

.
...
.
..
..
..........
.........
..
.
.
.
.
.
.
.
.
.
.
.
..
..........
...
..........
...
.........
..
..........
..........
..
.

.
.
.
.
.
.
.
.
.
.
...
..........
...
.........
...
..........
.....
..........
....
..........
.
.
.
.
.
.
.
.
....
......

....
..........
....
..........
....
..........
.
.
.
.
.
.
....
.
.
.
....
...........
....
...
....
...
.....
...
....
...
.....
...
....
...

.....
...
....
.
...
.........................................................................................................................................................................................................................................................................

B

D

E

...............................

H`ınh ch˜
u. nhˆa.t (R)

A

H`ınh 3.2: C´ac d¯oa.n thˇa˙’ng v`a h`ınh ch˜
u. nhˆa.t (R).
C


..
...
..........
..
...

...
...
....
.....
...
..
...
...
...
.
...
..
...
.
...
...
...
...
.....
...
...
...
...
...
..
...
...
..
...
...

...
...
.....
...
...
...
.
.
...
.
.
.
...
.
.....
.
.
.
.
.
...
.
...
.
.
.....
.
.
.
...

.
...
.
.
.
.....
.
...
.
.
.
.
...
.
.
.
.
...
.....
.
.
.
.
.
...
.
.
...
.....
.

.
.
.
...
.
.
.
...
.
.....
.
.
.
.
.
...
.
.
.
...
..
.......
...
..
...
.
.
...
...
..

...
..
...
...
....
...
...
..
...
..
...
...
....
...
..
.
.........................................................................................................................................................................................................................................................................................................

ymax —



A

B




D


ymin —

|
xmin

xmax

H`ınh 3.3: C´ac tru.`o.ng ho..p chˆa´p nhˆa.n hoˇa.c loa.i bo˙’ cu˙’a mˆo.t d¯oa.n thˇa˙’ng.
H˜ay quan s´at vi. tr´ı tu.o.ng d¯oˆ´i cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜
u. nhˆa.t (R), ch´
ung ta s˜e thˆa´y
- oa.n thˇa˙’ng c´o thˆe˙’ nˇ`a m bˆen
`eu t`ınh huˆo´ng c´o thˆe˙’ xa˙’y ra m`a thuˆa.t to´an pha˙’i xu˙’. l´
y. D
c´o nhiˆ
tr´ai, bˆen pha˙’i, ph´ıa du.´o.i hay ph´ıa trˆen cu˙’a h`ınh ch˜
u. nhˆa.t. Hoˇa.c n´o c´o thˆe˙’ cˇa´t bˆa´t k`
y mˆo.t
.
`eu
(hay hai) ca.nh h`ınh ch˜
u nhˆa.t, v`a vˆan vˆan. T´om la.i vˆa´n d¯`ˆe c´o ve˙’ rˇa´c rˆo´i v`ı c´o thˆe˙’ c´o nhiˆ
`an mˆo.t c´ach tˆo˙’ ch´
kha˙’ nˇang kh´ac nhau c´o thˆe˙’ xa˙’y ra. Do d¯o´ ch´
ung ta cˆ
u.c v`a tiˆe´p cˆa.n hiˆe.u
qua˙’ gia˙’i quyˆe´t b`ai to´an trong tru.`o.ng ho..p tˆo˙’ng qu´at v`a t´ınh to´an c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i m´o.i
`an giao. T´ınh hiˆe.u qua˙’ d¯aˇ. c biˆe.t quan tro.ng do c´o thˆe˙’ c´o h`ang trˇam, thˆa.m ch´ı h`ang
cu˙’a phˆ

`an loa.i bo˙’ phˆ
`an nˇa` m ngo`ai h`ınh ch˜
ng`an, d¯oa.n thˇa˙’ng trong mˆo.t h`ınh v`a mˆo˜i d¯oa.n cˆ
u. nhˆa.t.
`an n`ay tr`ınh b`ay mˆo.t sˆo´ thuˆa.t to´an t`ım giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜
Phˆ
u. nhˆa.t.
`am thu.`o.ng (xem H`ınh 3.3) c´o thˆe˙’ xa˙’y ra:
Tru.´o.c hˆe´t nhˆa.n x´et rˇa` ng c´o hai tru.`o.ng ho..p tˆ
`am thu.`o.ng d¯`ˆau tiˆen, go.i l`a chˆa´p nhˆa.n, l`a hai d¯iˆe˙’m d¯`aˆu cuˆo´i d¯oa.n thˇa˙’ng
1. Tru.`o.ng ho..p tˆ
88


ch´
u.a trong h`ınh ch˜
u. nhˆa.t.
`am thu.`o.ng th´
2. Tru.`o.ng ho..p tˆ
u. hai, go.i l`a loa.i bo˙’, ca˙’ hai d¯iˆe˙’m d¯`aˆu cuˆo´i cu˙’a d¯oa.n thˇa˙’ng
`e nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo˙’.i mˆo.t ca.nh cu˙’a h`ınh ch˜
u. nhˆa.t.
nˇ`a m ho`an to`an vˆ

3.3.1

`
T`ım giao bˇ
a ng c´
ach gia˙’ i hˆ

e. c´
ac phu.o.ng tr`ınh

C´ach tiˆe´p cˆa.n ch´ınh trong tru.`o.ng ho..p A v`a B khˆong d¯`oˆng th`o.i nˇa` m trong (R) l`a kiˆe˙’m tra
d¯oa.n thˇa˙’ng AB c´o giao v´o.i c´ac ca.nh cu˙’a h`ınh ch˜
u. nhˆa.t khˆong; nˆe´u c´o, x´ac d¯.inh c´ac giao
`an giao. Do d¯´o d¯u.a vˆ
`e b`ai to´an x´ac d¯.inh giao cu˙’a hai d¯oa.n thˇa˙’ng v`a c´o
d¯iˆe˙’m v`a suy ra phˆ
`an 3.2. Theo phu.o.ng ph´ap n`ay, ch´
`an t´ınh to´an
thˆe˙’ ´ap du.ng nh˜
u.ng kˆe´t qua˙’ trong Phˆ
ung ta cˆ
`eu kha˙’ nˇang; do d¯o´ khˆong hiˆe.u qua˙’.
v`a kiˆe˙’m tra nhiˆ

3.3.2

Thuˆ
a.t to´
an chia nhi. phˆ
an

´ ch´ınh cu˙’a thuˆa.t to´an n`ay tu.o.ng tu.. thuˆa.t to´an t`ım nghiˆe.m cu˙’a phu.o.ng tr`ınh f (x) = 0
Y
trˆen d¯oa.n [a, b] v´o.i f liˆen tu.c v`a f (a)f (b) < 0 bˇa` ng phu.o.ng ph´ap chia nhi. phˆan (bisection):
X´ac d¯i.nh c´ac giao d¯iˆe˙’m (nˆe´u c´o) cu˙’a d¯oa.n thˇa˙’ng AB v`a h`ınh ch˜
u. nhˆa.t bˇ`a ng phu.o.ng ph´ap
chia nhi. phˆan.

Thuˆa.t to´an tru.´o.c hˆe´t kiˆe˙’m tra hai tru.`o.ng ho..p chˆa´p nhˆa.n v`a loa.i bo˙’. Nˆe´u khˆong xa˙’y
`an bˇ`a ng nhau v`a loa.i bo˙’ nh˜
`an nˇ`a m ngo`ai h`ınh
ra, n´o chia d¯oa.n thˇa˙’ng th`anh hai phˆ
u.ng phˆ
`an c`on la.i d¯u.o..c xu˙’. l´
y lˇa.p la.i bˇ`a ng c´ach kiˆe˙’m tra c´ac Tru.`o.ng ho..p 1 v`a
ch˜
u. nhˆa.t. Sau d¯o´ phˆ
`an) cho d¯ˆe´n khi phˆ
`an c`on la.i ho`an to`an nˇ`a m trong h`ınh ch˜
2 v`a tiˆe´p tu.c phˆan chia (nˆe´u cˆ
u.
nhˆa.t hoˇa.c nˇ`a m trong nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯.inh bo˙’.i mˆo.t d¯u.`o.ng thˇa˙’ng bˆen tr´ai, bˆen
pha˙’i, bˆen du.´o.i hoˇa.c bˆen trˆen n`ao d¯o´.
- ˆe˙’ x´ac d¯.inh c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i khi n`ao nˇa` m ngo`ai hay trong mˆo.t h`ınh ch˜
D
u. nhˆa.t, ch´
ung
.
.
ta d¯ˇa.t mˆo.t m˜a “nu˙’ a mˇa.t phˇa˙’ng” cho mˆo˜i d¯iˆe˙’m. Mˆo˜i ca.nh cu˙’a h`ınh ch˜
u nhˆa.t x´ac d¯i.nh mˆo.t
d¯u.`o.ng thˇa˙’ng d¯i qua n´o; d¯u.`o.ng thˇa˙’ng n`ay chia mˇa.t phˇa˙’ng th`anh nu˙’.a mˇa.t phˇa˙’ng trong v`a
nu˙’.a mˇa.t phˇa˙’ng ngo`ai nhu. trong H`ınh 3.4 d¯oˆ´i v´o.i ca.nh bˆen pha˙’i: Ta quy u.´o.c nu˙’.a mˇa.t phˇa˙’ng
trong tu.o.ng u
´.ng ch´
u.a h`ınh ch˜
u. nhˆa.t; ngu.o..c la.i l`a nu˙’.a mˇa.t phˇa˙’ng ngo`ai.
Do c´o bˆo´n ca.nh, ta s˜e su˙’. du.ng chuˆo˜i bˆo´n bit d¯ˆe˙’ m˜a ho´a mˆo.t d¯iˆe˙’m P trong mˇa.t phˇa˙’ng.


y hiˆe.u E(P ) l`a m˜a cu˙’a d¯iˆe˙’m P. Mˆo˜i bit trong t`
u. m˜a d¯u.o..c d¯aˇ. t bˇ`a ng 1 (TRUE) hoˇa.c 0
`eu kiˆe.n sau:
(FALSE); bˆo´n bit trong t`
u. m˜a E(P ) tu.o.ng u
´.ng c´ac d¯iˆ
89


...
...
...
...
...
..
................................................................................................................................................................................................
...
...
...
...
.
...
.....
...
...
...
...
...
...

...
...
...
...
...
...
...
...
...
...
...
.
...
.....
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...

...
...
...
..
.
...............................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
..

(R)

Nu˙’.a
mˇa.t phˇa˙’ng
ngo`ai

Nu˙’.a mˇa.t phˇa˙’ng trong

xmax

H`ınh 3.4: C´ac nu˙’.a mˇa.t phˇa˙’ng d¯u.o..c x´ac d¯.inh bo˙’.i ca.nh bˆen pha˙’i.
• Bit th´
u. nhˆa´t d¯ˇa.t bˇ`a ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo˙’.i ca.nh

bˆen tr´ai;
• Bit th´
u. hai d¯aˇ. t bˇ`a ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo˙’.i ca.nh
bˆen pha˙’i;
• Bit th´
u. ba d¯aˇ. t bˇ`a ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo˙’.i ca.nh bˆen
trˆen;
u. tu. d¯aˇ. t bˇa` ng 1 nˆe´u d¯iˆe˙’m P thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai x´ac d¯.inh bo˙’.i ca.nh bˆen
• Bit th´
du.´o.i.
Do d¯´o c´ac d¯iˆe˙’m nˇ`a m trong h`ınh ch˜
u. nhˆa.t c´o m˜a 0000; c´ac d¯iˆe˙’m thuˆo.c v`
ung nˇa` m ph´ıa
trˆen v`a bˆen tr´ai h`ınh ch˜
u. nhˆa.t d¯u.o..c g´an t`
u. m˜a l`a 1001. Viˆe.c xˆay du..ng m˜a cu˙’a mˆo.t d¯iˆe˙’m
`an l`a bˆo´n ph´ep so s´anh: Ho`anh d¯oˆ. cu˙’a d¯iˆe˙’m d¯u.o..c so s´anh v´o.i ca.nh bˆen tr´ai xmin ;
d¯o.n thuˆ
tung d¯oˆ. d¯u.o..c so s´anh v´o.i ca.nh bˆen du.´o.i ymin ; v.v. C´ac d¯u.`o.ng thˇa˙’ng d¯i qua c´ac ca.nh cu˙’a
h`ınh ch˜
u. nhˆa.t chia mˇa.t phˇa˙’ng th`anh ch´ın v`
ung. C´ac d¯iˆe˙’m trong mˆo.t v`
ung c´o c`
ung mˆo.t m˜a
.
.
nhu chı˙’ ra trong H`ınh 3.5. V`ı d¯o n vi. nho˙’ nhˆa´t c´o thˆe˙’ d¯o.c, ghi trˆen m´ay t´ınh l`a byte, nˆen
ch´
ung ta su˙’. du.ng kiˆe˙’u byte d¯ˆe˙’ m˜a ho´a mˆo.t d¯iˆe˙’m trong d¯´o bˆo´n bit thˆa´p tu.o.ng u
´.ng t`

u. m˜a
cu˙’a n´o v`a bˆo´n bit cao d¯u.o..c d¯aˇ. t bˇ`a ng khˆong. Thu˙’ tu.c Encode() thu..c hiˆe.n tiˆe´n tr`ınh n`ay:
void Encode(Point2D P, float Left, float Right, float Bottom, float Top,
char *Code)
{
90


ymax

ymin

..
..
...
.
...
.
...
.
..
....... ....... ....... ....... ....... ..

1001

0001

1000

0000


....... ....... ....... ....... ....... ...
..
...
..
...
..
...
..
...
..

1010

0010

xmin

..
..
...
.
...
.
...
.
...
....... ....... ....... ....... .......

0101


0100

......... ....... ....... ....... .......
..
...
..
...
..
...
..
...
..

0110

xmax

´.ng h`ınh ch˜
u. nhˆa.t (R).
H`ınh 3.5: C´ac t`
u. m˜a tu.o.ng u
*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;
}
ung ta
C´ac d¯iˆe˙’m A, B d¯u.o..c m˜a ho´a th`anh c´ac t`

u. m˜a E(A) v`a E(B). Trˆen co. so˙’. d¯´o ch´
.
c´o thˆe˙’ x´ac d¯.inh d¯oa.n thˇa˙’ng AB nˇ`a m ho`an to`an bˆen trong h`ınh ch˜
u nhˆa.t hoˇa.c thuˆo.c nu˙’.a
mˇa.t phˇa˙’ng ngo`ai n`ao d¯´o. Ta c´o
1. Chˆa´p nhˆa.n nˆe´u v`a chı˙’ nˆe´u E(A) = E(B) = 0.
2. Loa.i bo˙’ nˆe´u v`a chı˙’ nˆe´u [E(A) AND E(B)] != 0.
Trˆen co. so˙’. cu˙’a nh˜
u.ng phˆan t´ıch trˆen ta c´o thˆe˙’ viˆe´t la.i thuˆa.t to´an chia nhi. phˆan nhu.
sau:
1. Nˆe´u E(A) = 0 v`a E(B) = 0 kˆe´t luˆa.n AB ∩ (R) = AB; thuˆa.t to´an d`
u.ng.
2. Nˆe´u [E(A) AND E(B)] != 0 kˆe´t luˆa.n AB ∩ (R) = ∅; kˆe´t th´
uc thuˆa.t to´an.
91


3. Nˆe´u E(A) = 0 v`a E(B) = 0 (t´
u.c A ∈ (R) v`a B ∈
/ (R)) thu..c hiˆe.n
- ˇa.t C = A, D = B.
• D
• Trong khi d¯ˆo. d`ai CD l´o.n ho.n

(sˆo´ du.o.ng nho˙’ t`
uy y
´)

- ˇa.t M l`a trung d¯iˆe˙’m cu˙’a d¯oa.n CD.
D

Nˆe´u E(M ) = 0 th`ı cˆa.p nhˆa.t C = M ngu.o..c la.i D = M.
• Kˆe´t luˆa.n AB ∩ (R) = AM ; kˆe´t th´
uc thuˆa.t to´an.
4. Nˆe´u E(A) = 0 v`a E(B) = 0 (t´
u.c A ∈
/ (R) v`a B ∈ (R)), ho´an d¯oˆ˙’i vai tr`o cu˙’a A v`a B;
lˇa.p la.i Bu.´o.c 3.
5. Ngu.o..c la.i thu..c hiˆe.n
- ˇa.t C = A, D = B.
• D
• Trong khi d¯ˆo. d`ai CD l´o.n ho.n
- ˇa.t M l`a trung d¯iˆe˙’m cu˙’a d¯oa.n CD.
D
Nˆe´u E(M ) = 0 ´ap du.ng Bu.´o.c 3 cho hai d¯oa.n M C v`a M D. Kˆe´t luˆa.n AB ∩(R) =
CD; kˆe´t th´
uc thuˆa.t to´an.
Nˆe´u [E(M ) AND E(C)] != 0 d¯aˇ. t C = M.
Nˆe´u [E(M ) AND E(D)] != 0 d¯ˇa.t D = M.
Nˆe´u [E(C) AND E(D)] != 0 kˆe´t luˆa.n AB ∩ (R) = ∅; kˆe´t th´
uc thuˆa.t to´an.
y..

..
.......
..
...
...
...
...
.......

........
...
........
.........
...
........
.
.
.
.
.
...
.
.
...
...
.........
........
...
........
.........
...
........
.
.
.
.
.
...
.

.
......
...
........
.........
...
........
...
.........
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
................................................................................................................................................................................................................................................................................

ymax —

A•


M1
3•
M2M
• •

•B

ymin —

|
xmin

|
xmax

x

H`ınh 3.6: Minh ho.a cu˙’a thuˆa.t to´an chia nhi. phˆan.
u. nhˆa.t
V´ı du. 3.3.1 X´et v´ı du. t`ım giao cu˙’a h`ınh ch˜
R := {(x, y) ∈ R2 | 3 ≤ x ≤ 7, 2 ≤ y ≤ 5}
92


v`a hai d¯iˆe˙’m A(5, 3) v`a B(10, 5). Ba bu.´o.c d¯`ˆau tiˆen cu˙’a thuˆa.t to´an chia nhi. phˆan cho trong
ba˙’ng sau
k

A


B

M

1

(5, 3)

(10, 5)

( 15
, 4)
2

0000

0100

0100

2

(5, 3)

0100

0000

3
..

.

, 7)
( 25
4 2
( 55
, 15 )
8 4

0000

( 25
, 7)
4 2

, 4)
( 15
2
15
( 2 , 4)

0000
..
.

0100
..
.

0000

..
.

..
.

..
.

..
.

E(A) E(B) E(M)

H`ınh 3.6 minh ho.a ba bu.´o.c lˇa.p d¯`aˆu tiˆen cu˙’a thuˆa.t to´an chia nhi. phˆan v´o.i c´ac d¯iˆe˙’m gi˜
u.a
´.ng l`a M1 , M2 , v`a M3 .
tu.o.ng u
`eu d¯ˆe˙’ x´ac
Nhˆa.n x´et rˇa` ng phu.o.ng ph´ap chia nhi. phˆan khˆong hiˆe.u qua˙’ do t´ınh to´an nhiˆ
d¯.inh c´ac giao d¯iˆe˙’m.

3.3.3

Thuˆ
a.t to´
an Cohen-Sutherland

Thuˆa.t to´an Cohen-Sutherland thu.`o.ng d¯u.o..c su˙’. du.ng trong c´ac u
´.ng du.ng cˇa´t x´en do t´ınh

hiˆe.u qua˙’ v`a phˆo˙’ biˆe´n cu˙’a n´o. Thuˆa.t to´an cung cˆa´p mˆo.t c´ach tiˆe´p cˆa.n chia d¯ˆe˙’ tri. rˆa´t hiˆe.u
qua˙’ gia˙’i b`ai to´an x´ac d¯.inh giao cu˙’a d¯oa.n thˇa˙’ng v`a h`ınh ch˜
u. nhˆa.t.
Tu.o.ng tu.. phu.o.ng ph´ap chia nhi. phˆan, thuˆa.t to´an Cohen-Sutherland tru.´o.c hˆe´t kiˆe˙’m
tra Tru.`o.ng ho..p 1 (chˆa´p nhˆa.n) v`a 2 (loa.i bo˙’). Nˆe´u khˆong xa˙’y ra, n´o chia d¯oa.n thˇa˙’ng th`anh
`an v`a loa.i bo˙’ phˆ
`an nˇa` m ngo`ai h`ınh ch˜
`an c`on la.i d¯u.o..c xu˙’. l´
y lˇa.p
hai phˆ
u. nhˆa.t. Sau d¯o´ phˆ
`an) cho d¯ˆe´n khi
la.i bˇ`a ng c´ach kiˆe˙’m tra c´ac Tru.`o.ng ho..p 1 v`a 2 v`a tiˆe´p tu.c phˆan chia (nˆe´u cˆ
.
.
`an c`on la.i ho`an to`an nˇa` m trong h`ınh ch˜
phˆ
u nhˆa.t hoˇa.c nˇa` m trong nu˙’ a mˇa.t phˇa˙’ng ngo`ai x´ac
d¯.inh bo˙’.i mˆo.t d¯u.`o.ng thˇa˙’ng bˆen tr´ai, bˆen pha˙’i, bˆen du.´o.i hoˇa.c bˆen trˆen n`ao d¯´o.
Thuˆa.t to´an d¯ˇa.c biˆe.t hiˆe.u qua˙’ trong hai tru.`o.ng ho..p chung: Trong Tru.`o.ng ho..p 1, h`ınh
`au hˆe´t v`
`an l´o.n c´ac nguyˆen so. l`a chˆa´p
ch˜
u. nhˆa.t ch´
u.a tˆa´t ca˙’ hoˇa.c hˆ
ung hiˆe˙’n thi., v`a do d¯´o phˆ
u. nhˆa.t
nhˆa.n. Tru.`o.ng ho..p 2 na˙’y sinh trong b`ai to´an cho.n c´ac d¯ˆo´i tu.o..ng nˇ`a m trong h`ınh ch˜
bao quanh con cha.y (xem [9]).
`an phˆan chia d¯oa.n thˇa˙’ng AB

ung ta cˆ
Nˆe´u khˆong xa˙’y ra hai Tru.`o.ng ho..p 1 hoˇa.c 2 ch´
`an sao cho mˆo.t hoˇa.c ca˙’ hai d¯oa.n con c´o thˆe˙’ bi. loa.i bo˙’. Muˆo´n vˆa.y x´et d¯u.`o.ng
th`anh hai phˆ
`an: Phˆ
`an
thˇa˙’ng x´ac d¯.inh bo˙’.i ca.nh cu˙’a h`ınh ch˜
u. nhˆa.t chia d¯oa.n thˇa˙’ng AB th`anh hai phˆ
y
thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai s˜e bi. loa.i bo˙’. C´o thˆe˙’ cho.n c´ac ca.nh d¯ˆe˙’ kiˆe˙’m tra theo th´
u. tu.. tu`
.
.
.
.
.
`an nhˆa´t qu´an trong thuˆa.t to´an. Ch´
y
´, nhu ng cˆ
u tr´ai sang pha˙’i
ung ta s˜e su˙’ du.ng th´
u tu. t`
93


v`a t`
u. du.´o.i lˆen trˆen trong t`
u. m˜a. Ch´
uy
´ rˇa` ng, bit trong t`

u. m˜a d¯u.o..c d¯ˇa.t bˇ`a ng 1 tu.o.ng u
´.ng
`an x´et: Nˆe´u, chˇa˙’ng ha.n, A thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai x < xmin v`a AB khˆong thoa˙’
ca.nh cˆ
Tru.`o.ng ho..p 2 th`ı d¯iˆe˙’m B pha˙’i thuˆo.c nu˙’.a mˇa.t phˇa˙’ng trong x > xmin v`a d¯oa.n thˇa˙’ng AB
pha˙’i cˇa´t d¯u.`o.ng thˇa˙’ng x = xmin . Do d¯o´ thuˆa.t to´an luˆon luˆon cho.n mˆo.t d¯iˆe˙’m thuˆo.c nu˙’.a mˇa.t
phˇa˙’ng ngo`ai v`a su˙’. du.ng t`
u. m˜a cu˙’a n´o d¯ˆe˙’ x´ac d¯i.nh ca.nh d¯u.o..c x´et; ca.nh d¯u.o..c cho.n tu.o.ng
u
´.ng bit d¯u.o..c d¯ˇa.t bˇ`a ng 1 theo th´
u. tu.. t`
u. tr´ai sang pha˙’i v`a t`
u. du.´o.i lˆen trˆen; t´
u.c l`a, n´o l`a bit
bˆen tr´ai nhˆa´t bˇ`a ng 1 trong t`
u. m˜a.
`om c´ac bu.´o.c nhu. sau.
Thuˆa.t to´an gˆ
1. M˜a ho´a c´ac d¯iˆe˙’m A, B bˇ`a ng c´ac t`
u. m˜a E(A) v`a E(B).
2. Nˆe´u E(A) = E(B) = 0 th`ı AB ∩ (R) = AB.
3. Nˆe´u [E(A) AND E(B)] != 0 th`ı AB ∩ (R) = ∅.
4. Ngu.o..c la.i cho.n mˆo.t d¯iˆe˙’m nˇa` m ngo`ai v`a du..a v`ao t`
u. m˜a cu˙’a n´o d¯ˆe˙’ x´ac d¯.inh ca.nh s˜e
`an nˇ`a m ngo`ai. Cˆa.p nhˆa.t d¯iˆe˙’m ngo`ai l`a giao
cˇa´t. Sau d¯o´ x´ac d¯i.nh giao d¯iˆe˙’m, loa.i bo˙’ phˆ
d¯iˆe˙’m v`a m˜a ho´a n´o. Chuyˆe˙’n sang Bu.´o.c 2.

- iˆe˙’m D c´o m˜a 0000 v`a
V´ı du. 3.3.2 (a) Chˇa˙’ng ha.n, x´et d¯oa.n thˇa˙’ng AD trong H`ınh 3.7. D

- oa.n thˇa˙’ng AD khˆong thoa˙’ m˜an c´ac Tru.`o.ng ho..p 1 v`a 2. Do d¯´o
d¯iˆe˙’m A c´o m˜a 0110. D
cho.n d¯iˆe˙’m ngo`ai l`a A. T`
u. m˜a E(A) cho biˆe´t d¯oa.n thˇa˙’ng AD cˇa´t c´ac d¯u.`o.ng thˇa˙’ng bˆen pha˙’i
u. tu.. kiˆe˙’m tra, ch´
x = xmax v`a bˆen du.´o.i y = ymin . Theo th´
ung ta su˙’. du.ng ca.nh bˆen pha˙’i d¯ˆe˙’
cˇa´t d¯oa.n thˇa˙’ng AD l`a DC. Thay d¯iˆe˙’m A l`a C v`a cˆa.p nhˆa.t t`
u. m˜a cu˙’a A l`a 0000. Trong
bu.´o.c lˇa.p kˆe´ tiˆe´p, kiˆe˙’m tra ta thˆa´y DC thoa˙’ m˜an Tru.`o.ng ho..p 1, do d¯o´ kˆe´t th´
uc thuˆa.t to´an.
- oa.n
(b) X´et d¯oa.n thˇa˙’ng EI. M˜a cu˙’a c´ac d¯iˆe˙’m E v`a I tu.o.ng u
´.ng l`a 1001 v`a 0010. D
.
.
.
thˇa˙’ng EI khˆong tho˙’a m˜an c´ac Tru `o ng ho. p 1 v`a 2. Cho.n d¯iˆe˙’m ngo`ai, chˇa˙’ng ha.n E. Do
bit kh´ac khˆong d¯`aˆu tiˆen trong t`
u. m˜a cu˙’a E l`a bit th´
u. nhˆa´t nˆen d¯u.`o.ng thˇa˙’ng d¯u.o..c cho.n
l`a x = xmin . Giao cu˙’a EI v´o.i d¯u.`o.ng thˇa˙’ng n`ay ta.i F. Cˆa.p nhˆa.t E l`a F tu.o.ng u
´.ng t`
u. m˜a
0001. Bu.´o.c lˇa.p kˆe´ tiˆe´p, F I khˆong thoa˙’ m˜an c´ac Tru.`o.ng ho..p 1 v`a 2, nˆen cho.n d¯iˆe˙’m ngo`ai,
chˇa˙’ng ha.n l`a F. Chı˙’ c´o mˆo.t bit (th´
u. ba) trong E(F ) kh´ac khˆong, nˆen cho.n d¯u.`o.ng thˇa˙’ng cˇa´t
l`a y = ymax . Ta c´o G = F I ∩ ymax . Do d¯o´ cˆa.p nhˆa.t E l`a G v`a cˆa.p nhˆa.t m˜a cu˙’a n´o l`a 0000.
Lˇa.p la.i mˆo.t bu.´o.c n˜
ung nhˆa.n d¯u.o..c nˆe´u ta xuˆa´t

u.a, ta d¯u.o..c GH = EI ∩ (R). Kˆe´t qua˙’ n`ay c˜
ph´at t`
u. d¯iˆe˙’m I.

94


E •...........

...
...
... ..
... ..
...
.....
.....
...
.
... ......
. ...
...
.
...
....
...
...
...
.
.
....... ....... ....... ....... ...

...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
....... ....... ....... ....... .....
...
...
...
....
...
...
...
...
...

...
.
...
..
.

•F

G


H



I

...
..
...
..
...
..
...
..
...
... ....... ....... ....... .......

D •...........
...

•..........C

...
...
...
...
...
...
.
....... ....... ........... ....... ..
...
...
....
...
...
...
....
...
.
...
...
...
....

B



A


H`ınh 3.7: Minh ho.a cu˙’a thuˆa.t to´an Cohen-Sutherland.
u. nhˆa.t
V´ı du. 3.3.3 X´et v´ı du. t`ım giao cu˙’a h`ınh ch˜
R := {(x, y) ∈ R2 | 0 ≤ x ≤ 8, 0 ≤ y ≤ 4}
v`a hai d¯iˆe˙’m A(−1, −2) v`a B(10, 9). Phu.o.ng tr`ınh d¯u.`o.ng thˇa˙’ng AB c´o da.ng
y = x − 1;
hay tu.o.ng d¯u.o.ng
x = y + 1.
C´ac bu.´o.c cu˙’a thuˆa.t to´an Cohen Sutherland c´o thˆe˙’ tˆo˙’ng kˆe´t trong ba˙’ng sau

k
1

A

B

(−1, −2) (10, 9)

E(A) E(B) CodeOut

- u.`o.ng thˇa˙’ng cˇa´t
D

To.a d¯ˆo. giao I

1010

0101


1010

x = xmin

(0, −1)

2

(0, −1)

(10, 9)

0010

0101

0010

y = ymin

(1, 0)

3

(1, 0)

(10, 9)

0000


0101

0101

x = xmax

(8, 7)

4

(1, 0)

(8, 7)

0000

0001

0001

y = ymax

(5, 4)

5

(1, 0)

(5, 4)


0000

0000

Vˆa.y giao cu˙’a d¯oa.n thˇa˙’ng AB v`a h`ınh ch˜
u. nhˆa.t l`a d¯oa.n thˇa˙’ng nˆo´i hai d¯iˆe˙’m C(1, 0) v`a
D(5, 4).
Nh˜
u.ng y
´ tu.o˙’.ng trˆen d¯u.o..c tˆa.p ho..p trong thu˙’ tu.c Cohen Sutherland(). C´ac bu.´o.c lˇa.p
`an trong v`ong lˇa.p hai d¯iˆe˙’m d¯`ˆau cuˆo´i
kiˆe˙’m tra c´ac tru.`o.ng ho..p chˆa´p nhˆa.n hay loa.i bo˙’. Mˆo˜i lˆ
.
.
.
.
d¯u o. c cˆa.p nhˆa.t c`
ung v´o i t`
u m˜a cu˙’a ch´
ung v`a sau d¯´o tiˆe´n h`anh kiˆe˙’m tra.
95


- ˆe˙’ thuˆa.t to´an hiˆe.u qua˙’ ho.n, ch´
`an. Tuy nhiˆen,
D
ung ta nˆen t´ınh c´ac hˆe. sˆo´ g´oc chı˙’ mˆo.t lˆ
.
v´o i ca˙’i tiˆe´n n`ay, thuˆa.t to´an khˆong pha˙’i l`a hiˆe.u qua˙’ nhˆa´t. Do viˆe.c kiˆe˙’m tra v`a loa.i bo˙’ d¯u.o..c
u. tu.. nhˆa´t d¯.inh, thuˆa.t to´an d¯oˆi khi thu..c hiˆe.n tiˆe´n tr`ınh loa.i bo˙’ khˆong

thu..c hiˆe.n theo mˆo.t th´
`an thiˆe´t, chˇa˙’ng ha.n trong tru.`o.ng ho..p giao d¯iˆe˙’m cu˙’a d¯oa.n thˇa˙’ng v´o.i mˆo.t ca.nh cu˙’a h`ınh

ch˜
u. nhˆa.t l`a “d¯iˆe˙’m giao ngo`ai”; t´
u.c l`a, khi n´o khˆong nˇ`a m trˆen biˆen cu˙’a h`ınh ch˜
u. nhˆa.t (v´ı
du., d¯iˆe˙’m F trˆen d¯oa.n thˇa˙’ng EI trong H`ınh 3.7). Thuˆa.t to´an cu˙’a Nicholl v`a Lee tr´anh viˆe.c
`eu v`
t´ınh to´an c´ac giao d¯iˆe˙’m ngo`ai bˇ`a ng c´ach phˆan chia mˇa.t phˇa˙’ng th`anh nhiˆ
ung ho.n (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ˆ
a.t to´
an Liang-Barsky

`oi cu˙’a Cyrus v`a Beck cˆong bˆo´ nˇam 1978
Sau khi thuˆa.t to´an cˇa´t d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ
`an kˆe´ tiˆe´p), nˇam 1984, Liang (d¯ˆo.c lˆa.p v´o.i Barsky) d¯a˜ xˆay du..ng
(d¯u.o..c tr`ınh b`ay trong phˆ
thuˆa.t to´an giao d¯oa.n thˇa˙’ng v`a h`ınh ch˜
u. nhˆa.t rˆa´t hiˆe.u qua˙’ theo c´ach ho`an to`an kh´ac v´o.i
nh˜
u.ng thuˆa.t to´an tr`ınh b`ay trˆen. Phu.o.ng ph´ap n`ay du..a trˆen tham sˆo´ ho´a cu˙’a d¯oa.n thˇa˙’ng
v`a gia˙’i hˆe. c´ac bˆa´t phu.o.ng tr`ınh tuyˆe´n t´ınh theo mˆo.t ˆa˙’n sˆo´.
`om tˆa.p c´ac d¯iˆe˙’m trong mˇa.t phˇa˙’ng gi´o.i ha.n bo˙’.i c´ac
Nhˆa.n x´et rˇ`a ng h`ınh ch˜
u. nhˆa.t (R) gˆ
d¯u.`o.ng thˇa˙’ng qua c´ac ca.nh cu˙’a n´o; t´
u.c l`a
(R) = {(x, y) ∈ R2 | xmin ≤ x ≤ xmax , ymin ≤ y ≤ ymax }.
97


Tham sˆo´ ho´a ho´a d¯oa.n AB bo˙’.i P (t) := A + t(B − A) v´o.i t ∈ [0, 1].
`e x´ac
Nhu. vˆa.y b`ai to´an x´ac d¯i.nh giao cu˙’a h`ınh ch˜

u. nhˆa.t (R) v`a d¯oa.n thˇa˙’ng AB d¯u.a vˆ
d¯.inh c´ac gi´a tri. tham sˆo´ t thoa˙’ hˆe. c´ac bˆa´t phu.o.ng tr`ınh


t
≤ 1,

 0
xmin ≤ xA + t(xB − xA ) ≤ xmax ,


ymin ≤ yA + t(yB − yA ) ≤ ymax .
Hay tu.o.ng d¯u.o.ng
0

≤ t

≤ 1,

qi ≤ pi t,

i = 0, 1, 2, 3,

trong d¯´o
p0 =

dx, q0 = xmin − xA ,

p1 = −dx, q1 = xA − xmax ,
p2 =


dy, q2 = ymin − yA ,

p3 = −dy, q3 = yA − ymax ,
v´o.i dx := xB − xA , dy := yB − yA .
`on ta.i chı˙’ sˆo´ i ∈ {0, 1, 2, 3} sao cho pi = 0 v`a qi > 0 th`ı hˆe. bˆa´t phu.o.ng
Suy ra nˆe´u tˆ
u. nhˆa.t (R) bˇ`a ng
tr`ınh vˆo nghiˆe.m; trong tru.`o.ng ho..p n`ay, d¯oa.n thˇa˙’ng AB giao v´o.i h`ınh ch˜
trˆo´ng. Ngu.o..c la.i d¯ˇa.t
t0 := max{0, max{ pqii | pi > 0, i = 0, 1, 2, 3}},
t1 := min{1, min{ pqii | pi < 0, i = 0, 1, 2, 3}}.

Khi d¯´o hˆe. bˆa´t phu.o.ng tr`ınh tu.o.ng d¯u.o.ng v´o.i
t0 ≤ t ≤ t1 .
- iˆ
`eu n`ay chı˙’ ra rˇ`a ng d¯oa.n thˇa˙’ng AB giao v´o.i h`ınh ch˜
D
u. nhˆa.t (R) kh´ac trˆo´ng chı˙’ nˆe´u t0 < t1 ;
v`a trong tru.`o.ng ho..p n`ay,
AB ∩ (R) = {P (t) | t ∈ [t0 , t1 ]}.
Trˆen co. so˙’. nh˜
u.ng phˆan t´ıch trˆen, ta c´o thuˆa.t to´an chi tiˆe´t sau:
1. T´ınh pi , qi v´o.i i = 0, 1, 2, 3.
2. Kho˙’.i ta.o i = 0 v`a t0 = 0, t1 = 1.
u.ng.
3. Nˆe´u pi = 0 v`a qi > 0 kˆe´t luˆa.n AB ∩ (R) = ∅; thuˆa.t to´an d`
98



4. Nˆe´u pi > 0 d¯ˇa.t t0 = max{t0 , pqii }. Chuyˆe˙’n sang Bu.´o.c 7.
5. Nˆe´u pi < 0 d¯ˇa.t t1 = min{t1 , pqii }. Chuyˆe˙’n sang Bu.´o.c 7.
6. Nˆe´u t0 > t1 kˆe´t luˆa.n AB ∩ (R) = ∅; thuˆa.t to´an d`
u.ng.
7. Nˆe´u i < 3 thay i = i + 1 v`a lˇa.p la.i Bu.´o.c 3; ngu.o..c la.i, kˆe´t luˆa.n AB ∩ (R) = CD, trong
d¯o´
C = A + t0 (B − A),
D = A + t1 (B − A).
V´ı du. 3.3.4 H`ınh 3.8 minh ho.a mˆo.t v´ı du. cu˙’a thuˆa.t to´an Lang-Barsky.
7
B

@t1 = 1

6

...
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....

.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....

.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....

.....
.
.
.
.
.
.....
.....
.....
.....
.....
.....

5

D

@t1 =

4

(R)

3

2
3

C


2

@t0 =

A •
@t0 = 0

1

1

2

3

4

1
5

5

6

7

8

9


H`ınh 3.8: Mˆo.t v´ı du. cu˙’a thuˆa.t to´an Liang-Barsky.

V´ı du. 3.3.5 X´et h`ınh ch˜
u. nhˆa.t
R := {(x, y) ∈ R2 |0 ≤ x ≤ 8, 0 ≤ y ≤ 4}
v`a hai d¯iˆe˙’m A(−1, −2) v`a B(10, 9). Phu.o.ng tr`ınh tham sˆo´ d¯oa.n thˇa˙’ng AB c´o da.ng
(1 − t)A + tB.
`an gia˙’i hˆe. c´ac bˆa´t phu.o.ng
Ta cˆ


0
0


0

tr`ınh


t

≤ 1,

≤ (1 − t)(−1) + t(10) ≤ 8,


(1 − t)(−2) + t(9)
99


≤ 4.


Hay tu.o.ng d¯u.o.ng



 0 ≤ t ≤ 1,
1 ≤ 11t ≤ 9,


2 ≤ 11t ≤ 6.

Vˆa.y

6
2
≤t≤ .
11
11
Suy ra giao cu˙’a d¯oa.n thˇa˙’ng AB v`a h`ınh ch˜
u. nhˆa.t l`a d¯oa.n thˇa˙’ng nˆo´i hai d¯iˆe˙’m C v`a D trong
d¯´o
2
2
C = (1 − )A + B
11
11
9
2

=
(−1, −2) + (10, 9) = (1, 0).
11
11
v`a
6
6
D = (1 − )A + B
11
11
5
6
=
(−1, −2) + (10, 9) = (5, 4).
11
11

`oi
Giao cu˙’ a d
¯oa.n thˇ
a˙’ ng v`
ad
¯a gi´
ac lˆ

3.4
3.4.1

Vi. tr´ı tu.o.ng d
¯ˆ

o´i cu˙’ a mˆ
o.t d
¯iˆ
e˙’m v´
o.i d
¯u.`
o.ng thˇ
a˙’ ng

`eu u
Trong nhiˆ
´.ng du.ng ta thu.`o.ng quan tˆam kh´ai niˆe.m nu˙’.a mˇa.t phˇa˙’ng trong v`a nu˙’.a mˇa.t
phˇa˙’ng ngo`ai x´ac d¯.inh bo˙’.i mˆo.t d¯u.`o.ng thˇa˙’ng (xem Chu.o.ng 1). Kh´ai niˆe.m n`ay liˆen quan mˆa.t
thiˆe´t d¯ˆe´n ph´ap vector cu˙’a d¯u.`o.ng thˇa˙’ng.
Nhˇa´c la.i l`a phu.o.ng tr`ınh tˆo˙’ng qu´at cu˙’a d¯u.`o.ng thˇa˙’ng l c´o da.ng
ax + by + c = 0.
Hay tu.o.ng d¯u.o.ng
ax + by = −c.
−→

N´oi c´ach kh´ac, l = {P ∈ R2 | OP , n = D}, trong d¯´o n = (a, b)t l`a ph´ap vector cu˙’a d¯u.`o.ng
thˇa˙’ng v`a D = −c. K´
y hiˆe.u
−→

(l+ ) := {P ∈ R2 | OP , n > D},
−→

(l− ) := {P ∈ R2 | OP , n < D},
100



n

Q


Nu˙’.a mˇa.t phˇa˙’ng ngo`ai (l− )

..
.
.........
..
.....
...
.
.
....
.
....
..
...
.......
..
...
....
...
....
..
.

.
.
...
...
.
.
...
...
..
...
.....
...
.
...
...
.
.
...
................ ...
...
... ......
...
... ..
.
.
.
.
.
.
....................................................................................................................................................................................................................................................................................................................................................................

...
...
...
...
...
...
...
...
..
.........
...

θ

l / / / / / / / / / / / / / / / / / / / / / / /
A

Nu˙’.a mˇa.t phˇa˙’ng trong (l+ )
H`ınh 3.9: Vi. tr´ı tu.o.ng d¯oˆ´i cu˙’a d¯iˆe˙’m Q v´o.i d¯u.`o.ng thˇa˙’ng l.
l`a c´ac nu˙’.a mˇa.t phˇa˙’ng ngo`ai v`a nu˙’.a mˇa.t phˇa˙’ng trong x´ac d¯.inh bo˙’.i l (xem H`ınh 3.9).
uy y
´ trong mˇa.t phˇa˙’ng, h˜ay x´ac d¯.inh d¯iˆe˙’m
Vˆa´n d¯`ˆe d¯aˇ. t ra o˙’. d¯ˆay l`a v´o.i mˆo.t d¯iˆe˙’m Q t`
Q nˇ`a m trong nu˙’.a mˇa.t phˇa˙’ng n`ao? Gia˙’ su˙’. A l`a d¯iˆe˙’m nˇ`a m trˆen d¯u.`o.ng thˇa˙’ng l. K´
y hiˆe.u θ l`a
−→
g´oc gi˜
u.a vector n v`a vector AQ . Dˆ˜e d`ang thˆa´y rˇ`a ng g´oc θ nho˙’ ho.n 900 nˆe´u Q thuˆo.c nu˙’.a
−→
mˇa.t phˇa˙’ng ngo`ai v`a do d¯´o n, AQ > 0. Tu.o.ng tu.., g´oc θ l´o.n ho.n 900 nˆe´u Q thuˆo.c nu˙’.a mˇa.t

−→
phˇa˙’ng trong v`a do d¯o´ n, AQ < 0. Cuˆo´i c`
ung, g´oc θ bˇ`a ng 900 nˆe´u Q thuˆo.c d¯u.`o.ng thˇa˙’ng l
−→

v`a do d¯´o n, AQ = 0. Vˆa.y
−→

1. Q ∈ (l+ ) nˆe´u n, AQ > 0.
−→

2. Q ∈ (l− ) nˆe´u n, AQ < 0.
−→

3. Q ∈ l nˆe´u n, AQ = 0.
Ch´
uy
´ rˇ`a ng

−→

n, AQ > 0
tu.o.ng d¯u.o.ng

−→

n, OQ > D.
Do d¯´o ta c´o thˆe˙’ viˆe´t la.i tiˆeu chuˆa˙’n kiˆe˙’m tra d¯iˆe˙’m Q thuˆo.c nu˙’.a mˇa.t phˇa˙’ng n`ao nhu. sau:
−→


1. Q ∈ (l+ ) nˆe´u n, OQ > D.
−→

2. Q ∈ (l− ) nˆe´u n, OQ < D.
−→

3. Q ∈ l nˆe´u n, OQ = D.
Chˇa˙’ng ha.n, gˆo´c to.a d¯oˆ. (0, 0) thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai nˆe´u v`a chı˙’ nˆe´u D < 0.
101


.....
..... ..
..... .....
.....
...
.
.
.
.
...
...
...
.....
.....
...
.....
.
...
.

.
...
...
.
.
.
.
...
...
.
.
.
.
...
...
.
.
.
...
.
...
.
.
...
.
.
...
....
.
.

.
...
...
.
.
.
.
...
...
.
.
.
...
.
..
...
.......
...
...
............
...
...
...........
...
...
............
...
............
...
...........

.
.
...
.
.
.
...
.
.
.
.
.
.
...
... ....................
...
.......
............ ....
...
....
............
...........
.
.
...
.
.
...
.
.

.
.
.
.
.
...
........
.
...
.
.
.
.
.
.
.
.
.
...
.......
.
.
.
.
.
.
.
...
.
.

...
.
.
........
.
.
.
...
.
.
...
.
.
.
.
.
...
.......................
...
......
.
.
.
.
.
.
.
.
.
.

...
.......
..
.
.
.
.
.
.
.
.
.
.
.
.
.
....
...
....
.....
.
.
.....
.
.
...
.
...
.
.

.
...
...
.....
...
.....
...
.....
.
.....
....................................................................................................................

(R)

A

B

`oi.
H`ınh 3.10: Giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ

3.4.2

`oi
Thuˆ
a.t to´
an t`ım giao cu˙’ a d
¯oa.n thˇ
a˙’ ng v`
ad

¯a gi´
ac lˆ

Nˇam 1978, Cyrus v`a Beck [5] d¯a˜ xˆay du..ng thuˆa.t to´an x´ac d¯.inh giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a
`eu. H`ınh ch˜
`oi v`a c´o thˆe˙’ mo˙’. rˆo.ng dˆ˜e d`ang trong ba chiˆ
u. nhˆa.t l`a mˆo.t tru.`o.ng ho..p d¯aˇ. c
gi´ac lˆ
`oi v`a do d¯o´ c´o thˆe˙’ ´ap du.ng thuˆa.t to´an n`ay. Thuˆa.t to´an Liang-Barsky tr`ınh
biˆe.t cu˙’a d¯a gi´ac lˆ
`an tru.´o.c du..a trˆen c´ach tiˆe´p cˆa.n cu˙’a Cyrus v`a Beck. Thuˆa.t to´an Cyrus-Beck
b`ay trong phˆ
du..a trˆen tiˆeu chuˆa˙’n loa.i bo˙’ d¯o.n gia˙’n bˇ`a ng c´ach x´et vi. tr´ı tu.o.ng d¯ˆo´i cu˙’a mˆo.t d¯iˆe˙’m v´o.i mˆo.t
d¯u.`o.ng thˇa˙’ng.
Nhˇa´c la.i l`a trong thuˆa.t to´an Cohen-Sutherland, d¯ˆo´i v´o.i c´ac d¯oa.n thˇa˙’ng khˆong nˇ`a m
`an t´ınh to.a d¯ˆo. giao d¯iˆe˙’m (x, y) cu˙’a d¯oa.n
trong h`ınh ch˜
u. nhˆa.t hoˇa.c bi. loa.i bo˙’ ho`an to`an, ta cˆ
thˇa˙’ng v´o.i mˆo.t ca.nh n`ao d¯´o bˇa` ng c´ach thˆe´ gi´a tri. d¯˜a biˆe´t x hoˇa.c y v`ao phu.o.ng tr`ınh ca.nh
d¯u
´.ng hay ngang tu.o.ng u
´.ng. Tuy nhiˆen, trong thuˆa.t to´an tham sˆo´ ho´a d¯oa.n thˇa˙’ng, ta s˜e
t`ım c´ac gi´a tri. tham sˆo´ t trong khoa˙’ng biˆe˙’u diˆ˜en cu˙’a d¯oa.n thˇa˙’ng cho d¯iˆe˙’m giao cu˙’a d¯u.`o.ng
thˇa˙’ng v`a ca.nh d¯u.o..c x´et. N´oi chung, v`ı tˆa´t ca˙’ c´ac ca.nh s˜e giao v´o.i d¯u.`o.ng thˇa˙’ng, nˆen bˆo´n
`an d¯u.o..c t´ınh. V´o.i mˆo.t loa.t c´ac ph´ep so s´anh d¯o.n gia˙’n s˜e cho biˆe´t c´ac tham sˆo´
gi´a tri. t cˆ
trong bˆo´n gi´a tri. n`ay tu.o.ng u
´.ng v´o.i c´ac d¯iˆe˙’m giao thu..c su... Sau d¯o´ c´ac to.a d¯oˆ. (x, y) cu˙’a
mˆo.t hoˇa.c hai giao d¯iˆe˙’m d¯u.o..c x´ac d¯.inh. N´oi chung c´ach tiˆe´p cˆa.n n`ay s˜e tiˆe´t kiˆe.m th`o.i gian
`an thiˆe´t d¯ˆe˙’ cˇa´t nhiˆ

`eu ca.nh
ho.n thuˆa.t to´an cˇa´t x´en Cohen-Sutherland do n´o tr´anh v`ong lˇa.p cˆ
.
.
.
.
cu˙’a h`ınh ch˜
u nhˆa.t. Ho n n˜
u a, c´ac ph´ep t´ınh trong khˆong gian tham sˆo´ 1D d¯o n gia˙’n ho.n
trong khˆong gian 2D.
`oi (R) d¯u.o..c d¯.inh ngh˜ıa nhu. mˆo.t d˜ay c´ac d¯ı˙’nh Pi = (xi , yi ), i =
Gia˙’ su˙’. d¯a gi´ac lˆ
`an n`ay l`a loa.i bo˙’ nh˜
`an
0, 1, . . . , L, trong hˆe. to.a d¯oˆ. thu..c v´o.i P0 = PL . Mu.c d¯´ıch cu˙’a phˆ
u.ng phˆ
.
cu˙’a d¯oa.n thˇa˙’ng AB khˆong nˇ`a m trong “cu˙’ a sˆo˙’” (R) (H`ınh 3.10).
102


- ˇa.t

y hiˆe.u li , i = 0, 1, . . . , L, l`a d¯u.`o.ng thˇa˙’ng d¯i qua hai d¯ı˙’nh liˆen tiˆe´p Pi v`a Pi+1 . D
−→

(li+ ) := {P ∈ R2 | OP , ni > Di },
−→

(li− ) := {P ∈ R2 | OP , ni < Di },

l`a c´ac nu˙’.a mˇa.t phˇa˙’ng ngo`ai v`a mˇa.t phˇa˙’ng trong x´ac d¯i.nh bo˙’.i li , trong d¯´o ni l`a ph´ap vector
cu˙’a li d¯u.o..c cho.n hu.´o.ng ra nu˙’.a mˇa.t phˇa˙’ng ngo`ai v`a Di l`a hˇ`a ng sˆo´ n`ao d¯´o. V`ı (R) l`a mˆo.t
`oi, nˆen phˆ
`an trong cu˙’a d¯a gi´ac (R) ch´ınh l`a giao cu˙’a c´ac nu˙’.a mˇa.t phˇa˙’ng bˆen trong cu˙’a
tˆa.p lˆ
mˆo˜i ca.nh x´ac d¯.inh bo˙’.i (R); t´
u.c l`a
L

(li− ).

(R) =

(3.3)

i=0

´ tu.o˙’.ng cu˙’a thuˆa.t to´an nhu. sau. V´o.i mˆo˜i d¯u.`o.ng thˇa˙’ng li , i = 0, 1, . . . , L, ch´
Y
ung ta
.
.
`an cu˙’a d¯oa.n thˇa˙’ng AB thuˆo.c nu˙’ a mˇa.t phˇa˙’ng ngo`ai x´ac d¯i.nh bo˙’ i li v`a cˆa.p nhˆa.t
loa.i bo˙’ phˆ
AB = AB ∩ (li− ). Nˆe´u o˙’. bu.´o.c n`ao d¯o´ AB ⊂ (li+ ) th`ı kˆe´t luˆa.n giao cu˙’a d¯oan thˇa˙’ng v`a d¯a
`oi bˇ`a ng trˆo´ng; ngu.o..c la.i, o˙’. bu.´o.c cuˆo´i c`
`an d¯oa.n thˇa˙’ng AB c`on la.i s˜e nˇ`a m bˆen
gi´ac lˆ
ung phˆ
`an giao cˆ

`an t`ım.
trong (R) ch´ınh l`a phˆ
- ˆe˙’ dˆ˜e d`ang xu˙’. l´
D
y, ch´
ung ta biˆe˙’u diˆ˜en AB o˙’. da.ng tham sˆo´
P (t) = A + ct
−−−→

trong d¯o´ c = BA l`a vector chı˙’ phu.o.ng cu˙’a d¯u.`o.ng thˇa˙’ng AB. Khi t = 0, P (t) d¯aˇ. t ta.i d¯iˆe˙’m
A v`a t = 1, P (t) d¯aˇ. t ta.i d¯iˆe˙’m B. Ta n´oi P (t) “di chuyˆe˙’n” t`
u. A d¯ˆe´n B khi t tˇang t`
u. 0 d¯ˆe´n
1 v`a c l`a hu.´o.ng di chuyˆe˙’n.
Khi x´et d¯u.`o.ng thˇa˙’ng li ch´
ung ta su˙’. du.ng hai gi´a tri. tin v`a tout d¯ˆe˙’ x´ac d¯.inh pha.m vi
thay d¯oˆ˙’i cu˙’a tham sˆo´ t d¯oˆ´i v´o.i d¯oa.n thˇa˙’ng AB c`on la.i. T´
u.c l`a, du..a trˆen c´ac tham sˆo´ n`ay
`an c`on la.i cu˙’a d¯oa.n AB o˙’. bu.´o.c d¯ang x´et ch´ınh l`a tˆa.p c´ac d¯iˆe˙’m
ch´
ung ta c´o thˆe˙’ x´ac d¯.inh phˆ
P (t) v´o.i tin ≤ t ≤ tout . L´
uc ban d¯`aˆu tin = 0 v`a tout = 1. Khoa˙’ng thay d¯oˆ˙’i cu˙’a tham sˆo´ t s˜e
`an khˆong nˇ`a m trong d¯a gi´ac (R)
tiˆe´p tu.c co la.i khi kiˆe˙’m tra v´o.i mˆo.t ca.nh m´o.i v`a nh˜
u.ng phˆ
s˜e bi. loa.i bo˙’. Nˆe´u o˙’. bu.´o.c n`ao d¯´o, khoa˙’ng n`ay bˇa` ng trˆo´ng thuˆa.t to´an s˜e kˆe´t th´
uc v`a ta c´o
.
.

.
.
.
giao cu˙’a d¯oa.n thˇa˙’ng AB v´o i d¯a gi´ac (R) bˇa` ng trˆo´ng. Trong tru `o ng ho. p ngu o..c la.i, d¯oa.n
`an giao AB ∩ (R).
c`on la.i [tin , tout ] s˜e x´ac d¯i.nh phˆ
X´et d¯u.`o.ng thˇa˙’ng li d¯i qua hai d¯ı˙’nh Pi v`a Pi+1 . C´o hai tru.`o.ng ho..p xa˙’y ra:
103


- u.`
D
o.ng thˇ
a˙’ ng li song song v´
o.i d
¯oa.n thˇ
a˙’ ng AB.
- u.`o.ng thˇa˙’ng li song song v´o.i d¯oa.n thˇa˙’ng AB nˆe´u ph´ap vector ni vuˆong g´oc v´o.i vector c;
D

u.c l`a ni , c = 0. Trong tru.`o.ng ho..p n`ay, d¯oa.n thˇa˙’ng AB nˇ`a m ho`an to`an trong nu˙’.a mˇa.t
- ˆe˙’ kiˆe˙’m tra tru.`o.ng ho..p n`ao xa˙’y ra, ta
phˇa˙’ng ngo`ai (li+ ) hoˇa.c nu˙’.a mˇa.t phˇa˙’ng trong (li− ). D
−−−→
- ˇa.t a = OA .
`an x´et vi. tr´ı tu.o.ng d¯oˆ´i cu˙’a mˆo.t d¯iˆe˙’m, chˇa˙’ng ha.n A, v´o.i d¯u.`o.ng thˇa˙’ng li . D
chı˙’ cˆ
Khi d¯´o
- oa.n thˇa˙’ng AB thuˆo.c nu˙’.a mˇa.t phˇa˙’ng trong (li− ) nˆe´u ni , a < Di . Trong tru.`o.ng ho..p
1. D

`an cˆa.p nhˆa.t la.i c´ac tham sˆo´ tin v`a tout .
n`ay ta khˆong cˆ
2. Ngu.o..c la.i, nˆe´u ni , a > Di th`ı d¯oa.n thˇa˙’ng AB thuˆo.c nu˙’.a mˇa.t phˇa˙’ng ngo`ai (li+ ) v`a do
d¯o´ theo (3.3) th`ı AB ∩ (R) = ∅; thuˆa.t to´an kˆe´t th´
uc.

- u.`
D
o.ng thˇ
a˙’ ng li khˆ
ong song song v´
o.i d
¯oa.n thˇ
a˙’ ng AB.
Nˆe´u d¯u.`o.ng thˇa˙’ng li khˆong song song v´o.i AB th`ı gi´a tri. ni , c kh´ac khˆong v`a li pha˙’i cˇa´t
`on ta.i ti sao cho P (ti ) ∈ li . Dˆ˜e d`ang kiˆe˙’m tra rˇ`a ng
d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A, B; t´
u.c l`a tˆ
ti =

Di − ni , a
.
ni , c

- ˆe˙’ d¯iˆ
`an lu.u y
`eu n`ay khˆong xa˙’y ra, thuˆa.t

´ mˆa˜u sˆo´ trong biˆe˙’u th´
u.c trˆen c´o thˆe˙’ bˇa` ng khˆong. D

`an kiˆe˙’m tra
to´an cˆ
• ni = 0 (t´
u.c l`a, ph´ap vector pha˙’i kh´ac vector khˆong); v`a
• c = 0 (t´
u.c l`a A = B).
C´o hai tru.`o.ng ho..p nhu. trong H`ınh 3.11:
- i v`ao. D
- oa.n thˇa˙’ng AB d¯i t`
1. D
u. nu˙’.a mˇa.t phˇa˙’ng ngo`ai (li+ ) v`ao nu˙’.a mˇa.t phˇa˙’ng trong
(li− ) (H`ınh 3.11(a)).
- i ra. D
- oa.n thˇa˙’ng AB d¯i t`
2. D
u. nu˙’.a mˇa.t phˇa˙’ng trong (li− ) ra nu˙’.a mˇa.t phˇa˙’ng ngo`ai (li+ )
(H`ınh 3.11(b)).
104


(a)

A

Nu˙’.a mˇa.t phˇa˙’ng ngo`ai

...
...
...
...

...
....
...
...
...
......
...
...
....
...
.
.
.............................................................................................................................................................................................................................................................
...
...
...
.
.
.
...
...
.
..
.
.
...
.
...
.........
...

..
...
.
..
...
.
.
.
...
...
.
.
.
.
...
...
...
...
...
...
...
...
...
..
...
...
..
.
.
.

.
...
... ..
...
..........
...
............. ....
...
.
.............
...
.............
.
.
.
.
..........
.
.
.
.
.
.
.
.
...............
..

n


li //////////////////////////////////

t
.
Nu˙’ a mˇa.t phˇa˙’ng trong

c

B
(b)

Nu˙’.a mˇa.t phˇa˙’ng ngo`ai
t

A

......
.......
...
...
...
.
.
.
...
...
.........
..........
...
...

...
...
.
.
.
...........................................................................................................................................................................................................................................................
..
.
...
...
..
...
...
...
.
...
..
...
...
...
..
.
.
.
.
.
...
...
.
.

.
...
...
..
...
...
.
...
..
...
.
...
...
...
...
...
..
...
... ...
...
... ...
...
.
.
.
.
.....
...
............. .....
...

.............
...
...
.............
...
..........................

n

li //////////////////////////////////

Nu˙’.a mˇa.t phˇa˙’ng trong

c

B
- oa.n thˇa˙’ng AB d¯i v`ao hay d¯i ra nu˙’.a mˇa.t phˇa˙’ng x´ac d¯.inh bo˙’.i li .
H`ınh 3.11: D
- ˆe˙’ x´ac d¯i.nh tru.`o.ng ho..p n`ao xa˙’y ra, ch´
D
ung ta x´et g´oc θ ho..p bo˙’.i c´ac vector c v`a ni .
Nˆe´u g´oc θ nho˙’ ho.n 900 (t´
u.c l`a ni , c > 0) th`ı tu.o.ng u
´.ng d¯i ra; ngu.o..c la.i u
´.ng v´o.i d¯i v`ao.
`an u
`an
Trong tru.`o.ng ho..p d¯i v`ao, th`ı phˆ
´.ng v´o.i t < ti nˇ`a m ngo`ai d¯a gi´ac (R) v`a do d¯´o cˆ
`an u

cˆa.p nhˆa.t la.i tin := max(tin , ti ). Ngu.o..c la.i, nˆe´u d¯i ra, phˆ
´.ng v´o.i t > ti nˇ`a m ngo`ai d¯a gi´ac
(R) v`a do d¯´o cˆa.p nhˆa.t la.i tout := min(tout , ti ).
Ch´
uy
´ rˇ`a ng, o˙’. bu.´o.c n`ao d¯o´ nˆe´u xa˙’y ra tru.`o.ng ho..p tin > tout th`ı thuˆa.t to´an s˜e kˆe´t
`an giao AB ∩ (R) = ∅.
th´
uc: phˆ
Trong tru.`o.ng ho..p ngu.o..c la.i, o˙’. bu.´o.c cuˆo´i c`
ung, AB ∩ (R) l`a d¯oa.n thˇa˙’ng tu.o.ng u
´.ng
hai d¯iˆe˙’m d¯`ˆau cuˆo´i P (tin ) v`a P (tout ).
`e tri. False nˆe´u giao cu˙’a d¯oa.n thˇa˙’ng AB v`a d¯a gi´ac (R) (d¯u.o..c
H`am Cyrus Beck() tra˙’ vˆ
`an giao l`a
lu.u trong danh s´ach Poly kiˆe˙’u VertPtr2D) bˇ`a ng trˆo´ng; ngu.o..c la.i l`a True v`a phˆ
- ˆe˙’ ho`an thiˆe.n thu˙’ tu.c, ch´
`an pha˙’i thˆem c´ac d`ong lˆe.nh kiˆe˙’m tra c´ac
d¯oa.n AB m´o.i. D
ung ta cˆ
`eu kiˆe.n biˆen.
d¯iˆ
Boolean Cyrus_Beck(Point2D *A, Point2D *B, VertPtr2D Poly)
{
float t_in = 0, t_out = 1, t_hit, Denom, D;
Point2D F, S;
105



Vector2D c, n, f, a;
VertPtr2D Tempt = Poly;
if (Tempt == NULL) return False;
F = Tempt->Vertex;
c.dx = (*B).x - (*A).x;
c.dy = (*B).y - (*A).y;
a.dx = (*A).x;
a.dy = (*A).y;
while ((Tempt = Tempt->Next) != NULL)
{
S = Tempt->Vertex;
n.dx = (S.y - F.y);
n.dy = (F.x - S.x);
f.dx = F.x;
f.dy = F.y;
D = Dot2D(n, f);
if ((Denom = Dot2D(n, c)) == 0.0)
if (Dot2D(n, a) > 0.0) return False;
else
{
t_hit = (D - Dot2D(n, a)) / Denom;
if (Denom > 0.0)
{
if (t_out > t_hit) t_out = t_hit;
}
else
{
if (t_in < t_hit) t_in = t_hit;
}
if (t_in > t_out) return False;

106


}
F = S;
}
F.x = (1 - t_in)*(*A).x + t_in*(*B).x;
F.y = (1 - t_in)*(*A).y + t_in*(*B).y;
S.x = (1 - t_out)*(*A).x + t_out*(*B).x;
S.y = (1 - t_out)*(*A).y + t_out*(*B).y;
*A = F;
*B = S;
return True;
}

`eu cho b`ai to´an x´ac
Ch´
uy
´ rˇ`a ng dˆ˜e d`ang mo˙’. rˆo.ng thuˆa.t to´an trong khˆong gian ba chiˆ
`oi.
d¯.inh giao cu˙’a mˆo.t d¯oa.n thˇa˙’ng v`a mˆo.t d¯a diˆe.n lˆ

3.5

Giao hai d
¯a gi´
ac

`au hˆe´t c´ac u
Trong hˆ

´.ng du.ng, c´ac d¯a gi´ac d¯u.o..c d¯i.nh ngh˜ıa nhu. mˆo.t d˜ay c´ac d¯ı˙’nh trong hˆe.
`eu tru.`o.ng ho..p ch´
ung d¯u.o..c d¯.inh ngh˜ıa nhu. vˆa.y v`a trong nhiˆ
to.a d¯ˆo. thu..c. Mˆo.t cu˙’.a sˆo˙’ c˜
ung
.
.
.
.
`an d¯oˆ´i tu o. ng nˇ`a m bˆen trong cu˙’ a sˆo˙’ x´ac d¯.inh bo˙’ i d¯a gi´ac.
ta muˆo´n v˜e phˆ
V´o.i d¯ˆo´i tu.o..ng l`a mˆo.t d¯oa.n thˇa˙’ng, ta c´o thˆe˙’ ´ap du.ng phu.o.ng ph´ap Cyrus-Beck trong
`an 3.4: d¯oa.n thˇa˙’ng d¯u.o..c cˇa´t d¯oˆ´i v´o.i mˆo˜i d¯u.`o.ng biˆen cu˙’a d¯a gi´ac, v`a c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i
Phˆ
`an ph´
d¯u.o..c h`ınh th`anh. V´o.i c´ac d¯ˆo´i tu.o..ng l`a d¯a gi´ac th`ı viˆe.c t`ım giao (hay cˇa´t x´en) c´o phˆ
u.c
ta.p ho.n bo˙’.i v`ı trong qu´a tr`ınh xu˙’. l´
y thuˆa.t to´an cˇa´t, mˆo.t d¯a gi´ac c´o thˆe˙’ bi. phˆan ma˙’nh th`anh
- a gi´ac c´o thˆe˙’ d¯u.o..c tˆo m`au v´o.i mˆa˜u tˆo cho
`eu d¯a gi´ac con kh´ac nhu. trong H`ınh 3.12. D
nhiˆ
tru.´o.c v`a do d¯o´ c´ac ma˙’nh d¯a gi´ac pha˙’i d¯u.o..c nˆo´i kˆe´t v´o.i mˆa˜u tˆo d¯´o.
Ta s˜e quy u.´o.c rˇ`a ng d¯a gi´ac bi. cˇa´t l`a d¯a gi´ac d¯oˆ´i tu.o..ng (S). Cu˙’.a sˆo˙’ s˜e d¯u.o..c go.i l`a d¯a
`an giao gi˜
gi´ac cˇa´t (C). Vˆa´n d¯`ˆe d¯ˇa.t ra l`a l`am sao ta.o ra mˆo.t danh s´ach c´ac d¯ı˙’nh cu˙’a phˆ
u.a
hai d¯a gi´ac n`ay?
`an sau, ch´
Trong nh˜

u.ng phˆ
ung ta s˜e x´et hai phu.o.ng ph´ap:
107


×