Download as pdf or txt
Download as pdf or txt
You are on page 1of 173

HO

TINH I
-`
D
O
. A MAY
Pha.m Tien So.n
- `a La.t, 2005
D

Mu.c lu.c
`au
L`
o.i n
oi d

o.ng cong tr
en thi
et bi. raster
1 C
ac thu
a.t to
an v
ed
u.`

1.1

1.2

1.3

- oa.n thang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D

1.1.1

Thua.t toan so gia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.1.2

Thua.t toan diem gi


u.a . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.1.3

Mo.t so van d`e lien quan den thua.t toan ve doa.n thang . . . . . . . .

18

1.1.4

Cac thuo.c tnh cua doa.n thang . . . . . . . . . . . . . . . . . . . . .

21

- u.`o.ng tr`on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D

22

1.2.1

- oi x
D
u.ng tam diem . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

1.2.2

Thua.t toan diem gi


u.a ve du.`o.ng tr`on . . . . . . . . . . . . . . . . . .

23

- u.`o.ng cong ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


D

28

1.3.1

Ellipse co da.ng chnh tac . . . . . . . . . . . . . . . . . . . . . . . . .

29

1.3.2

Ellipse trong tru.`o.ng ho..p tong quat . . . . . . . . . . . . . . . . . . .

34

o.ng cong v`
a m
a.t cong
2 H`nh ho.c cu a c
ac d
u.`
2.1

Mo. d`au . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3

47
47

- u.`o.ng cong Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


D

48

2.2.1

Thua.t toan de Casteljau . . . . . . . . . . . . . . . . . . . . . . . . .

48

2.2.2

- a th
D
u.c Bernstein v`a du.`o.ng cong Bezier . . . . . . . . . . . . . . . .

52

Cac tnh chat cua du.`o.ng cong Bezier . . . . . . . . . . . . . . . . . . . . . .

55

- i
`eu khien d.ia phu.o.ng . . . . . . . . . . . . . . . . . . . . . . . . . .
D

59

- a th
u.ng kh
uc v`a cac h`am spline . . . . . . . . . . . . . . . . . . . . . .
D
u.c t`

60

2.4.1

Su. du.ng cac h`am spline nhu. cac h`am tro.n . . . . . . . . . . . . . . .

63

2.4.2

Xay du..ng cac h`am tro.n . . . . . . . . . . . . . . . . . . . . . . . . .

65

2.4.3

- u.`o.ng cong spline v`a cac h`am co. so. . . . . . . . . . . . . . . . . . .


D

66

2.4.4

Cac h`am B-spline co. so. . . . . . . . . . . . . . . . . . . . . . . . . .

66

2.4.5

Su. du.ng cac knot bo.i . . . . . . . . . . . . . . . . . . . . . . . . . . .

71

2.4.6

Vector knot chuan . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

2.5

Cac tnh chat cua du.`o.ng cong B-spline . . . . . . . . . . . . . . . . . . . . .

75

2.6

`eu khien b`a ng du.`o.ng cong B-spline . . . . . . . . . . . .


No.i suy cac diem di

77

2.7

Thiet ke cac ma.t Bezier v`a B-spline . . . . . . . . . . . . . . . . . . . . . . .

80

2.7.1

Patch Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

80

2.7.2

Dan cac patch Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . .

81

2.7.3

Patch spline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

82

2.2

2.3

2.3.1
2.4

3 Giao cu a c
ac d

oi tu.o..ng

83

3.1

Mo. d`au . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83

3.2

Giao cua hai doa.n thang . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83

3.2.1

84

Phan tch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4

Thua.t toan xac di.nh giao hai doa.n thang . . . . . . . . . . . . . . . .

86

- oa.n thang v`a h`nh ch


D
u. nha.t . . . . . . . . . . . . . . . . . . . . . . . . . .

87

3.3.1

T`m giao b`a ng cach giai he. cac phu.o.ng tr`nh . . . . . . . . . . . . . .

89

3.3.2

Thua.t toan chia nhi. phan . . . . . . . . . . . . . . . . . . . . . . . .

89

3.3.3

Thua.t toan Cohen-Sutherland . . . . . . . . . . . . . . . . . . . . . .

93

3.3.4

Thua.t toan Liang-Barsky

97

3.2.2
3.3

3.4

3.5

3.6

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

`oi . . . . . . . . . . . . . . . . . . . . . . . 100
Giao cua doa.n thang v`a da giac l
3.4.1

Vi. tr tu.o.ng doi cua mo.t diem vo.i du.`o.ng thang . . . . . . . . . . . . 100

3.4.2

`oi . . . . . . . . . . 102
Thua.t toan t`m giao cua doa.n thang v`a da giac l

Giao hai da giac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107


3.5.1

Thua.t toan Sutherland-Hodgman . . . . . . . . . . . . . . . . . . . . 108

3.5.2

Thua.t toan Weiler-Atherton . . . . . . . . . . . . . . . . . . . . . . . 111

3.5.3

Cac phep toan ta.p ho..p tren cac da giac . . . . . . . . . . . . . . . . 113

`eu: phan xa. trong bu


`ong kn . . . . . . . . . . . . . . . . 114
Ray tracing hai chi
3.6.1

Vector phan xa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

3.6.2

Giao cua tia sang v`a du.`o.ng thang

3.6.3

Giao cua tia sang vo.i du.`o.ng tr`on . . . . . . . . . . . . . . . . . . . . 121

3.6.4

Xay du..ng v du. ray tracing . . . . . . . . . . . . . . . . . . . . . . . 124

3.6.5

`ong kn l`a ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126


Bu

4 T
o m`
au v`
ung
4.1

. . . . . . . . . . . . . . . . . . . 117

127

Cac di.nh ngha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127


4.1.1

V`
ung di.nh ngha bo.i pixel . . . . . . . . . . . . . . . . . . . . . . . . 127
5

4.1.2

V`
ung di.nh ngha bo.i da giac . . . . . . . . . . . . . . . . . . . . . . . 129

4.2

`au loang . . . . . . . . . . . . . . . . . . . . . 129


Thua.t toan to m`au theo vet d

4.3

Thua.t toan to m`au theo con cha.y . . . . . . . . . . . . . . . . . . . . . . . . 131

4.4

Thua.t toan to m`au theo bien . . . . . . . . . . . . . . . . . . . . . . . . . . 134

4.5

So sanh cac thua.t toan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

4.6

To m`au cac h`nh ch


u. nha.t . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

4.7

Thua.t toan to m`au da giac . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

4.8

4.7.1

Cac d`ong quet ngang . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

4.7.2

Cac manh vu.n

4.7.3

Lien ket ca.nh v`a thua.t toan tr`an . . . . . . . . . . . . . . . . . . . . 151

4.7.4

`ong nhau . . . . . . . . . . . . . . . . . . . . . 158


To m`au cac da giac ch

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

To m`au theo mau to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

`an phu. lu.c: Thu. vi


Ph
e.n graph2D.h

163

T`
ai li
e.u tham kha o

171

`au
L`
o.i n
oi d

- `o ho.a may tnh l`a mo.t lnh vu..c hap dan cua khoa ho.c may tnh. Ch
D
ung ta su. du.ng d`o ho.a
`eu lnh vu..c khac nhau, bao g
`om
may tnh nhu. mo.t cong cu. de quan sat thong tin trong nhi
.
.
.
.
khoa ho.c v`a cong nghe., hoa ho.c, kien tr
uc v`a giai tr. Cac chu o ng tr`nh d`o ho.a tu o ng tac
cho phep ngu.`o.i su. du.ng l`am vie.c theo cach tu.. nhien nhat: ngu.`o.i su. du.ng cung cap thong
tin cho tr`nh u
.ng du.ng thong qua cac hoa.t do. ng ben ngo`ai cua ho. v`a se nha.n du.o..c thong
- `o ho.a may tnh dang gi
`e quan nie.m v`a
tin tro. la.i b`a ng h`nh anh. D
up con ngu.`o.i thay doi v
.
.
cach th
u c su du.ng may tnh.
- `o ho.a may tnh I cung cap mo.t so k
Giao tr`nh D
y thua.t co. ban cua d`o ho.a may tnh
- `o ho.a may tnh ba chi
`eu. (D
`eu, mo.t ph
`an quan tro.ng khong the thieu du.o..c se du.o..c
hai chi
- e co mo.t khung canh to`an die.n v`a sau sac v
`e nh
d`e ca.p trong mo.t giao tr`nh khac). D
u.ng
nguyen l
y v`a thu..c h`anh cua d`o ho.a may tnh, xem cac t`ai lie.u dan [9] v`a [11]. Cac phu.o.ng
phap phan tch v`a thiet ke cac thua.t toan trong giao tr`nh cho phep sinh vien co the viet
de d`ang cac chu.o.ng tr`nh minh ho.a. Giao tr`nh du.o..c bien soa.n cho cac doi tu.o..ng l`a sinh
vien Toan-Tin v`a Tin ho.c.
u. C de minh ho.a, tuy nhien co the de d`ang chuyen doi
Giao tr`nh su. du.ng ngon ng
`an co mo.t so kien th
`e ngon ng
sang cac ngon ng
u. khac; v`a do do, sinh vien c
u.c v
u. C. Ngo`ai
`au het cac chu.o.ng tr`nh thao tac tren cau tr
uc d
u. lie.u nhu. danh sach lien ket, nen do`i
ra, h
hoi sinh vien phai co nh
u.ng k
y nang la.p tr`nh tot.
`an co co. so. toan ho.c cua nh
`e da.i so
Sinh vien c
ung c
u.ng nam d`au da.i ho.c: hieu biet v
tuyen tnh v`a h`nh ho.c giai tch, phep tnh vi tch phan.
Mu.c dch cua giao tr`nh l`a, o. m
u.c do. n`ao do, cho thay cac tr`nh u
.ng du.ng d`o ho.a
`an viet v`a cha.y thu. cac chu.o.ng tr`nh. Mo.t trong
du.o..c ta.o ra nhu. the n`ao: Ch
ung ta c
nh
u.ng mu.c dch chnh cua giao tr`nh l`a gi
up sinh vien nam v
u.ng cac phu.o.ng phap, tru.o.c
het toan ho.c hoa cac khac nie.m h`nh ho.c v`a sau do chuyen tai th`anh cac doa.n ma chu.o.ng
tr`nh.
7

`om bon chu.o.ng v`a mo.t ph


`an phu. lu.c vo.i nh
Giao tr`nh bao g
u.ng no.i dung chnh nhu.
sau:
Chu.o.ng th
u. nhat d`e ca.p den cac phu.o.ng phap ve cac nguyen so. cua d`o ho.a may
tnh: doa.n thang, du.`o.ng tr`on v`a ellipse.
`au het cac
Phan tch v`a thiet ke b`a ng h`nh ho.c l`a no.i dung chnh cua Chu.o.ng 2. H
.
.
.
.
.
`an m
`em d`o ho.a d`eu co nh
ph
u ng ch
u c nang ta.o ra cac du `o ng cong du. a tren cac diem
m`a ngu.`o.i su. du.ng lu..a cho.n. Chu.o.ng n`ay cung cap nh
u.ng nguyen l
y v`a cach tiep ca.n
.
.
thu. c h`anh m`a cac tr`nh u
ng du.ng d`o ho.a ap du.ng.
Chu.o.ng 3 giai quyet b`ai toan xac di.nh giao cua nh
u.ng nguyen so. d`o ho.a: Giao hai
`oi (bao h`am cac h`nh ch
doa.n thang, giao cua doa.n thang v`a da giac l
u. nha.t) v`a giao
`eu:
cua hai da giac. Cuoi chu.o.ng l`a mo.t v du. cua k
y thua.t ray tracing hai chi
`ong kn co ch
Chuyen do. ng cua tia sang trong bu
u.a cac chu.o.ng nga.i va.t.
Chu.o.ng 4 d`e ca.p den nh
u.ng thua.t toan to m`au v`
ung bat k`
y: V`
ung di.nh ngha bo.i
`an trong, bo.i du.`o.ng bien v`a v`
ph
ung l`a da giac.
`an phu. lu.c l`a thu. vie.n cac cau tr
`an thiet v`a thu.`o.ng xuyen
Ph
uc d
u. lie.u v`a cac h`am c
su. du.ng trong giao tr`nh.
`an xuat ban th
Trong l
u. hai n`ay, ch
ung toi du.a them cac v du. tnh toan nh`a m minh
`an l
ho.a cho ph
y thuyet c
ung nhu. gi
up sinh vien nam v
u.ng kien th
u.c da ho.c. Ngo`ai ra, cac
`an tru.o.c c
loi trong xuat ban l
ung da du.o..c chnh l
y; ma.c d`
u va.y, tac gia van mong co nh
u.ng
dong gop t`
u. ba.n do.c.
`eu ngu.`o.i m`a khong the lie.t ke
Toi xin cam o.n nh
u.ng gi
up do. da nha.n du.o..c t`
u. nhi
het, da. c bie.t l`a cac ba.n sinh vien, trong qua tr`nh bien soa.n giao tr`nh n`ay.
- `a La.t, ng`ay 10 thang 1 nam 2005
D
.
PHA
. M Tien So n

Chu.o.ng 1
C
ac thu
a.t to
an v
ed
u.`
o.ng cong tr
en
thi
et bi. raster
Chu.o.ng n`ay tr`nh b`ay cac thua.t toan ve doa.n thang, du.`o.ng tr`on v`a ellipse tren lattice
nguyen Z2 . Cac thua.t toan ch thao tac tren nh
u.ng so nguyen v`a trong cac v`ong la.p ch su.
du.ng phep toan co.ng nen rat hie.u qua.

1.1

- oa.n th
D
a ng

`an vo.i doa.n thang


Thua.t toan ve doa.n thang xac d.inh to.a do. cua cac pixel na` m tren hoa.c g
`e nguyen tac, ch
`an vo.i doa.n thang thu..c te
thu..c te nhat. V
ung ta muon cho.n day cac pixel g
`an co
nhat v`a thang nhat. Xet doa.n thang thu..c te du.o..c xap x vo.i ma.t do. mo.t pixel; ta c
nh
u.ng tnh chat g`? Vo.i cac doa.n thang co he. so goc thuo.c doa.n [1, 1], co du
ng mo.t pixel
.
.
.
du o. c ve len tren moi co.t; vo i cac doa.n thang m`a he. so goc n`a m ngo`ai doa.n n`ay, co du
ng
mo.t pixel du.o..c ve tren moi h`ang. Tat ca cac doa.n thang du.o..c ve vo.i c`
ung mo.t do. sang,
.
.
.
.
khong phu. thuo.c v`ao do. d`ai v`a hu o ng, v`a nhanh nhat co the du o. c. Thua.t toan ve doa.n
`an ch
thang c
ung c
uy
den cac thuo.c tnh cua doa.n thang nhu. do. ro.ng, kieu ve... Tha.m ch
u.c do. rang cu.a do tien tr`nh r`o.i ra.c hoa du.`o.ng thang thu..c
ch
ung ta muon cu..c tieu hoa m
te nh`o. su. du.ng k
y thua.t antialiasing (xem [9], [11]) ba` ng cach ap du.ng kha nang da.t cu.`o.ng
`eu bit.
do. cua moi pixel tren cac thiet bi. hien thi. m`a mo.t pixel tu.o.ng u
.ng nhi
ung ta ch d`e ca.p den cac doa.n thang do. ro.ng mo.t pixel v`a co du
ng mo.t
Tru.o.c het ch
.
.
.
`an cuoi chu o ng se d`e ca.p
pixel tren moi co.t (hoa.c h`ang doi vo i cac doa.n thang doc). Ph
9

den do. ro.ng cac nguyen so. v`a cac mau ve.
Mo.t cach h`nh ho.c, ch
ung ta bieu dien mo.t pixel nhu. mo.t cham tr`on vo.i tam ta.i vi.
tr (x, y) cua pixel tren lu.o.i cac to.a do. nguyen Z2 . Bieu dien n`ay l`a mo.t xap x thch ho..p
nhat cat ngang trong mo.t chu k`
y cua ch`
um tia electron cua CRT; xap x n`ay phu. thuo.c v`ao
khoang cach (tu`
y thuo.c v`ao he. thong) gi
u.a cac vet tren m`an h`nh hien thi.. Trong mo.t so
`e nhau phu lap mo.t ph
`an len nhau; vo.i nh
he. thong, cac cham k
u.ng he. thong khac co nh
u.ng
`e nhau; trong h
`au het cac he. thong, khoang cach theo
khoang cach gi
u.a cac pixel du
.ng k
`eu ngang nho ho.n theo chi
`eu du
chi
.ng. Mo.t khac bie.t n
u.a tu`
y theo he. thong trong vie.c bieu
u. nha.t
dien he. to.a do. , chang ha.n Macintosh xem cac pixel du.o..c da. t ta.i tam cua h`nh ch
`e nhau cua lu.o.i di
`eu khien thay cho na` m tren cac du.`o.ng thang cua
gi
u.a cac du.`o.ng thang k
`om cac pixel thuo.c ph
`an
lu.o.i. Theo cach n`ay, cac h`nh ch
u. nha.t (xac di.nh bo.i hai goc) g
- .inh ngha n`ay cho phep cac v`
trong cua no. D
ung do. ro.ng b`a ng khong: H`nh ch
u. nha.t t`
u.
(x, y) den (x, y) khong ch
u.a pixel n`ao, trong khi vo.i nh
u.ng he. thong khac, co du
ng mo.t
ung ta se bieu dien cac pixel nhu. cac h`nh tr`on r`o.i nhau co
pixel ta.i diem n`ay. Du.o.i day ch
tam n`a m tren lu.o.i.
H`nh 1.1 l`a phong to cua du.`o.ng thang thu..c te v`a xap x do. ro.ng mo.t pixel cua no.
Cac pixel du.o..c ve tu.o.ng u
.ng cac h`nh tr`on m`au den v`a cac pixel khong du.o..c ve tu.o.ng u
.ng
h`nh tr`on khong to. Tren m`an h`nh thu..c te, du.`o.ng knh cua h`nh tr`on bieu dien pixel lo.n
`e nhau, bo.i va.y bieu dien ba` ng k
y hie.u cua ch
ung ta l`a
ho.n khoang cach gi
u.a cac pixel k
mo.t phong da.i m
u.c do. r`o.i ra.c cua cac pixel.
...
...
...
...
...
...
...
...
...
...
..
...
...
...
...
.
.
.
...
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.....................................................................................................................................................................................................................................
..
..
..
..
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
...
...
...
...
...
.......
...
...
...
...
.................
..
.
.
...
...
...
...
.
..... ...
.
.
.
.
.
...
...
...
...
.
...
..................................................................................................................................................................................................................................................
...
...
...
... ...........
...
. ...
...
...
...
...
..........
.
.
.
.
.
...
...
...
...
.
..... ...
.
.
.
.
.
...
...
...
...
.
...
...
...
... ..............
....
...
...
...
..............
...
...
.
.
.
.
.
...
...
.
.
...
.
.
..... ...
.
.
.
.
.
.
....
....
.
..
.
..
...................................................................................................................................................................................................................................................
...
... ............
...
...
...
.
.
.
.
.
.
.
...
.
.
.
...
.
.
.........
...
....
....
...
....... ....
.
.
.
.
.
.
.
...
.
.
...
.
...
... .............
....
....
....
...
. ........
.
.
.
.
.
.
.
...
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
..... ...
.
.
.
.
.
.
.
.
.
.
..
.
.
..............................................................................................................................................................................................................................................
....
....
....
....
....
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..

i
y

i
y

i
y

i
y

i
y

- oa.n thang xap x du.o..c bieu dien bo.i cac h`nh tr`on den.
H`nh 1.1: D
`eu khien nguyen nen
V` cac nguyen so. trong he. thong ch
ung ta xac di.nh tren lu.o.i di
cac to.a do. d`au cuoi cua doa.n thang l`a nguyen. Tha.t ra, neu ch
ung ta cat doa.n thang vo.i
h`nh ch
u. nha.t tru.o.c khi hien thi. no th` to.a do. cac diem d`au cuoi cua doa.n thang co the
`an 1.1.3). Gia
khong nguyen. (Ch
ung ta se thao lua.n cac giao diem khong nguyen trong Ph
10

su. doa.n thang co he. so goc |m| 1; cac tru.`o.ng ho..p khac du.o..c xu. l
y tu.o.ng tu... Ho.n n
u.a
`am thu.`o.ng v` ch
ung ch
tru.`o.ng ho..p cac doa.n thang ngang, du
.ng hoa.c co he. so goc 1 l`a t
di qua cac pixel tren lu.o.i.

1.1.1

Thu
a.t to
an s
o gia

`an tu. cua lattice nguyen Z2 ). Phu.o.ng


Xet hai pixel A = (xA , yA ) v`a B = (xB , yB ) (t
uc cac ph
tr`nh du.`o.ng thang AB co da.ng y = mx + t, trong do he. so goc m = dy/dx v`a t = yA mxA .
Cach do.n gian nhat de ve doa.n thang AB l`a:

1. Tnh he. so goc m;


2. Tang x mo.t do.n vi. (kho.i d`au t`
u. diem ben trai nhat), vo.i moi xi tnh yi = mxi + t v`a
sau do ve pixel ta.i (xi , byi + 0.5c)1 .
Theo cach n`ay ta cho.n pixel tot nhat, t
u.c l`a pixel m`a khoang cach den du.`o.ng thang thu..c
`an tnh mo.t phep nhan,
te nho nhat. Phu.o.ng phap n`ay khong hie.u qua do moi bu.o.c la.p c
.
uy
r`a ng
mo.t phep co.ng v`a mo.t phep toan l`am tr`on. Ta co the khu phep nhan b`a ng cach ch
yi+1 = mxi+1 + t
= m(xi + x) + t
= yi + mx,
v`a neu bu.o.c tang x = 1 th` yi+1 = yi + m.
Do do neu x tang mo.t do.n vi. th` y tang m do.n vi.. Vo.i mo.i diem (xi , yi ) tren doa.n
thang ta biet r`a ng neu xi+1 = xi + 1 th` yi+1 = yi + m; t
u.c l`a, cac gia tri. x v`a y du.o..c tnh
- ay chnh l`a thua.t toan so gia: vo.i moi
theo cac gia tri. tru.o.c do cua no (xem H`nh 1.2). D
bu.o.c la.p ta thu..c hie.n cac phep toan so gia du..a tren bu.o.c tru.o.c.
Kho.i ta.o ta gan (x0 , y0 ) l`a to.a do. nguyen cua diem xuat phat, chang ha.n A. Ch
uy

r`a ng trong tru.`o.ng ho..p |m| > 1 neu x tang mo.t do.n vi. th` y tang ho.n mo.t do.n vi.. Do do
`an hoan doi vai tr`o cua x v`a y b`a ng cach gan bu.o.c tang mo.t do.n vi. cho y v`a tang x mo.t
c
lu.o..ng x = y
= m1 .
m
1

`an nguyen, l`am tr`on xuong v`a l`am tr`on len cua x.
.ng l`a ph
K
y hie.u [x], bxc v`a dxe tu.o.ng u

11

- u.`o.ng thang
D
thu..c te

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

(xi + 1, dyi + me)

(xi , yi )

(xi , byi c)

(xi + 1, yi + m)

H`nh 1.2: Tnh toan so gia cua (xi , yi ).


V du. 1.1.1 Gia su. A(2, 0), B(9, 3). Khi do du.`o.ng thang qua hai diem A v`a B co he. so
du.ng thua.t toan so gia ta du.o..c day cac diem ve tot nhat nhu. trong
goc m = 37 (0, 1). Ap
bang du.o.i:
i

xi

yi

byi + 0.5c

3
7
6
7
9
7
12
7
15
7
18
7
21
7

1
1
2
2
3
3

Thu tu.c Line() du.o.i day minh ho.a thua.t toan ve doa.n thang t`
u. (x0 , y0 ) den (x1 , y1 )
- iem kho.i d`au l`a diem ben trai nhat. Ngo`ai ra ta ch xet tru.`o.ng ho..p
vo.i gia tri. m`au V alue. D
1 m 1 v` cac tru.`o.ng ho..p khac co the thu..c hie.n do tnh doi x
u.ng. Ho.n n
u.a, ch
ung ta
.
.
.
.
.
.
ng, xien
c
ung bo qua vie.c kiem tra cac tru `o ng ho. p da. c bie.t: du `o ng thang n`a m ngang, du
mo.t goc 450 . Ch
uy
r`a ng, trong ngon ng
u. C, (int)y b`a ng by + 0.5c.
void Line(int x_A, int y_A, int x_B, int y_B, int Value)
{
12

int x;
int dx, dy;
float y, m;
dx = x_B - x_A;
dy = y_B - y_A;
m = dy/(float)dx;
y = y0;
for (x = x_A; x <= x_B; x ++)
{
putpixel(x, (int)(y), Value);
y += m;
}
}

1.1.2

Thu
a.t to
an d
i
em gi
u.a

Thu tu.c Line() thao tac tren cac so thu..c y v`a m. Bresenham da xay du..ng thua.t toan [2] ve
doa.n thang ch su. du.ng cac phep toan tren so nguyen do do tranh go.i h`am l`am tr`on v`a cho
phep xac d.inh (xi+1 , yi+1 ) theo so gia du..a tren nh
u.ng gia tri. o. bu.o.c tru.o.c (xi , yi ). Thua.t
toan n`ay co the mo. ro.ng da.ng dau cham do.ng doi vo.i cac to.a do. thu..c. Ho.n n
u.a, phu.o.ng
u
phap cua Bresenham co the du.o..c ap du.ng tnh toan tren so nguyen ve du.`o.ng tr`on ma.c d`
.
.
.
.
.
.
yy
. V` va.y ch
ung ta su du.ng phu o ng phap tu o ng
no khong de d`ang mo ro.ng cho conic tu`
`an d`au tien bo.i Pitteway [16], [17] v`a du.o..c
doi khac, thua.t toan diem gi
u.a, du.o..c cong bo l
cai tien bo.i Van Aken [26] v`a mo.t so tac gia khac [28], [29]. Van Aken da ch ra [26] doi vo.i
cac du.`o.ng thang v`a du.`o.ng tr`on vo.i d
u. lie.u nguyen, cong th
u.c diem gi
u.a suy ra cong th
u.c
cua Bresenham v`a do do sinh ra c`
ung day cac pixel.
Khong mat tnh tong quat, gia su. he. so goc m cua du.`o.ng thang thuo.c khoang (0, 1)
(cac tru.`o.ng ho..p khac co the du.o..c xu. l
y bo.i cac phep lay doi x
u.ng mo.t cach thch ho..p qua
cac tru.c to.a do. ). Ta c
ung k
y hie.u diem xuat phat l`a (xA , yA ) v`a diem ket th
uc l`a (xB , yB ).
.
.
.
.
- a.t dy := yB yA , dx = xB xA . Phu o ng tr`nh du `o ng thang l qua hai diem A v`a B xac
D
d.inh bo.i
y=

dy
x + t;
dx
13

D w
.....
.......
.......
.......
.
.
.
.
.
.............
.....
.......
.......
.......
.......
.
.
.
.
.
.....
.......
.......
.......
.......
.
.
.
.
.
.....
.......
.......
.......
.......
.
.
.
.
.
.....
.......
.......
.......
.......
.
.
.
.
.
....
.......
.......
......
......

(l )

(l+ )

H`nh 1.3: Lu.o.i cac pixel v`a vi. tr diem C, R, D, Q v`a M.


hay tu.o.ng du.o.ng
f (x, y) := ax + by + c = 0,
trong do a = dy, b = dx, v`a c = b dx. K
y hie.u cac nu.a ma.t phang ngo`ai v`a nu.a ma.t
phang trong xac d.inh bo.i l tu.o.ng u
.ng bo.i
(l+ ) := {(x, y) R2 | f (x, y) > 0},
(l ) := {(x, y) R2 | f (x, y) < 0}.
tu.o.ng cua thua.t toan diem gi
Y
u.a l`a xay du..ng mo.t day cac diem ve tot nhat (xi , yi )
u.ng diem (xi , yi ) du.o..c
bat d`au t`
u. diem (x0 , y0 ) = (xA , yA ). Khai nie.m tot nhat o. day l`a nh
`an vo.i du.`o.ng thang thu..c te (da.ng lien tu.c) nhat. Theo gia thiet, 0 < m < 1, nen khi
cho.n g
x tang mo.t lu.o..ng x th` y tang khong qua y = mx do.n vi..
V` va.y neu bu.o.c th
u. i cho.n du.o..c diem ve tot nhat C := (xi , yi ) th` o. bu.o.c th
u. i + 1
ta se cho.n diem ve (xi+1 , yi+1 ), trong do xi+1 = xi + 1 v`a yi+1 = yi hoa.c yi+1 = yi + 1.
Noi cach khac, bu.o.c th
u. i + 1 ch
ung ta se cho.n mo.t trong hai pixel R := (xi + 1, yi ) hoa.c
D := (xi + 1, yi + 1) (xem H`nh 1.3). K
y hie.u Q l`a giao diem cua hai du.`o.ng thang l v`a
x = xi + 1. Theo Bresenham, dau cua bieu th
u.c xac di.nh bo.i hie.u gi
u.a hai khoang cach t`
u.
R v`a D den Q cho phep xac di.nh pixel tot nhat o. bu.o.c i + 1. Trong thua.t toan diem gi
u.a,
ta quan sat vi. tr cua diem gi
u.a M v`a cac nu.a ma.t phang xac di.nh bo.i du.`o.ng thang l. De
`an vo.i du.`o.ng thang l ho.n; neu M (l ) th`
d`ang ch ra ra` ng, neu M (l+ ) th` pixel D g
- u.`o.ng thang l co the di ngang qua M ; hoa.c ca hai pixel na` m v
`an ho.n. D
`e c`
pixel R g
ung
+

.
.
.
.
.
.
mo.t nu a ma.t phang (l ) (hoa.c (l )) nhu ng trong bat c
u tru `o ng ho. p n`ao, ta van cho.n diem
`an vo.i l nhat. Ho.n n
g
u.a, sai so-t
u.c l`a khoang cach gi
u.a pixel du.o..c cho.n v`a du.`o.ng thang
thu..c te l-luon luon nho ho.n hoa.c b`a ng 1/2.
14

- e ap du.ng thua.t toan diem gi


`an tnh f (M ) = f (xi + 1, yi + 12 ) v`a kiem tra
D
u.a, ch c
dau cua no. Do do ta di.nh ngha bien quyet d.inh
di := f (xi + 1, yi + 12 )
=

a(xi + 1) + b(yi + 21 ) + c.

Khi do
1. Neu di > 0 cho.n pixel D;
2. Neu di < 0 cho.n pixel R;
3. Neu di = 0 cho.n mo.t trong hai pixel R hoa.c D, do do cho.n R.
`an xac di.nh to.a do. diem gi
Ke tiep ta c
u.a M v`a do do bien quyet d.inh di+1 o. bu.o.c i + 1;
`eu n`ay phu. thuo.c v`ao vie.c cho.n pixel R hoa.c D. Neu cho.n R th` ho`anh do. diem
d nhien di
M tang mo.t do.n vi. v`a tung do. khong doi. Do do
1
1
di+1 = f (xi + 2, yi + ) = a(xi + 2) + b(yi + ) + c.
2
2
Nhu.ng

1
di = a(xi + 1) + b(yi + ) + c.
2

Suy ra di+1 = di + a.
K
y hie.u so gia du.o..c co.ng them khi R du.o..c cho.n l`a R := a = dy. Noi cach khac, ta
co the suy ra bien quyet d.inh o. bu.o.c ke tiep t`
u. bien quyet d.inh o. bu.o.c hie.n h`anh ba` ng
`an phai tnh la.i gia tri. f (M ).
cach co.ng them so gia R m`a khong c
Neu cho.n D th` ho`anh do. v`a tung do. diem M c`
ung tang mo.t do.n vi., nen
3
3
di+1 = f (xi + 2, yi + ) = a(xi + 2) + b(yi + ) + c.
2
2
V`a do do
di+1 = di + a + b.
K
y hie.u so gia du.o..c co.ng v`ao di+1 sau khi cho.n D l`a D := a + b = dy dx.
V` o. bu.o.c d`au tien, ta cho.n (x0 , y0 ) = (xA , yA ) nen co the tnh tru..c tiep gia tri. kho.i
ta.o d0 . Tha.t va.y, diem gi
u.a d`au tien co to.a do. (x0 + 1, y0 + 12 ), v`a
f (x0 + 1, y0 + 12 ) = a(x0 + 1) + b(y0 + 21 ) + c
= ax0 + by0 + c + a + b/2
= f (x0 , y0 ) + a + b/2.
15

Nhu.ng (x0 , y0 ) thuo.c du.`o.ng thang l nen f (x0 , y0 ) = 0; do do gia tri. kho.i d`au cua bien
u. hai, th
u.
quyet d.inh l`a d0 = a + b/2 = dy dx/2. Su. du.ng d0 ta co the cho.n pixel th
- e khu. mau so trong d0 ta d.inh ngha la.i h`am f b`a ng cach nhan no cho 2; t
ba, v.v. D
u.c l`a
f (x, y) = 2(ax + by + c). Noi cach khac, nhan 2 cho cac ha` ng so a, b, c v`a bien quyet di.nh;
`eu n`ay khong anh hu.o.ng den dau cua bien quyet d.inh.
m`a di
Tong quat hoa thua.t toan diem gi
u.a ve doa.n thang AB (trong tru.`o.ng ho..p xA < xB
v`a 0 < m < 1) nhu. sau:

- a.t dx = xB xA , dy = yB yA , d0 = 2dy dx, R = 2dy, D = 2(dy


1. [Kho.i ta.o] D
dx), x0 = xA , y0 = yA .
u. i ta co diem ve tot nhat (xi , yi ) v`a bien quyet d.inh di .
2. Gia su. o. bu.o.c th
- a.t diem ve ta.i (xi , yi ).
3. [Ve pixel hie.n h`anh] D
4. [Ca.p nha.t] Neu xi = xB , thua.t toan d`
u.ng; ngu.o..c la.i, da. t
xi+1 = xi + 1;
(
yi
neu di 0,
yi+1 =
y + 1 neu ngu.o..c la.i;
( i
di + R neu di 0,
di+1 =
di + D neu ngu.o..c la.i.
5. Thay i b`a ng (i + 1) v`a la.p la.i Bu.o.c 3.

V du. 1.1.2 Gia su. A(2, 0), B(9, 3). Khi do du.`o.ng thang qua hai diem A v`a B co he. so
goc m = 37 (0, 1). De d`ang kiem tra r`a ng
dx

= xB xA

7,

dy

= yB yA

3,

d0

= 2dy dx

= 1,

R = 2dy

6,

D = 2(dy dx) = 8.
16

du.ng thua.t toan diem gi


Ap
u.a ta co day cac diem ve tot nhat nhu. trong bang du.o.i:
i

xi

yi

di

Hien nhien r`a ng cac ket qua n`ay tr`


ung vo.i ket qua khi su. du.ng phu.o.ng phap so gia trong
V du. 1.1.1.
`an thiet doi vo.i di+1 trong moi bu.o.c la.p l`a phep co.ng v`a khong
Ch
uy
r`a ng, phep tnh c
co phep nhan. Ho.n n
u.a, v`ong la.p ho`an to`an do.n gian nhu. trong thu tu.c MidPointLine()
du.o.i day:

void MidPointLine(int x_A, int y_A, int x_B, int y_B, int Value)
{
int x, y, d, dx, dy, DeltaR, DeltaD;
dx = x_B - x_A;
dy = y_B - y_A;
d = 2*dy - dx;
DeltaR = 2*dy;
DeltaD = 2*(dy - dx);
y = y_A;
for (x = x_A; x <= x_B; x++)
{
putpixel(x, y, Value);
if (d <= 0) d += DeltaR;
else
{
d += DeltaD;
17

y++;
}
}
}

1.1.3

`e li
M
o.t s
o v
an d

en quan d

en thu
a.t to
an v
ed
oa.n th
a ng

`au cu
`an d`oi hoi mo.t doa.n thang
Th
u. tu.. cua c
ac d
i
em d

oi. Trong mo.t u


.ng du.ng ta c
u. A den B ch
u.a c`
ung ta.p cac pixel nhu. doa.n thang du.o..c ve t`
u. B den A; noi
du.o..c ve t`
cach khac, doa.n thang du.o..c ve khong phu. thuo.c v`ao th
u. tu.. cac diem d`au cuoi. Su.. sai khac
ch co the xay ra ta.i nh
u.ng diem ve m`a du.`o.ng thang di qua diem gi
u.a v`a bien quyet di.nh
u. trai sang phai ch
ung ta cho.n diem ve R. Do tnh
b`a ng khong; trong tru.`o.ng ho..p n`ay, di t`
doi x
u.ng, khi di t`
u. phai sang trai v`a d = 0 le ra ta cho.n diem ve R, nhu.ng cho.n lu..a n`ay se
`an y vo.i pixel du.o..c cho.n khi di t`
u. trai sang phai. Do do
sai le.ch mo.t do.n vi. theo th`anh ph
`an cho.n pixel D khi di t`
ch
ung ta c
u. phai sang trai trong tru.`o.ng ho..p d = 0. L
y lua.n tu.o.ng
tu.. doi vo.i cac doa.n thang co he. so goc bat k`
y.
Phu.o.ng phap hoan doi cac diem d`au cuoi cua doa.n thang de thua.t toan xu. l
y theo
c`
ung hu.o.ng khong thu..c hie.n chnh xac khi ch
ung ta ve cac doa.n thang theo mau to. Cac
doa.n thang ve theo mau thu.`o.ng neo nh
u.ng dau hie.u ta.i diem xuat phat, co the l`a diem
- a.c bie.t, vo.i mau to cham-ga.ch,
du.o.i ben trai, khong phu. thuo.c v`ao hu.o.ng di chuyen. D
chang ha.n 111100, ch
ung ta muon ve mau n`ay ta.i diem xuat phat m`a khong tu.. do.ng doi
th`anh diem du.o.i ben trai. Ngo`ai ra, neu thua.t toan luon luon da. t la.i cac diem d`au cuoi
`an di chuyen t`
theo th
u. tu.. chnh tac, ta c
u. trai sang phai vo.i doa.n thang AB v`a t`
u. phai
`eu n`ay ta.o ra su.. gian doa.n trong qua tr`nh ve, chang ha.n
sang trai vo.i doa.n thang BA; di
da giac, ta.i nh
u.ng dnh chung.
- i
`
t. Mo.t van d`e khac ch
`an
D
em xu
at ph
at n
a m tr
en ca.nh cu a d
a gi
ac c
a
ung ta c
.
.
.
.
su a doi thua.t toan de ve cac doa.n thang sau khi du o. c cat bo i mo.t trong cac thua.t toan
`an 3.3. H`nh 1.4(a) minh ho.a doa.n thang du.o..c cat bo.i ca.nh ben trai, x = xmin ,
trong Ph
cua h`nh ch
u. nha.t. Giao diem cua doa.n thang v`a ca.nh ben trai co ho`anh do. x nguyen
nhu.ng tung do. y thu..c. Pixel (xmin , bmxmin + t + 0.5c) tren ca.nh x = xmin chnh l`a pixel
du.o..c ve ta.i ho`anh do. xmin cua doa.n thang tru.o.c khi cat theo thua.t toan diem gi
u.a2 . Vo.i
`an kho.i ta.o bien quyet d.inh ta.i diem gi
pixel kho.i ta.o da biet, ke tiep ch
ung ta c
u.a doa.n
`an ch
RD trong co.t ke ben. C
uy
r`a ng, cach l`am n`ay ta.o ra day chnh xac cac pixel, trong
- ay l`a he. qua
`a m gi
`e nhau, ch
`an l`am tr`on xuong. D
ung ta c
Khi mxmin + t n
u.a hai du.`o.ng thang ngang k
cua vie.c cho.n pixel R khi d = 0.
2

18

x = xmin

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

(xmin , bmxmin + t + 0.5c)


(xmin , mxmin + t)

y = ymin

(a)
x = .xmin

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

1
2

y = ymin
y = ymin 1

iD y

yC y

y = ymin

(b)
- iem xuat phat n`a m tren bien h`nh ch
H`nh 1.4: D
u. nha.t. (a) Giao vo.i ca.nh du
.ng. (b) Giao
vo.i ca.nh ngang.

19

khi cat du.`o.ng thang theo du.`o.ng bien xmin v`a sau do thu..c hie.n ve doa.n thang du.o..c cat t`
u.
(xmin , bmxmin + t + 0.5c) den (xB , yB ) theo thua.t toan diem gi
u.a se cho day diem ve khong
chnh xac do du.`o.ng thang sau khi cat co he. so goc khac m.
Tru.`o.ng ho..p ph
u.c ta.p ho.n khi du.`o.ng thang AB giao vo.i du.`o.ng thang n`a m ngang nhu.
`eu pixel na` m tren d`ong quet y = ymin
trong H`nh 1.4(b). Khi he. so goc m rat nho, co nhi
tu.o.ng u
.ng ca.nh ben du.o.i cua h`nh ch
u. nha.t. Ch
ung ta muon bao h`am cac pixel n`ay trong
h`nh ch
u. nha.t, nhu.ng do qua tr`nh tnh toan giao diem vo.i d`ong quet y = ymin v`a sau do
l`am tr`on ho`anh do. x ta du.o..c pixel C khong phai pixel ben trai nhat D tren d`ong n`ay. Du..a
tren h`nh ve, ta thay r`a ng pixel ben trai nhat D l`a pixel tren ben phai giao diem I cua doa.n
`an t`m I v`a l`am tr`on len ho`anh do. ;
thang AB v`a du.`o.ng thang y = ymin 12 . Do do, ta ch c
pixel d`au tien D chnh l`a (dxI e, ymin ).
Cuoi c`
ung, thua.t toan diem gi
u.a c
ung thu..c hie.n tot trong tru.`o.ng ho..p cac diem d`au
cuoi co to.a do. thu..c; khac bie.t duy nhat l`a bu.o.c tang v`a cac phep toan thao tac tren so
thu..c.
Thay d

oi cu.`
o.ng d

o. s
ang cua d
oa.n th
a ng theo h
e. s
o g
oc. Xet hai doa.n thang trong

- oa.n thang l2 co he. so goc 1 v`a do do co do. d`ai ba` ng 2 l


`an do. d`ai cua l1 . Ch
H`nh 1.5. D
ung
.
.
.
ta da.t c`
ung so (10) pixel tren moi doa.n thang. Neu cu `o ng do. cua moi pixel l`a I th` cu `o.ng

do. tren mo.t do.n vi. do. d`ai cua doa.n thang l1 l`a I, trong khi cua l2 l`a I/ 2; su.. khong nhat
quan n`ay de d`ang phat hie.n bo.i ngu.`o.i quan sat. Tren m`an h`nh do.n sac, khong co cach giai
quyet, nhu.ng tren he. thong n-bit tren pixel ch
ung ta co the cai thie.n du.o..c t`nh tra.ng n`ay
b`a ng cach da. t cu.`o.ng do. l`a mo.t h`am cua he. so goc. K
y thua.t antialiasing cho ket qua tot
u. nha.t co do. ro.ng he.p v`a tnh toan thch
ho.n b`a ng cach xem doa.n thang nhu. mo.t h`nh ch
`eu pixel tren moi co.t n`a m trong hoa.c g
`an h`nh ch
ho..p cac cu.`o.ng do. vo.i nhi
u. nha.t (xem [9],
[11]). Ngo`ai ra coi doa.n thang nhu. h`nh ch
u. nha.t c
ung cho phep ta.o cac doa.n thang vo.i do.
ro.ng tu`
yy
.
Ph
ac tha o c
ac nguy
en so. x
ac d
i.nh bo.i c
ac d
oa.n th
a ng. Vo.i cach ve cac doa.n thang,
`an ve cac nguyen so. du.o..c xay du..ng t`
u. cac doa.n thang nhu. the n`ao? Cac du.`o.ng
ch
ung ta c
`e nhau. Cac h`nh ch
gap kh
uc co the du.o..c ve b`a ng cach xem no nhu. cac doa.n thang k
u.
`eu n`ay
nha.t v`a da giac l`a nh
u.ng nguyen so. v`
ung v`a co the ve cac ca.nh lien tiep nhu.ng di
`an 4.6 v`a 4.7
dan den mo.t so pixel n`a m ngo`ai v`
ung di.nh ngha bo.i nguyen so.-xem cac Ph
.
.
`e nh
`an ve cac dnh chung cua du.`o.ng gap
v
u ng thua.t toan xu l
y van d`e n`ay. Ch
uy
ra` ng c
`an do vie.c ve hai l
`an co the l`am thay doi m`au hoa.c da. t m`au n
`en khi viet trong
kh
uc mo.t l
.
.
che do. XOR tren m`an h`nh, hoa.c tang cu `o ng do. gap doi ta.i do. Tha.t ra co nh
u.ng pixel
`an nhau hoa.c cat nhau.
khac l`a chung cua hai doa.n thang n`a m g

20

yD
- u.`o.ng thang l2
y
y
y
y
y
y
y
y
y

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

yyyyyyyyyyD
- u.`o.ng thang l1

H`nh 1.5: Thay doi cu.`o.ng do. cua cac du.`o.ng thang theo he. so goc.

1.1.4

C
ac thu
o.c tnh cu a d
oa.n th
a ng

Thuo.c tnh mau to doa.n thang co the anh hu.o.ng den nh


u.ng nguyen so. khac. Noi chung
`eu kie.n logic de kiem tra co da. t diem ve hay khong, ch da.t khi di
`eu kie.n
`an su. du.ng di
ta c
.
.
.
.
.
du
ng (gia tri. 1). Ch
ung ta lu u tr
u mau ve nhu mo.t chuoi do. d`ai Tile Size (thu `o ng l`a l
uy
th`
u.a cua 2: Noi chung Tile Size = 16) l`a mau co kieu Bool (chang ha.n, 16 bit nguyen);
`eu kie.n
do do mau to du.o..c la.p la.i sau khi ve 16 pixel. Ch
ung ta thay d`ong le.nh khong di
y tru.`o.ng ho..p n`ay; chang ha.n,
putpixel() trong thua.t toan ve doa.n thang de xu. l

if bitstring[i % 16] putpixel(x, y, value);


trong do ch so i l`a mo.t bien tang mo.i trong v`ong la.p ben trong cua thua.t toan. Tuy nhien,
`an la.p v`a khong
cach l`am n`ay co mo.t ha.n che l`a do moi bit trong ma.t na. tu.o.ng u
.ng mo.t l
tu.o.ng u
.ng do. d`ai do.n vi. do.c theo doa.n thang nen do. d`ai cua net ve thay doi theo he. so
goc cua doa.n thang; net ve cua doa.n thang xien se d`ai ho.n net ve cua doa.n thang ngang
- i
`eu n`ay l`a khong chap nha.n du.o..c vo.i nh
hay du
.ng. D
u.ng u
.ng du.ng mang tnh chnh xac
`an tnh la.i sao cho phu.o.ng
cao, chang ha.n trong thiet ke cong nghie.p, v`a do do cac net ve c
- o. ro.ng cua doa.n thang du.o..c
phap ve doa.n thang khong phu. thuo.c v`ao he. so goc cua no. D
xem nhu. mo.t day cac h`nh ch
u. nha.t da.c v`a trong suot du.o..c da.t xen ke nhau m`a cac dnh
cua no du.o..c tnh chnh xac theo h`am phu. thuo.c kieu ve doa.n thang. Sau do thu..c hie.n to
m`au tren t`
u.ng h`nh ch
u. nha.t mo.t; vo.i cac doa.n thang ngang hoa.c du
.ng, ta co the d`
ung
le.nh sao chep cac h`nh ch
u. nha.t.
Kieu doa.n thang v`a kieu b
ut ve co anh hu.o.ng lan nhau trong cac nguyen so. lien quan
den do. ro.ng du.`o.ng bien. Kieu doa.n thang thu.`o.ng du.o..c su. du.ng de xac d.inh cac h`nh ch
u.
nha.t tu.o.ng u
.ng cac net ve v`a moi h`nh ch
u. nha.t du.o..c to m`au vo.i mau b
ut du.o..c cho.n.
21

- u.`
D
o.ng tr`
on

1.2

Xet du.`o.ng tr`on f (x, y) := x2 + y 2 R2 = 0. Co mo.t v`ai cach do.n gian ve du.`o.ng tr`on nhu.ng
khong hie.u qua.
- e ve mo.t ph
`an tu. du.`o.ng tr`on trong goc ph
`an tu. th
D
u. nhat
{(x, y) R2 | x 0, y 0}
(cac cung khac du.o..c ve do tnh doi x
u.ng) ta co the tang x t`
u. 0 den R (moi bu.o.c mo.t do.n

vi.) v`a giai y = R2 x2 . Phu.o.ng phap n`ay khong hie.u qua do su. du.ng phep nhan v`a lay
`an vo.i R v` tiep tuyen vo.i du.`o.ng tr`on
can ba.c hai. Ngo`ai ra co nh
u.ng lo hong khi gia tri. x g
ta.i nh
u.ng diem tu.o.ng u
.ng tien den du.`o.ng thang song song vo.i tru.c tung. Phu.o.ng phap
khac tu.o.ng tu.., c
ung khong hie.u qua, tranh nh
u.ng lo hong l`a ve cac diem (R cos , R sin )
u. 0 den 900 .
vo.i thay doi t`

1.2.1

-
D
oi x
u.ng t
am d
i
em

Ch
ung ta co the giam bo.t qua tr`nh tnh toan du..a tren tnh doi x
u.ng cua du.`o.ng tr`on qua
`an xet du.`o.ng tr`on tam ta.i goc v` neu khong ta thu..c hie.n phep ti.nh
cac tru.c chnh. Ch c
`e goc to.a do. . Neu diem (x, y) n`a m tren du.`o.ng tr`on th` bay diem
tien t`
u. tam v
(x, y), (y, x), (y, x), (x, y), (y, x), (y, x), (x, y)
c
ung n`a m tren du.`o.ng tr`on.
`an ve mo.t cung 450 v`a t`
Do do ta ch c
u. do sinh ra du.`o.ng tr`on. Vo.i du.`o.ng tr`on tam
ta.i goc, tam diem doi x
u.ng co the du.o..c hien thi. b`a ng thu tu.c sau (m`a de d`ang tong quat
hoa vo.i cac du.`o.ng tr`on tam tu`
yy
):
void CirclePoints(int x, int y, int Value)
{
putpixel(x, y, Value);
putpixel(y, x, Value);
putpixel(y, -x, Value);
putpixel(x, -y, Value);
putpixel(-x, -y, Value);
putpixel(-y, -x, Value);
22

putpixel(-y, x, Value);
putpixel(-x, y, Value);
}
`an ch
C
uy
ra` ng khong nen go.i thu tu.c CirclePoints() khi x = y do co bon pixel du.o..c
`an; ta ch c
`an thay doi doa.n ma xu. l
`eu kie.n bien.
ve hai l
y di

1.2.2

Thu
a.t to
an d
i
em gi
u.a v
ed
u.`
o.ng tr`
on

Bresenham [3] da tr`nh b`ay mo.t phu.o.ng phap ve du.`o.ng tr`on hie.u qua ho.n cach du.a ra o.
tren. Ch
ung ta neu thua.t toan tu.o.ng tu.., su. du.ng tieu chuan diem gi
u.a, m`a trong tru.`o.ng
ho..p ban knh v`a cac to.a do. cua tam l`a nh
u.ng so nguyen se cho c`
ung mo.t ket qua cac pixel
tot nhat.
`an xet cung mo.t ph
`an tam du.`o.ng tr`on:
Ta ch c
(C 1 ) := {(x, y) R2 | x2 + y 2 = R2 , 0 y < x}
v`a su. du.ng thu tu.c CirclePoints() de hien thi. cac pixel tren to`an du.`o.ng tr`on. Vi phan
= xy . Suy ra
phu.o.ng tr`nh f (x, y) := x2 + y 2 r2 = 0 ta du.o..c 2xdx + 2ydy = 0. Nen dx
dy
1 < dx
0 vo.i mo.i (x, y) (C 1 ). Do do, khi y tang mo.t do.n vi. th` x giam khong qua
dy
mo.t do.n vi.. V` va.y, gia su. o. bu.o.c th
u. i ch
ung ta cho.n du.o..c diem ve tot nhat C := (xi , yi ),
`an cho.n mo.t trong hai pixel T := (xi , yi + 1) hoa.c D := (xi 1, yi + 1)
th` bu.o.c ke tiep c
(xem H`nh 1.6). Tu.o.ng tu.. thua.t toan diem gi
u.a ve du.`o.ng thang, de cho.n mo.t trong hai
`an vo.i du.`o.ng tr`on ho.n ta xet h`am lay gia tri. ta.i diem gi
pixel g
u.a M = (xi 12 , yi + 1) cua
hai diem ve n`ay. De d`ang ch
u.ng minh ra` ng, neu diem M n`a m trong du.`o.ng tr`on (tu.o.ng
`an du.`o.ng tr`on ho.n; v`a M na` m ngo`ai du.`o.ng tr`on (tu.o.ng du.o.ng
du.o.ng f (M ) < 0) th` T g
`an du.`o.ng tr`on ho.n. Tru.`o.ng ho..p M n`a m tren du.`o.ng tr`on (t
f (M ) > 0) th` D g
u.c f (M ) = 0)
ta co the cho.n mo.t trong hai, do do cho.n pixel D.
- a.t
D

1
1
di := f (M ) = f (xi , yi + 1) = (xi )2 + (yi + 1)2 R2 .
2
2
Neu di < 0 th` cho.n T v`a diem gi
u.a ke tiep co tung do. tang mo.t do.n vi.. Nen
1
1
di+1 = f (xi , yi + 2) = (xi )2 + (yi + 2)2 R2 ;
2
2
v`a do do di+1 = di + (2yi + 3); suy ra bu.o.c tang T := 2yi + 3.
23

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

u.a ve du.`o.ng tr`on.


H`nh 1.6: Lu.o.i pixel trong thua.t toan diem gi
Neu di 0 th` cho.n D v`a diem gi
u.a ke tiep co ho`anh do. giam mo.t do.n vi. v`a tung do.
tang mo.t do.n vi.. Nen
3
3
di+1 = f (xi , yi + 2) = (xi )2 + (yi + 2)2 R2 .
2
2
Suy ra di+1 = di + 2yi 2xi + 5. Do do bu.o.c tang D := 2(yi xi ) + 5.
Nhac la.i l`a, trong tru.`o.ng ho..p du.`o.ng thang, cac bu.o.c tang R v`a D l`a cac h`a ng so;
tuy nhien, trong tru.`o.ng ho..p du.`o.ng cong ba.c hai, T v`a D l`a cac h`am phu. thuo.c v`ao cac
to.a do. cua diem ve hie.n h`anh (xi , yi ). Cac h`am n`ay co the tnh toan tru..c tiep ta.i moi bu.o.c
la.p du..a v`ao cac gia tri. x v`a y cua pixel du.o..c cho.n trong bu.o.c la.p tru.o.c. Tnh toan nhu.
va.y khong hie.u qua do cac h`am n`ay l`a tuyen tnh (xem Nha.n xet 1.2.1).
`an tnh d0 . Vo.i gia thiet ban knh nguyen, ta biet r`a ng pixel kho.i ta.o
Cuoi c`
ung c
ban d`au co to.a do. (R, 0) nen diem gi
u.a co to.a do. (R 12 , 1) v`a do do d0 = f (R 21 , 1) =
(R 21 )2 + 1 R2 = 45 R. Tong ket ta co thua.t toan ve du.`o.ng tr`on tam ta.i goc to.a do. v`a
ban knh R nhu. sau:

- a.t x0 = R, y0 = 0, d0 = 5/4 R.
1. [Kho.i ta.o] D
2. Gia su. o. bu.o.c th
u. i ta co diem ve tot nhat (xi , yi ) v`a bien quyet d.inh di .
- a.t tam diem ve du..a tren (xi , yi ).
3. [Ve pixel hie.n h`anh] D
24

4. [Ca.p nha.t] Neu xi = yi , thua.t toan d`


u.ng; ngu.o..c la.i, da. t
(
xi
neu di < 0,
xi+1 =
xi 1 neu ngu.o..c la.i;
yi+1 = yi + 1;
(
di + 2yi + 3
neu di < 0,
di+1 =
di + 2(yi xi ) + 5 neu ngu.o..c la.i.
5. Thay i b`a ng (i + 1) v`a la.p la.i Bu.o.c 3.
Nh
a.n x
et 1.2.1 (i) Van d`e vo.i thua.t toan v`
u.a tr`nh b`ay, ta l`am vie.c tren cac so thu..c v`
kho.i ta.o bien quyet d.inh l`a so thu..c. Ma.c d`
u co the de d`ang cai tien de xu. l
y cho du.`o.ng
tr`on co tam hoa.c ban knh khong nguyen, ta se tr`nh b`ay cach tnh toan so nguyen hie.u qua
ho.n. Noi cach khac ta se khu. cac mau so trong chu.o.ng tr`nh.
- `au tien, xet bien mo.i hi = di
D

v`a thay di bo.i hi + 14 trong thua.t toan. Khi do ta


kho.i ta.o h0 = 1 R v`a so sanh di < 0 tu.o.ng du.o.ng hi < 41 . Tuy nhien, do h0 nguyen v`a
`an so sanh hi < 0. Nhu. va.y, ch
du.o..c tang bo.i cac gia tri. nguyen (T v`a D ) nen ch c
ung
.
.
.
.
.
.
ta co thua.t toan ve du `o ng tr`on ch su du.ng cac so nguyen nhu du o i day; de nhat quan vo.i
thua.t toan ve doa.n thang, ta thay h l`a d.
1
4

void MidPointCircle(int R, int Value)


{
int x, y, d;
x = R;
y = 0;
d = 1 - R;
CirclePoints(x, y, Value);
while (y < x)
{
if (d < 0)
{
d += 2*y + 3;
y++;
}
else
{
25

d += 2*(y - x) + 5;
x-- ;
y++;
}
CirclePoints(x, y, Value);
}
}
u.a ve du.`o.ng tr`on nhu. sau. Ch
u
(ii) Ch
ung ta c`on co the cai tien tot ho.n thua.t toan diem gi
.
.
.
y
r`a ng cac h`am l`a phu o ng tr`nh tuyen tnh v`a co the tnh tru. c tiep. Tuy nhien d`
ung
phu.o.ng phap sai phan ba.c mo.t-hai de xac d.inh ch
ung hie.u qua ho.n: u.o.c lu.o..ng h`am ta.i
`e nhau, tnh hie.u (trong tru.`o.ng ho..p da th
hai diem ve k
u.c, luon luon cho da th
u.c ba.c thap
ho.n) v`a ap du.ng hie.u trong moi bu.o.c la.p.
Neu cho.n T trong bu.o.c la.p ke tiep th` diem hie.n h`anh se di chuyen t`
u. (xi , yi ) den
(xi , yi + 1). Ta biet ra` ng, sai phan ba.c mo.t T ta.i (xi , yi ) b`a ng 2yi + 3. Do do T ta.i
(xi , yi + 1) b`a ng 2(yi + 1) + 3. Suy ra sai phan ba.c hai T,i+1 T,i = 2. Tu.o.ng tu.., D ta.i
(xi , yi ) ba` ng 2(yi xi ) + 5. Do do D ta.i (xi , yi + 1) b`a ng 2(yi + 1 xi ) + 5. Suy ra sai phan
ba.c hai D,i+1 D,i = 2.
Neu cho.n D trong bu.o.c la.p ke tiep th` diem hie.n h`anh di chuyen t`
u. (xi , yi ) den
(xi 1, yi + 1). Do do T ta.i (xi , yi ) b`a ng 2(yi + 1) + 3, v`a sai phan ba.c hai T,i+1 T,i = 2.
Tu.o.ng tu.., D ta.i (xi 1, yi + 1) b`a ng 2[(yi + 1) (xi 1)] + 5. Suy ra sai phan ba.c hai
D,i+1 D,i = 4.
`om cac bu.o.c: (1) cho.n pixel du..a tren dau cua bien quyet
Va.y thua.t toan cai bien g
d.inh di du.o..c xac d.inh trong bu.o.c la.p tru.o.c; (2) ca.p nha.t bien quyet d.inh di theo T hoa.c
D ; (3) ca.p nha.t cac h`am ; v`a (4) di chuyen den pixel ke tiep. T v`a D du.o..c kho.i ta.o
du..a tren pixel ban d`au (R, 0).
V du. 1.2.2 Gia su. du.`o.ng tr`on co tam O(0, 0) ban knh R = 20. Ta co
x0

= R

= 20,

y0

= 0,

d0

= 1R

T,0

= 3,

= 19,

D,0 = 2R + 5 = 35.
du.ng thua.t toan diem gi
Ap
u.a ve du.`o.ng tr`on ta du.o..c day cac diem ve tot nhat (tren cung
26

`an tam trong goc ph


`an tu. th
mo.t ph
u. nhat) nhu. trong bang du.o.i:
i

xi

yi

di

T,i

D,i

0 20

0 19

35

1 20

1 16

33

2 20

2 11

31

3 20

29

4 20

11

27

5 19

5 22

13

23

6 19

15

21

7 19

17

19

8 18

8 13

19

15

9 18

21

13

10 17

10

23

11 17

11

16

25

12 16

12

27

13 15

13

29

14 14

14

31

Thu tu.c ve du.`o.ng tr`on theo phu.o.ng phap sai phan ba.c hai nhu. sau:
void MidPointCircle(int R, int Value)
{
int x, y, d, DeltaT, DeltaD;
x = R;
y = 0;
d = 1 - R;
DeltaT = 3;
DeltaD = -2*R + 5;
CirclePoints(x, y, Value);
while (y < x)
{
if (d < 0)
{
d += DeltaT;
DeltaT += 2;
27

DeltaD += 2;
y++;
}
else
{
d += DeltaD;
DeltaT += 2;
DeltaD += 4;
x--;
y++;
}
CirclePoints(x, y, Value);
}
}

1.3

- u.`
o.ng cong ellipse
D

Cac du.`o.ng cong conic du.o..c nghien c


u.u t`
u. rat lau. Co the xem no nhu. giao cua mo.t ma.t
phang vo.i mo.t ma.t non. No c
ung co the du.o..c xac d.inh nhu. ta.p cac diem n`ao do, chang
ha.n du.`o.ng tr`on, m`a khoang cach den mo.t diem khong doi. Trong h`nh ho.c giai tch, cac
conic du.o..c xem nhu. cac ta.p con cua R2 : Ch
ung ta d.inh ngha mo.t conic nhu. ta.p ho..p cac
diem (x, y) R2 thoa man phu.o.ng tr`nh
Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0.
vo.i cac so thu..c A, B, C, D, E, F n`ao do. Vie.c phan loa.i conic (trong tru.`o.ng ho..p khac trong)
l`a hyperbol, ellipse hay l`a parabol phu. thuo.c v`ao dau cua bie.t th
u.c
:= B 2 4AC
du.o.ng, am, hay ba` ng khong (xem [12]).
Ma.t khac, ellipse l`a mo.t trong nh
u.ng nguyen so. cua d`o ho.a may tnh thu.`o.ng xuyen
`eu nghien c
du.o..c su. du.ng trong cac u
.ng du.ng d`o ho.a. Do do co rat nhi
u.u nh`a m du.a ra
nh
u.ng thua.t toan h
u.u hie.u de ve cac ellipse tren cac thiet bi. hien thi. raster (xem [26], [16],
[17], [28]).
ung co the ap du.ng de ve cac
Thua.t toan diem gi
u.a ve du.`o.ng thang v`a du.`o.ng tr`on c
.
.
`an n`ay l`a:
du `o ng cong conic tong quat. Mu.c dch cua ph
28

1. Ve ellipse chnh tac vo.i tam ta.i goc to.a do. (0, 0) cho bo.i phu.o.ng tr`nh
b2 x2 + a2 y 2 a2 b2 = 0
trong do 2a l`a do. d`ai tru.c chnh Ox v`a 2b l`a do. d`ai tru.c phu. Oy.
2. Ve ellipse trong tru.`o.ng ho..p bat k`
y.

1.3.1

c
Ellipse c
o da.ng chnh t
a

- e do.n gian, do tnh doi x


`an ve ellipse n`a m trong goc ph
`an tu. th
D
u.ng, ch
ung ta ch c
u. nhat:
(EI ) := {(x, y) R2 | f (x, y) := b2 x2 + a2 y 2 a2 b2 = 0,

x 0, y 0}.

`e tam ta.i goc to.a


C
ung ch
uy
ra` ng, cac ellipse chnh tac tam ta.i to.a do. nguyen co the du.a v
do. b`a ng phep ti.nh tien. Thua.t toan tr`nh b`ay o. day cua Da Silva [6] l`a su.. tong ho..p cac
phu.o.ng phap cua Pitteway [16], Van Aken [26] v`a Kappel [10].

Ph
an tch
tu.o.ng cua cac phu.o.ng phap du.o..c tr`nh b`ay trong ph
`an sau l`a xuat phat t`
Y
u. pixel (x0 , y0 )
n`ao do tren cung (EI ) ch
ung ta xay du..ng mo.t day cac pixel tot nhat (xn , yn ). Khai nie.m
`an vo.i du.`o.ng cong thu..c te (o. da.ng
tot nhat o. day du.o..c hieu l`a cho.n day cac pixel (xn , yn ) g
lien tu.c) nhat.
Tren cung (EI ) ta chia l`am hai v`
ung (EI1 ) v`a (EI2 ). Bien gi
u.a hai v`
ung xac di.nh bo.i
diem tren ellipse m`a tiep tuyen vo.i du.`o.ng cong ta.i do co he. so goc b`a ng 1 (H`nh 1.7);
`an cua vector gradient f (x, y) := ( f
t
u.c l`a ta.i diem m`a cac th`anh ph
, f )t co do. lo.n ba` ng
x y
`an f
`an f
nhau. Th`anh ph
nho ho.n th`anh ph
trong v`
ung th
u. nhat v`a ngu.o..c la.i trong v`
ung
y
x
th
u. hai. Chnh xac l`a
df
df
(EI1 ) := {(x, y) (EI ) |

}.
dy
dx
v`a
(EI2 ) := {(x, y) (EI ) |

df
df

}.
dy
dx

ung ta chuyen t`
u. v`
ung
Do do, neu ta.i vi. tr diem gi
u.a xay ra a2 (yi + 1) b2 (xi 21 ) th` ch
.
.
th
u nhat sang v`
ung th
u hai.
29

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

(EI2 )

f (x, y)

(EI1 )

H`nh 1.7: Hai v`


ung cua ellipse.
T`
u. phu.o.ng tr`nh xac d.inh ellipse, cung (EI ) xac di.nh bo.i cac ca.p to.a do. (x, y) vo.i
q
2
y = b 1 xa2 . Do do ta co the viet la.i
(EI1 ) := {(x, y) (EI ) |

dy
1}.
dx

v`a
(EI2 ) := {(x, y) (EI ) | 1

dy
0}.
dx

X
et v`
ung th
u. nh
at
dy
Trong tru.`o.ng ho..p n`ay, cac diem tren cung (EI1 ) thoa dx
1. Do do 1 dx
0. Suy ra
dy
khi y tang mo.t do.n vi. th` x giam khong qua mo.t do.n vi.. V` va.y neu bu.o.c th
u. i cho.n du.o..c
diem ve tot nhat C := (xi , yi ) th` o. bu.o.c th
u. (i + 1) ta se cho.n diem ve (xi+1 , yi+1 ), trong
do yi+1 = yi + 1 v`a xi+1 = xi hoa.c xi+1 = xi 1. Noi cach khac, bu.o.c th
u. (i + 1) ch
ung ta
se cho.n mo.t trong hai pixel T := (xi , yi + 1) hoa.c D := (xi 1, yi + 1) (xem H`nh 1.8).

`an u.o.c lu.o..ng h`am


u.a ve du.`o.ng thang v`a du.`o.ng tr`on, ta c
Tu.o.ng tu.. thua.t toan diem gi
f (x, y) ta.i diem gi
u.a M := (xi 12 , yi + 1) cua hai pixel T v`a D v`a su. du.ng dau cua f (M )
`an vo.i ellipse ho.n. Xet
de xac d.inh vi. tr cua M vo.i ellipse, v`a do do xac di.nh pixel n`ao g
bien quyet d.inh
1
1
di := f (M ) = f (xi , yi + 1) = b2 (x2i xi + ) + a2 (yi2 + 2yi + 1) a2 b2 .
2
4
Neu di chuyen t`
u. pixel hie.n h`anh den pixel T th` diem gi
u.a co tung do. tang mo.t do.n vi.,
30

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

- iem gi
H`nh 1.8: D
u.a M v`a cac pixel T v`a D.
nen

Do do di+1

1
1
di+1 = f (xi , yi + 2) = b2 (x2i xi + ) + a2 (yi2 + 4yi + 4) a2 b2 .
2
4
2
.
.
.
= di + a (2yi + 3) vo i bu o c tang T := a2 (2yi + 3).

Khi di chuyen t`
u. pixel hie.n h`anh den pixel D th` diem gi
u.a co ho`anh do. giam mo.t
do.n vi. v`a tung do. tang mo.t do.n vi., nen
9
3
di+1 = f (xi , yi + 2) = b2 (x2i 3xi + ) + a2 (yi2 + 4yi + 4) a2 b2 .
2
4
Suy ra di+1 = di + b2 (2xi + 2) + a2 (2yi + 3) vo.i bu.o.c tang D := b2 (2xi + 2) + a2 (2yi + 3).
`an tnh gia tri. kho.i ta.o. Gia thiet a v`a b nguyen, ellipse bat d`au ta.i (a, 0)
Bay gi`o. ta c
v`a diem gi
u.a d`au tien co to.a do. (a 21 , 1). Do do
d0 = a2 ab2 + b2 /4.
Vo.i moi bu.o.c la.p trong v`
ung th
u. nhat, ch
ung ta khong ch kiem tra bien quyet d.inh di v`a
ca.p nha.t cac h`am m`a c`on xet da ket th
uc v`
ung th
u. nhat chu.a du..a tren vector gradient
ta.i diem gi
u.a cua doa.n T D. Va.y day {(xi , yi )}i0 du.o..c xay du..ng theo quy na.p thong qua
day bien quyet d.inh {di } nhu. sau:
- a.t x0 = a; y0 = 0; d0 = a2 ab2 + b2 /4.
1. [Kho.i ta.o] D
2. [Ket th
uc?] Neu a2 (yi + 1) b2 (xi 12 ) th` d`
u.ng (ket th
uc v`
ung th
u. nhat) v`a chuyen
sang ve v`
ung th
u. hai.
3. [Ca.p nha.t] Ngu.o..c la.i
31

Ve bon pixel: (xi , yi ), (xi , yi ), (xi , yi ), (xi , yi ).


Neu di < 0 th` da.t
di+1 = di + a2 (2yi + 3),
xi+1 = xi .
Ngu.o..c la.i da.t
di+1 = di + b2 (2xi + 2) + a2 (2yi + 3),
xi+1 = xi 1.
- a.t yi+1 = yi + 1, thay i bo.i i + 1 v`a chuyen sang Bu.o.c 2.
4. D
X
et v`
ung th
u. hai
B`a ng cac la.p lua.n tu.o.ng tu.., trong do thay doi vai tr`o cua x v`a y ta co the ve cung th
u.
dy
hai. Tha.t va.y, tren v`
ung th
u. hai (EI2 ) ta co 1 dx
0. Nen khi x giam mo.t do.n vi. th`
y tang khong qua mo.t do.n vi.. V` va.y, gia thiet o. bu.o.c th
u. i ta cho.n du.o..c diem ve tot
nhat C := (xi , yi ) th` bu.o.c ke tiep (i + 1) ta se cho.n pixel (xi+1 , yi+1 ) vo.i xi+1 = xi 1 v`a
yi+1 = yi hoa.c yi+1 = yi + 1. Noi cach khac, bu.o.c th
u. (i + 1) ch
ung ta se cho.n mo.t trong
hai pixel L := (xi 1, yi ) hoa.c D := (xi 1, yi + 1) (xem H`nh 1.9).
Ta lay pixel du.o..c ve o. bu.o.c cuoi cua v`
ung th
u. nhat l`a pixel kho.i ta.o (x0 , y0 ) cua
- a.t M l`a
`an cho.n mo.t trong hai pixel L hoa.c D. D
v`
ung th
u. hai. Trong v`
ung n`ay ch
ung ta c
u.c M co to.a do. l`a (xi 1, yi + 12 ). Tu.o.ng tu.. nhu. tren, ta co diem
diem gi
u.a cua doa.n LD; t
M n`a m trong, tren hay ngo`ai ellipse neu v`a ch neu bieu th
u.c f (M ) am, ba` ng khong hay
- a.t
.ng. D
du.o.ng tu.o.ng u
1
1
di := f (M ) = f (xi 1, yi + ) = b2 (x2i 2xi + 1) + a2 (yi2 + yi + ) a2 b2 .
2
4
Neu di chuyen t`
u. pixel hie.n h`anh den pixel L th` diem gi
u.a co ho`anh do. giam mo.t do.n vi.,
nen
1
1
di+1 = f (xi 2, yi + ) = b2 (x2i 4xi + 4) + a2 (yi2 + yi + ) a2 b2 .
2
4
2
2
.
.
.
Do do di+1 = di + b (2xi + 3) vo i bu o c tang L := b (2xi + 3).
Khi di chuyen t`
u. pixel hie.n h`anh den pixel D th` diem gi
u.a co ho`anh do. giam mo.t
do.n vi. v`a tung do. tang mo.t do.n vi., nen
9
3
di+1 = f (xi 2, yi + ) = b2 (x2i 4xi + 4) + a2 (yi2 + 3yi + ) a2 b2 .
2
4
Suy ra di+1 = di + b2 (2xi + 3) + a2 (2yi + 2) vo.i bu.o.c tang D := b2 (2xi + 3) + a2 (2yi + 2).
32

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

- iem gi
H`nh 1.9: D
u.a M v`a cac pixel L v`a D.
`an kho.i ta.o bien quyet d.inh d0 trong v`
Cuoi c`
ung ta c
ung th
u. hai: neu pixel cuoi c`
ung
1
.
.
.
ung th
u nhat l`a (xE , yE ) th` da.t d0 := f (xE 1, yE + 2 ). Ch
E du o. c cho.n trong v`
ung ta ket
th
uc ve v`
ung th
u. hai khi ho`anh do. xi = 0. Ta co cac bu.o.c mo ta cho v`
ung th
u. hai nhu. sau:
- a.t (x0 , y0 ) = (xE , yE ) v`a d0 = b2 (x2E 2xE + 1) + a2 (yE2 + yE + 1 ) a2 b2 .
1. [Kho.i ta.o] D
4
2. [Ket th
uc?] Neu (xi = 0) th` d`
u.ng (ket th
uc v`
ung th
u. hai);
3. [Ca.p nha.t] Ngu.o..c la.i
Ve bon pixel: (xi , yi ), (xi , yi ), (xi , yi ), (xi , yi ).
Neu di > 0 th` da.t
di+1 = di + b2 (2xi + 3),
yi+1 = yi .
Ngu.o..c la.i da.t
di+1 = di + b2 (2xi + 3) + a2 (2yi + 2),
yi+1 = yi + 1.
- a.t xi+1 = xi 1, thay i bo.i i + 1 v`a chuyen sang Bu.o.c 2.
4. D
Nh
a.n x
et 1.3.1 (i) Trong tru.`o.ng ho..p cac to.a do. tam ellipse v`a cac ban knh a, b nguyen,
de tranh tnh toan tren so thu..c, ch
ung ta co the khu. phan so v`a ch ap du.ng cac phep toan
tren so nguyen.
(ii) C
ung co the tnh cac h`am tru..c tiep trong moi bu.o.c la.p hoa.c su. du.ng phu.o.ng phap
sai phan ba.c hai nhu. trong thua.t toan ve du.`o.ng tr`on. Ch
ung ta co the ve cac ellipse qua
33

H`nh 1.10: (a) H`nh vuong bao du.`o.ng tr`on. (b) H`nh vuong v`a h`nh tr`on qua phep bien
doi.
`ay he.p; t
u.ng tru.`o.ng ho..p |a| 1 |b| hoa.c
phep quay v`a cac ellipse co do. d
u.c vo.i nh
ngu.o..c la.i (xem [6]).

1.3.2

Ellipse trong tru.`


o.ng ho..p t
ong qu
at

`an tru.o.c ta da xay du..ng thua.t toan ve du.`o.ng cong ellipse m`a cac tru.c cua no song
Trong ph
`an n`ay xay du..ng thua.t toan, du..a tren phu.o.ng
song vo.i cac tru.c to.a do. cua ma.t phang. Ph
`om cac ellipse,
phap diem gi
u.a cua Van Aken, de ve cac du.`o.ng cong conic tong quat bao g
hyperbol v`a parabol. Thua.t toan n`ay du..a tren thua.t toan ve du.`o.ng cong cua Pitteway [16]
du.a ra nam 1967, hai nam sau khi Bresenham cong bo thua.t toan ve du.`o.ng thang [4].
- a.c ta conic co da.ng tong quat
`an tach bie.t: D
Thua.t toan conic chia l`am hai ph
f (x, y) := Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0.
vo.i A, B, C, E, F l`a cac he. so thu..c. Phu.o.ng phap xac di.nh conic ba` ng phu.o.ng tr`nh f (x, y) =
0 kho h`nh dung h`nh ho.c v`a do do ta se khao sat mo.t cach khac. Ch
ung ta se ch tr`nh b`ay
`e ellipse, nhu.ng nh
v
u.ng l
y lua.n tu.o.ng tu.. co the ap du.ng cho lo.p cac du.`o.ng cong hyperbol
v`a parabol.
- u.`o.ng tr`on tam O(0, 0) ban knh do.n vi.:
D
x2 + y 2 = 1
n`a m trong h`nh vuong V.
34

Xet phep bien doi affine T tren ma.t phang R2 . Khi do anh xa. T bien doi h`nh vuong
u.a
V th`anh h`nh b`nh h`anh v`a du.`o.ng tr`on bien doi th`anh ellipse (H`nh 1.10). Cac diem gi
P, Q cua cac ca.nh cua h`nh b`nh h`anh na` m tren ellipse. Cac diem P, Q v`a tam J cua h`nh
b`nh h`anh xac d.inh duy nhat mo.t h`nh b`nh h`anh v`a do do xac di.nh duy nhat ellipse. Nha.n
xet r`a ng neu co the xac d.inh cac he. so trong tru.`o.ng ho..p tam ellipse l`a goc to.a do. th` ch
ung
`an ap du.ng phep ti.nh tien den
ta c
ung co the xu. l
y trong tru.`o.ng ho..p tong quat. Ta ch c
`eu n`ay ch du
tam J. (D nhien, di
ng khi J co cac to.a do. nguyen). V` va.y co the gia thiet J
l`a goc to.a do. v`a P, Q l`a nh
u.ng diem da du.o..c bien doi tu.o.ng u
.ng. Ch
ung ta gia thiet r`a ng
`eu kim d`ong h
`o (quanh tam J) t`
cung (ngan) cua ellipse d.inh hu.o.ng ngu.o..c chi
u. P den Q;
ngu.o..c la.i, hoan doi P v`a Q.
2
- ac di.nh phu.o.ng tr`nh ellipse ta c

De x

`an t`m ph
ep bi
en do i affine trong R cac diem
1
0
x
x
P
Q
v`a
tu.o.ng u
.ng len P =
v`a Q =
. Phep bien doi T trong tru.`o.ng
yP
yQ
0
1
ho..p n`ay xac d.inh bo.i:


x
xP xQ
x
7
.
y
yP yQ
y
Phep bien doi T bien doi cac diem tren du.`o.ng tr`on:


1
0

cos() +


0
1

sin(),

vo.i [0, 1], th`anh cac diem tren ellipse:




x
xP
xQ
=
cos() +
sin().
y
yP
yQ
Ch
uy
r`a ng cos2 () + sin2 () = 1. Suy ra cac he. so cua phu.o.ng tr`nh xac di.nh ellipse l`a
2
A = yP2 + yQ
, B = 2(xP yP + xQ yQ ), C = x2P + x2Q ,

D = 0,

F = (xP yQ yP xQ )2 .

E = 0,

Bay gi`o. ti.nh tien ellipse theo vector P J, ta du.o..c ellipse mo.i co tam ta.i P, t
u.c l`a
thay x = x + xP , y = y + yP v`ao phu.o.ng tr`nh ellipse ta du.o..c phu.o.ng tr`nh xac di.nh ellipse
mo.i
A(x + xP )2 + B(x + xP )(y + yP ) + C(y + yP )2 + D(x + xP ) + E(y + yP ) + F =
0

A x2 + B xy + C y 2 + D x + E y + F = 0,
trong do
0

A = A,
0

B = B,
0

C = C,
0

D = 2yQ (xP yQ yP xQ ), E = 2xQ (xP yQ yP xQ ), F = 0.


35

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

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

(a)

(b)

4
5

3 2

6 7

1
8

Cung

Di chuyen b`an c`o.

Di chuyen cheo

(c)
H`nh 1.11: (a) Tam cung ve. (b) Ellipse vo.i phep phan hoa.ch. (c) Hu.o.ng di chuyen tu.o.ng
u
.ng.

36

Nha.n xet ra` ng goc to.a do. n`a m tren ellipse mo.i co tam ta.i P, v`a neu ta ve du.o..c
ellipse mo.i n`ay th` se ve du.o..c ellipse ban d`au. V` A, B, C khong thay doi qua phep ti.nh
0
0
tien, nen de gian tie.n, ta se k hie.u D v`a C thay cho D , C (trong do D v`a E ban d`au b`a ng
0).
Tien tr`nh tiep theo l`a ve ellipse. Ch
ung ta chia th`anh tam cung ve. Cac cung ve cho
biet hu.o.ng di chuyen trong thua.t toan. Trong cung th
u. nhat ta di chuyen sang phai v`a di
chuyen cheo len. Co hai cach di chuyen, go.i l`a di chuyen b`an c`o. hoa.c di chuyen cheo, phu.
thuo.c v`ao mo.t hoa.c ca hai to.a do. thay doi. H`nh 1.11 minh ho.a tam cung ve, cac cung
.ng mo.t ellipse v`a bang ch ra hu.o.ng di chuyen trong moi tru.`o.ng ho..p.
tu.o.ng u
`an theo cac cung danh
Thua.t toan du.o.i day chia l`am hai bu.o.c la.p khac nhau - mo.t l
so le, ket th
uc khi da.t den bien cung cheo v`a mo.t doi vo.i cac cung chan, ket th
uc khi da.t
- e xac d.inh cac cung kho.i d`au, ta nha.n xet r`a ng vector gradient
den bien b`an c`o.. D

f
2Ax + By + D
x
f (x, y) := f =
Bx + 2Cy + E
y
vuong goc vo.i tiep tuyen cua conic ta.i diem du.o..c tnh. Ch
ung ta su. du.ng cac to.a do.
cua vector f (x, y) = ( f
, f )t de xac d.inh hu.o.ng di chuyen (b`a ng cach quay 900 ngu.o..c
x y
`eu kim d`ong h
`o) v`a do do hu.o.ng di chuyen cua cung ve. V` diem bat d`au l`a (0, 0) nen
chi
f (0, 0) = (D, E). Thu tu.c GetOctant() nha` m phan loa.i cac cung xuat phat theo vector
n`ay.
char GetOctant(int D, int E)
{
if ((D > 0) && (E < 0))
if (D < -E) return 1;
else return 2;
if ...
}
- e ap du.ng thua.t toan diem gi
`an xac di.nh gia tri. cua bien quyet
D
u.a, vo.i moi cung c
d.inh d v`a phu.o.ng phap ca.p nha.t no. Khi di chuyen theo du.`o.ng cheo ta se ca.p nha.t d b`a ng
mo.t bien v; khi di chuyen theo b`an c`o., ta se tang no bo.i bien u. Neu f (x, y) l`a phu.o.ng
tr`nh ellipse th` d l`a gia tri. cua h`am f ta.i diem gi
u.a cua doa.n noi hai pixel co the du.o..c
cho.n trong bu.o.c ke tiep.
.ng ben trong ellipse v`a f (x, y) > 0 tu.o.ng u
.ng ben ngo`ai ellipse
V` f (x, y) < 0 tu.o.ng u
nen d < 0 khi ellipse di pha ngo`ai diem gi
u.a v`a do do ta cho.n diem ngo`ai; ngu.o..c la.i khi
37

d > 0 ta cho.n diem trong; vo.i d = 0, cho.n mo.t trong hai. Co the cho.n theo cach cua Van
Aken: doi vo.i cac cung danh so le ta se di chuyen b`an c`o. khi d < 0 v`a di chuyen cheo neu
ngu.o..c la.i. Vo.i cac cung danh so chan, ta di chuyen cheo khi d < 0 v`a b`an c`o. neu ngu.o..c la.i.
Trong cung th
u. nhat, gia su. o. bu.o.c th
u. i ta cho.n du.o..c pixel tot nhat C := (xi , yi ).
K
y hie.u di l`a gia tri. quyet d.inh cho.n gi
u.a R := (xi + 1, yi ) v`a D := (xi + 1, yi + 1). K
y hie.u
`an thu..c hie.n vo.i
ui+1 v`a vi+1 l`a cac da.i lu.o..ng co.ng v`ao di de ta.o di+1 . Khi do ch
ung ta c
moi pixel l`a
- a.t diem ve ta.i pixel (xi , yi );
1. D
2. Cho.n pixel ke tiep (xi+1 , yi+1 ) du..a tren di ;
3. Ca.p nha.t ui+1 v`a vi+1 t`
u. ui , vi tren co. so. cho.n lu..a o. Bu.o.c 2;
4. Ca.p nha.t di+1 t`
u. di du..a tren ui+1 hoa.c vi+1 ;
5. Kiem tra thay doi cung ve.
Nhac la.i l`a di+1 co the du.o..c tnh t`
u. di b`a ng k
y thua.t sai phan. Gia thiet l`a dang o. cung
ve d`au tien, diem ve tot nhat l`a (xi , yi ) v`a ta co bien quyet d.inh di = f (xi + 1, yi + 12 ) de
cho.n pixel ke tiep. Neu di di chuyen theo b`an c`o. th` xi+1 = xi + 1 v`a yi+1 = yi . Do do bien
quyet d.inh mo.i di+1 = f (xi + 2, yi + 12 ).Suy ra
ui+1 = di+1 di
1
1
= A(xi + 2)2 + B(xi + 2)(yi + ) + C(yi + )2
2
2
1
+D(xi + 2) + E(yi + ) + F
2
1
1
2
A(xi + 1) + B(xi + 1)(yi + ) + C(yi + )2
2
2
1
+D(xi + 1) + E(yi + ) + F
2
1
= A[2(xi + 1) + 1] + B(yi + ) + D
2
1
= A(2xi + 1) + B(yi + ) + D + 2A.
2
.
.
Ma.t khac, neu di chuyen theo hu o ng cheo th` di = f (xi + 2, yi + 23 ) v`a bu.o.c tang l`a
vi+1 = di+1 di
= (2A + B)xi+1 + (B + 2C)yi+1 + A +
= (2A + B)xi + (B + 2C)yi + A +
38

B
+D+E
2

B
+ D + E + [2A + 2B + 2C].
2

Neu da. t

1
ui = A(2xi + 1) + B(yi + ) + D
2
th` vo.i vie.c di chuyen b`an c`o. ta co ui+1 = ui + 2A. Tu.o.ng tu.., neu da.t
vi = (2A + B)xi + (B + 2C)yi + A +

B
+D+E
2

th` khi di chuyen cheo ta co vi+1 = vi + (2A + 2B + 2C).


- e lu.u gi
`an
D
u. nh
u.ng gia tri. ui v`a vi doi vo.i hai cach di chuyen b`an c`o. v`a cheo, ta c
ca.p nha.t nh
u.ng gia tri. n`ay ke ca khi ch
ung khong du.o..c su. du.ng. Do do,
vo.i di chuyen b`an c`o.
vi+1 = (2A + B)xi+1 + (B + 2C)yi+1 + A + B/2 + D + E
= (2A + B)(xi + 1) + (B + 2C)yi + A + B/2 + D + E
= vi + 2A + B;
doi vo.i di chuyen cheo,
ui+1 = ui + 2A + B.
- a.t k1 := 2A, k2 := 2A + B, v`a k3 := 2A + 2B + 2C. Khi do ta co thu tu.c ca.p nha.t
D
cac bien u v`a v nhu. sau:
Di chuyen b`an c`o.
ui+1 = ui + k1 ,

vi+1 = vi + k2 .

ui+1 = ui + k2 ,

vi+1 = vi + k3 .

Di chuyen cheo

Bay gi`o. khao sat vie.c thay doi cung ve. Nh


xet r`a ng ch
ung ta ket th
uc ve cung (E 1 )
a.n
1
. Noi cach khac, ch
ung ta ket th
uc ve
khi vector gradient f (x, y) ty le. vo.i vector
1
`an cua vector f (x, y) b`a ng khong (H`nh 1.12).
cung (E 1 ) khi tong cua hai th`anh ph
Ma.t khac, de d`ang kiem tra ra` ng
f
k2
= ui ,
x
2

f
f
k2
+
= vi .
y
y
2
39

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

Vector n`ay na` m tren du.`o.ng thang co he. so goc -1

`an cua vector gradient am. Khi di v`ao


H`nh 1.12: Trong cung th
u. nhat, tong cac th`anh ph
cung th
u. hai, tong n`ay doi dau.
Do do, dau cua bieu th
u.c vi k22 cho biet da ket th
uc ve cung (E 1 ) hay chu.a. Tu.o.ng
tu.., ket th
uc ve cung (E 2 ) xac d.inh bo.i dau ui k22 .
`an xac d.inh cac bien quyet di.nh di v`a ui , vi cua cung th
Ke tiep ch
ung ta c
u. hai khi
ta ket th
uc cung th
u. nhat; ch
ung van tu.o.ng u
.ng vo.i cac bien tang doi vo.i di chuyen cheo
v`a b`an c`o.. Nhu.ng cac di chuyen b`an c`o. bay gi`o. l`a du
.ng thay v` ngang v`a di du.o..c xac di.nh
bo.i f (x + 1 , y + 1) thay cho f (x + 1, y + 1 ).
i

0
0
0
K
y hie.u di , ui , vi trong v`
ung y
ngha). De d`ang
ung th
u. hai thay cho di , ui , vi (vo.i c`
kiem tra r`a ng

1
1
0
di di = f (xi + , yi + 1) f (xi + 1, yi + )
2
2
3
1
vi
ui + k3 k2 ,
=
2
8
2
B
0
vi vi = (2A + B)xi + (B + 2C)yi + + C + D + E
2
B
(2A + B)xi (B + 2C)yi + A + + D + E
2
= A + C,
k2 k3
0
ui ui = v i ui
+ .
2
2
Ho.n n
u.a,
0

k3 = k3 ,

k 2 = k3 k2 ,

k1 = k1 2k2 + k3 .

`eu c
`an thiet de ve ellipse, t nhat l`a hai cung. Ch
Nhu. va.y ch
ung ta da co cac di
ung ta bao
`an h`a ng trong phu.o.ng tr`nh xac di.nh conic) trong doa.n ma ma.c d`
h`am he. so F (th`anh ph
u
.
.
dang gia su no b`a ng 0; vo i conic tong quat, tam co the co to.a do. khong nguyen v`a do do
diem bat d`au (de ve) co the khong n`a m tren ellipse (trong tru.`o.ng ho..p n`ay F co the khac
0).
40

Sau doa.n ma minh ho.a thua.t toan trong chu.o.ng tr`nh Conic.cpp l`a thu tu.c Conjugate()
nh`a m xac di.nh cac he. so cua mo.t ellipse (tam ta.i goc to.a do.) t`
u. cac diem lien ho..p P v`a
Q : H`nh b`nh h`anh co cac dnh l`a P + Q, P Q, P Q v`a P + Q bao quanh ellipse v`a
ellipse tiep x
uc vo.i cac ca.nh cua h`nh b`nh h`anh.
- oa.n ma ket th
- e ve ellipse khep kn, c
`an dem so cac
D
uc khi di het cung cuoi c`
ung. D
`an thiet de da.t to.i pixel xuat phat (b`ai ta.p).
bu.o.c di chuyen c

void Conic (long xs, long ys, long xe, long ye)
{
long x, y;
long octant, octantCount;
int dxsquare, dysquare, dxdiag, dydiag;
long d, u, v, k1, k2, k3;
long dfdx, dfdy;
long tmp;
octant = GetOctant(D, E);
switch (octant)
{
case 1:
{
d = round(A +

B/2 + C/4 + D + E/2 + F);

u = round(A +

B/2 + D);

v = round(A +

B/2 + D + E);

k1 = 2*A;
k2 = (2*A + B);
k3 = k2 + B + 2*C;
dxsquare = 1;
dysquare = 0;
dxdiag = 1;
dydiag = 1;
break;
}
case 2:
{
41

d = round(A/4 +

B/2 + C + D/2 + E + F);

u = round(B/2 +

C + E);

v = round(B/2 +

C + D + E);

k1 = 2*C;
k2 = B + 2*C;
k3 = 2*A + 2*B + 2*C;
dxsquare = 0;
dysquare = 1;
dxdiag = 1;
dydiag = 1;
break;
}
...
}
x = xe - xs;
y = ye - ys;
dfdx = (2*A*x + B*y + D);
dfdy = (B*x + 2*C*y + E);
octantCount = GetOctant(dfdx, dfdy) - octant;
if (octantCount <= 0) octantCount += 8;
x = xs;
y = ys;
while (octantCount > 0)
{
if (octant % 2)
{
while (v <= k2/2)
{
putpixel(x, y, Value);
if (d < 0)
{
x += dxsquare;
y += dysquare;
u += k1;
v += k2;
42

d += u;
}
else
{
x += dxdiag;
y += dydiag;
u += k2;
v += k3;
d += v;
}
}
d += v/2 - u + 3*k3/8 - k2/2;
u = -u + v + k3/2 - k2/2;
v += k3/2 - k2;
k1 = k1 - 2*k2 + k3;
k2 = k3 - k2;
tmp = dxsquare;
dxsquare = -dysquare;
dysquare = tmp;
}
else
{
while (u < k2/2)
{
putpixel(x, y, Value);
if (d < 0)
{
x += dxdiag;
y += dydiag;
u += k2;
v += k3;
d += v;
}
else
{
x += dxsquare;
y += dysquare;
43

u += k1;
v += k2;
d += u;
}
}
d = d + u - v + k1 - k2;
v = 2*u - v + k1 -k2;
u = u + k1 - k2;
k3 = 4*(k1 - k2) + k3;
k2 = 2*k1 - k2;
tmp = dxdiag;
dxdiag = -dydiag;
dydiag = tmp;
}
octant++;
if (octant > 8) octant -= 8;
octantCount--;
}
....
}
void Conjugate (long xp, long yp, long xq, long yq)
{
long xprod, tmp, xe, ye;
xprod = xp*yq - xq*yp;
if (xprod != 0)
{
if (xprod < 0)
{
tmp = xp; xp = xq; xq = tmp;
tmp = yp; yp = yq; yq = tmp;
xprod = -xprod;
}
A = yp*yp + yq*yq;
B = -2*(xp*yp + xq*yq);
44

C = xp*xp + xq*xq;
D = 2*yq*xprod;
E = -2*xq*xprod;
F = 0;
xe = xp;
ye = yp;
Conic(xp, yp, xe, ye);
}
}
- i
`eu dang nga.c nhien l`a doa.n ma ca.p nha.t cac gia tri. trong hai cung ve d`au tien c
D
ung thu..c
hie.n du
ng vo.i cac cung ve c`on la.i. Cuoi c`
ung, nhu. trong H`nh 1.13, doi khi mo.t bu.o.c di
`eu
chuyen cheo trong thua.t toan bang qua pha ben kia cua ellipse; ngha l`a no thay doi nhi
`eu n`ay xay ra, thua.t toan ta.o ra mo.t day cac pixel ra khoi
cung ve ta.i mo.t th`o.i diem. Khi di
qu
y da.o cua ellipse. Nha.n xet ra` ng day l`a mo.t da.ng cua aliasing-tnh hie.u f (x, y) du.o..c lay
`an so rat cao chuyen th`anh cac diem nguyen.
mau ch
u.a cac t
Pratt d`e xuat mo.t phu.o.ng an giai quyet nhu. sau [18]. Trong khi thua.t toan di chuyen
.ng su.. thay doi nhanh hu.o.ng
trong cung ve th
u. nhat, vie.c bang cheo qua ellipse se tu.o.ng u
cua vector gradient. Tha.t va.y, trong cung ve th
u. nhat vector gradient luon luon co th`anh
`an theo y am v`a th`anh ph
`an theo x du.o.ng. Sau khi bang qua ellipse, ta se den mo.t diem
ph
trong cung ve 3, 4, 5 hoa.c 6. Ch
ung ta xac di.nh du.`o.ng thang phan cach gi
u.a cac cung
`an x cua vector gradient ba` ng
ve n`ay v`a cac cung ve 7, 8, 1 v`a 2 ba` ng cach cho th`anh ph
.
khong-t
u c l`a 2Ax + By + D = 0. V` ui = 2Axi + Byi + D + A + B/2 nen co the su. du.ng
bien ui de xac d.inh hie.n tu.o..ng bang cheo xay ra. L
y lua.n tu.o.ng tu.. vo.i cac cung ve khac.
- e co them thong tin v
`e cac thua.t toan ve conic, xem Pitt1, [18], [6].
D
....
....
....
....
....
....
....
....
....
....
...................................................................................................................................................................................................................
..
..
..
..
..
..
..
..
..
..
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
.........................................................................................................................................................................................................
....
....
....
....
....
....
....
....
....
....
...
...
...
...
...
...
...
...
...
...
...................................................................................................................................................................................................................
..
..
..
..
..
..
..
..
..
..
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
.........................................................................................................................................................................................................
....
....
....
....
....
....
....
....
....
....
...
...
...
...
...
...
...
...
...
...
...................................................................................................................................................................................................................
..
..
..
..
..
..
..
..
..
..
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
...................................................................................................................................................................................................................
...
...
...
...
...
...
..................................... ...
...
...
...
...
...
.............................................
... ...............
...
.
.
.
.
.
.
....
.
.
....
...............................................................................................................................................................................................................................................
..
................ ..
..
.. .................. ..
..
..
..
. ....................... ..
.
.
.
......................
...
.
.
.
.
...
.
..
...
..
...
..
......................................................................
.
.
.
.
.
...
............................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
.
.
.
.
.
.
.
.
.
.

y y y y

H`nh 1.13: Thua.t toan sai trong tru.`o.ng ho..p ellipse he.p.
Wu v`a Rokne [28] xay du..ng mo.t phu.o.ng phap khac ve conic ph`
u ho..p vo.i thiet bi. hien
45

thi. cac m
u.c xam. Thay cho vie.c tang mo.t pixel ta.i mo.t th`o.i diem, thua.t toan tang mo.t
`eu ngang v`a do. cong l
`oi len. Neu ch
ung ta di chuyen theo chi
ung
khoi cac pixel. Gia su. ch
.
.
ung ta ve pixel (x + 2, y + 2) th` pixel trung gian
ta da ve pixel (x, y) v`a sau hai bu o c la.p ch
du.o..c no.i suy l`a (x + 1, y + 1). Tu.o.ng tu.., neu sau hai bu.o.c la.p ta ve pixel (x + 2, y) th` pixel
`an
trung gian du.o..c no.i suy l`a (x + 1, y). Neu sau hai bu.o.c la.p l`a pixel (x + 2, y + 1) th` c
cho.n mo.t trong hai pixel (x + 1, y) hoa.c (x + 1, y + 1). Tren m`an h`nh gia tri. xam, ch
ung ta
.
.
.
.
.
.
co the hien thi. ca hai pixel n`ay nhu ng vo i cu `o ng do. sang mo.t nu a. Do do ta.i moi bu o.c la.p,
ta ve hai pixel c`
ung mo.t l
uc v`a v` va.y giam th`o.i gian thu..c hie.n tnh toan. Ta.i cho noi cua
`an tranh vie.c ve ch
`ong len nhau v`a khong qua kho de giai quyet
hai cung ve, thua.t toan c
`eu n`ay. Hien nhien thua.t toan ch ph`
u.ng thiet bi. hien thi. gia tri. xam, nhu.ng
di
u ho..p vo.i nh
no minh ho.a co the do.n gian hoa qua tr`nh xu. l
y khi co the ap du.ng k
y thua.t antialiasing.

46

Chu.o.ng 2
H`nh ho.c cu a c
ac d
u.`
o.ng cong v`
a m
a.t
cong
Mu.c dch chnh cua chu.o.ng n`ay l`a tr`nh b`ay cac phu.o.ng phap ve du.`o.ng cong Bezier v`a
- ay l`a hai du.`o.ng cong thu.`o.ng du.o..c su. du.ng trong cac ph
`an m
`em d`o ho.a.
B-spline. D

2.1

`au
Mo. d

Chu.o.ng n`ay tr`nh b`ay phu.o.ng phap h`nh ho.c nha` m phan tch v`a thiet ke cac du.`o.ng cong
v`a ma.t cong du.o.i da.ng cac phu.o.ng tr`nh tham so v`a do do cho phep de d`ang ve no.
Ngu.o..c vo.i cac du.`o.ng cong v`a ma.t cong du..a tren cac phu.o.ng tr`nh toan ho.c tu.o.ng
doi do.n gian nhu. ellipse cho bo.i P (t) = (a cos(2t), b sin(2t)), cac cong cu. m`a ch
ung ta
tr`nh b`ay du.o.i day cho phep ngu.`o.i thiet ke xay du..ng nh
u.ng h`nh da.ng khac nhau du..a tren
`eu khien ch
d
u. lie.u cho tru.o.c v`a co the di
ung mo.t cach de d`ang thong qua mo.t ta.p nh
u.ng
`eu khien. Vie.c xay du..ng mo.t du.`o.ng cong (hay ma.t cong)
diem m`a ta go.i l`a cac diem di
tu`
yy
l`a rat kho neu khong biet tru.o.c phu.o.ng tr`nh xac di.nh no. Tuy nhien, vo.i cach tiep
ca.n mo.i, ta co the ta.o ra nh
u.ng h`nh da.ng mong muon b`a ng cach chnh, su.a vi. tr cac diem
`eu khien-di
`eu n`ay thu..c hie.n de d`ang b`a ng qua tr`nh tu.o.ng tac gi
di
u.a ngu.`o.i thiet ke v`a
may tnh.
Phu.o.ng phap xay du..ng du.`o.ng cong o. day l`a mo.t nhan to co. ban trong lanh vu..c ap
du.ng may tnh v`ao thiet ke cac mau h`nh ho.c (computer aided geometric design-CAGD) v`a
thu.`o.ng d`
ung trong cong nghe. che ta.o. Chu.o.ng n`ay d`e ca.p mo.t so phu.o.ng phap thiet ke
47

`eu cach tiep ca.n (xem, chang ha.n [1], [7], [8]), nhu.ng
cac du.`o.ng cong v`a ma.t cong. Co nhi
o. day cho.n vie.c thiet ke su. du.ng cac du.`o.ng cong Bezier v`a B-spline. Lo.p du.`o.ng cong n`ay
rat quen thuo.c trong cac u
.ng du.ng CAD (computer-aided design) .
- e do.n gian, ch
D
ung ta bat d`au vo.i cac du.`o.ng cong phang P (t) = (x(t), y(t)) v`a sau
`eu P (t) = (x(t), y(t), z(t)) de d`ang
do mo. ro.ng cho nh
u.ng ma.t cong (cac du.`o.ng cong ba chi
suy ra t`
u. do).

2.2

- u.`
D
o.ng cong Bezier

Ch
ung ta se tr`nh b`ay thua.t toan de Casteljau (xem [7]) xay du..ng mo.t cach h`nh ho.c du.`o.ng
`eu khien. Phu.o.ng phap n`ay de d`ang suy ra cac
cong P (t) du..a tren mo.t ta.p cac diem di
du.`o.ng cong Bezier-l`a nh
u.ng doi tu.o..ng co. ban trong CAGD. De Casteljau (nam 1959), do.c
la.p vo.i Bezier (nam 1962), du.a ra phu.o.ng phap thiet ke mo.t du.`o.ng cong m`a sau n`ay go.i l`a
- u.`o.ng cong n`ay l`a nh
`an trong cac he. thong CAD du.o..c
du.`o.ng cong Bezier. D
u.ng th`anh ph
su. du.ng trong hai cong ty Citroen v`a Renault de ta.o ra cac h`nh da.ng ben ngo`ai cua xe o
to.

2.2.1

Thu
a.t to
an de Casteljau

`eu khien de xay du..ng vo.i moi gia tri. t


Thua.t toan de Casteljau su. du.ng mo.t day cac diem di
trong doa.n [0, 1] tu.o.ng u
.ng vo.i mo.t diem P (t). Do do thua.t toan sinh ra mo.t day cac diem
`eu khien thay doi, du.`o.ng cong se thay doi
t`
u. mo.t ta.p cac diem cho tru.o.c. Khi cac diem di
theo. Cach xay du..ng du..a tren mo.t loa.t cac phep no.i suy tuyen tnh v`a do do rat de d`ang
`eu tnh chat h
giao tiep. Ngo`ai ra, phu.o.ng phap c
ung suy ra nhi
u.u ch cua du.`o.ng cong.

Parabol du..a tr
en ba d
i
em
- a.t
Trong ma.t phang R2 xet ba diem P0 , P1 , P2 . D
P01 (t) := (1 t)P0 + tP1 ,
P11 (t) := (1 t)P1 + tP2 ,
trong do t [0, 1]. Noi cach khac, vo.i moi t [0, 1], cac diem P01 (t) v`a P11 (t) na` m tren cac
doa.n thang P0 P1 v`a P1 P2 tu.o.ng u
.ng. La.p la.i phep no.i suy tuyen tnh tren cac diem mo.i
48

P1

(a)

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

P01 (t)
P0

P02 (t)

P11 (t)

P2

P......1

(b)

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

@t = 0
@0.3
P0

@0.5

@0.7

@t = 1
P2

`eu khien.
H`nh 2.1: Thua.t toan de Casteljau cho ba diem di
P01 (t) v`a P11 (t) (vo.i c`
ung gia tri. t) ta du.o..c (H`nh 2.1(a))
P02 (t) = (1 t)P01 (t) + tP11 (t).
Qu
y tch cua P (t) := P02 (t) khi t thay doi trong doa.n [0, 1] se cho ta du.`o.ng cong nhu. H`nh
2.1(b).
De d`ang ch ra r`a ng
P (t) = (1 t)2 P0 + 2t(1 t)P1 + t2 P2 .
Suy ra P (t) l`a du.`o.ng cong parabol theo bien t.
`eu khien
V du. 2.2.1 Phu.o.ng tr`nh du.`o.ng cong Bezier P (t) tu.o.ng u
.ng ba diem di
P0 (0, 0), P1 (2, 2), P2 (6, 0)
l`a
P (t) = (1 t)2 P0 + 2t(1 t)P1 + t2 P2
= (1 t)2 (0, 0) + 2(1 t)t(2, 2) + t2 (6, 0)
= (2t2 + 4t, 4t2 + 4t).
`eu khien 3 ta co:
Tong quat cho tru.`o.ng ho..p so diem di
49

`eu khi
Thu
a.t to
an de Casteljau cho L + 1 d
i
em d
i
en
Trong ma.t phang R2 xet L + 1 diem P0 , P1 , . . . , PL . Vo.i moi gia tri. t cho tru.o.c, ta xay du..ng
theo quy na.p du.`o.ng cong P0L (t) nhu. sau:
- a.t r = 0 v`a Pir (t) := Pi vo.i mo.i i = 0, 1, . . . , L r.
1. [Kho.i ta.o] D
2. [Ket th
uc?] Neu r = L d`
u.ng; ngu.o..c la.i da.t
r
Pir+1 (t) = (1 t)Pir (t) + tPi+1
(t),

vo.i i = 0, 1, . . . , L r 1.
3. Thay r bo.i r + 1 v`a chuyen sang Bu.o.c 2.
`eu
.ng cac diem, go.i l`a diem di
Ket th
uc, ta du.o..c du.`o.ng cong Bezier P (t) := P0L (t) tu.o.ng u
- a giac ta.o bo.i cac diem di
`eu khien go.i l`a da giac di
`eu khien.
khien, P0 , P1 , . . . , PL . D
`eu khien v`a diem P (0.5),
H`nh 2.2 minh ho.a du.`o.ng cong Bezier du..a tren bon diem di
tu.o.ng u
.ng gia tri. t = 0.5, tren du.`o.ng cong u
.ng vo.i t = 0.5. Hien nhien day l`a du.`o.ng cong
da th
u.c ba.c ba.
P2

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

P1

P (0.5)

P3

P0
- u.`o.ng cong Bezier vo.i bon diem di
`eu khien.
H`nh 2.2: D

`
V
ed
u.`
o.ng cong Bezier b
a ng thu
a.t to
an Casteljau
`om N umV ertices
Thu tu.c sau tnh P (t) theo thua.t toan de Casteljau du..a tren mang P [] g
`eu khien:
diem di
Point2D Casteljau(float t)
50

{
Point2D Q[MaxVertices];
int i, r;
for (i = 0; i <= NumVertices; i++)
{
Q[i].x = P[i].x;
Q[i].y = P[i].y;
}
for (r = 1 ; r <= NumVertices; r++)
{
for (i = 0; i <= NumVertices - r; i++)
{
Q[k].x = (1 - t)*Q[k].x + t*Q[k + 1].x;
Q[k].y = (1 - t)*Q[k].y + t*Q[k + 1].y;
}
}
return(Q[0]);
}
Nha.n xet ra` ng thu tu.c Casteljau() su. du.ng mo.t mang trung gian Q[]. Ho.n n
u.a, mang n`ay
du.o..c kho.i ta.o la.i moi khi thu tu.c du.o..c go.i. Do do khong hie.u qua trong tnh toan. Mo.t
`an tiep theo.
phu.o.ng an nhanh ho.n se du.o..c d`e ca.p trong ph
- e ve du.`o.ng cong Bezier, ch
`an ap du.ng thu tu.c ve du.`o.ng cong tham so:
D
ung ta ch c
void DrawCurve(float a, float b, int NumPoints, Function Func)
{
float Delta = (b - a)/(float)NumPoints;
float t = a;
int i;
moveto(Func(t).x, Func(t).y);
for (i = 1; i <= NumPoints; i++)
{
t += Delta;
51

lineto(Func(t).x, Func(t).y);
}
}
`en xac d.inh cua du.`o.ng cong F unc l`a doa.n [a, b]; so diem phan
Trong thu tu.c n`ay, mi
hoa.ch tren doa.n [a, b] l`a N umP oints; v`a du.`o.ng cong tham so l`a mo.t con tro h`am co kieu
Function vo.i khai bao:
typedef Point2D (*Function) (float).

2.2.2

- a th
D
u.c Bernstein v`
ad
u.`
o.ng cong Bezier

`an tru.o.c cho ta thua.t toan h`nh ho.c ve du.`o.ng cong Bezier. Ph
`an
Cach tiep ca.n trong ph
n`ay ch ra bieu dien giai tch cua du.`o.ng cong Bezier.
`eu
Tha.t va.y, de d`ang ch
u.ng minh ra` ng du.`o.ng cong Bezier P (t) tu.o.ng u
.ng cac diem di
khien P0 , P1 , . . . , PL , xac d.inh bo.i
P (t) =

L
X

Pk BkL (t),

(2.1)

k=0

trong do
BkL (t)

:=


L
k

(1 t)Lk tk

vo.i k = 0, 1, . . . , L, l`a cac da th


u.c Bernstein, v`a

L
k

`an tu..
l`a to ho..p cha.p k cua L ph

V du. 2.2.2 T`
u. d.inh ngha, ta co cac da th
u.c Bernstein ba.c ba:

3
3
B0 (t) =
(1 t)3 t0 = (1 t)3
0

3
3
B1 (t) =
(1 t)2 t1 = 3(1 t)2 t
1

3
(1 t)1 t2 = 3(1 t)t2
B23 (t) =
2

3
3
(1 t)0 t3 = t3
B3 (t) =
3
H`nh 2.3 minh ho.a d`o thi. cua bon da th
u.c n`ay khi t [0, 1].
52

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

B03 (t)
/

B13 (t)
/

B33 (t)
\

B23 (t)
\

H`nh 2.3: Cac da th


u.c Bernstein ba.c ba.
`eu
V du. 2.2.3 Phu.o.ng tr`nh tham so cua du.`o.ng cong Bezier P (t) tu.o.ng u
.ng bon diem di
khien
P0 (0, 0), P1 (2, 3), P2 (6, 0), P3 (9, 2)
co da.ng
P (t) = (1 t)3 P0 + 3(1 t)2 tP1 + 3(1 t)t2 P2 + t3 P3
= (1 t)3 (0, 0) + 3(1 t)2 t(2, 3) + 3(1 t)t2 (6, 0) + t3 (9, 2)
= [6(1 t)2 t + 18(1 t)t2 + 9t3 , 9(1 t)2 t + 2t3 ]
= [6t 12t2 + 6t3 + 18t2 18t3 + 9t3 , 9t 18t2 + 9t3 + 2t3 ]
= (3t3 + 6t2 + 6t, 11t3 18t2 + 9t).
Nha.n xet r`a ng cac da th
u.c Bernstein BkL (t) chnh l`a cac so ha.ng cua khai trien nhi.
P
th
u.c Newton cua [(1 t) + t]L . Do do Lk=0 BkL (t) 1 vo.i mo.i t R. Ho.n n
u.a
- i.nh l
u.c Bernstein thoa quan he. de. quy sau:
D
y 2.2.4 Cac da th
L1
(t),
BkL (t) = (1 t)BkL1 (t) + tBk1

trong d
o B00 (t) = 1, v`a BkL (t) = 0 vo.i mo.i k
/ {0, 1, . . . , L}.
V
ed
u.`
o.ng cong Bezier qua d
a th
u.c Bernstein
ung ta xet thu tu.c xay du..ng du.`o.ng cong Bezier hie.u qua ho.n Casteljau().
Tru.o.c het ch
Phu.o.ng phap du..a tren lu.o..c d`o Horner de tnh gia tri. cua da th
u.c. Mo.t v du. cua lu.o..c d`o
53

`ong nhau, trong tru.`o.ng ho..p da th


Horner, c`on go.i l`a nhan l
u.c ba.c ba:
c0 + tc1 + t2 c2 + t3 c3 = c0 + t(c1 + t(c2 + tc3 )).
Tu.o.ng tu.. vo.i du.`o.ng cong Bezier (ba.c ba):




3
3
3 2
3 3
3
P (t) = ((
sP0 +
tP1 )s +
t P2 )s +
t P3 ,
0
1
2
3
trong do s = 1 t. Nha.n xet r`a ng


Li+1
L
L
;
=
i1
i
i

i > 0,

Do do ta co doa.n chu.o.ng tr`nh sau tnh gia tri. P L (t) (tru.`o.ng ho..p tong quat). Trong thu
tu.c n`ay, NumVertices chnh l`a L + 1.
Point2D Horner_Bezier(float t)
{
int i, L_choose_i;
float Fact, s;
Point2D Q;
s = 1.0 - t;
Fact = 1.0;
L_choose_i = 1;
Q.x = P[0].x*s;
Q.y = P[0].y*s;
for(i = 1; i < NumVertices; i++)
{
Fact *= t;
L_choose_i *= (NumVertices - i + 1)/i;
Q.x = (Q.x + Fact*L_choose_i*P[i].x)*s;
Q.y = (Q.y + Fact*L_choose_i*P[i].y)*s;
}
Q.x += Fact*t*P[NumVertices].x;
Q.y += Fact*t*P[NumVertices].y;
54

return(Q);
}

`an mang trung gian; ngo`ai ra, Horner Bezier() co do.


Nha.n xet ra` ng thu tu.c n`ay khong c
ph
u.c ta.p tnh toan O(L) trong khi Casteljau() co do. ph
u.c ta.p tnh toan O(L2 ).
`eu n`ay khong co ngha ta da co cach tot nhat ve du.`o.ng cong Bezier.
Tuy nhien di
`an ta.o ra he. so
Chang ha.n, ch
ung ta go.i thu tu.c Horner Bezier() ta.i moi diem, v`a do do c
`an. Co the giam tnh toan nh`o. go.p hai l`o.i go.i. Tot nhat l`a tnh tru.o.c mo.t
L choose i hai l
`an day cac he. so khai trien nhi. th
l
u.c.

2.3

C
ac tnh ch
at cu a d
u.`
o.ng cong Bezier

- u.`o.ng cong Bezier co mo.t so tnh chat quan tro.ng v`a do do thu.`o.ng du.o..c d`
D
ung trong CAGD.
`e lo.p
ung ta hieu sau sac ho.n v
Vie.c khao sat v`a ch
u.ng minh cac tnh chat n`ay cho phep ch
du.`o.ng cong Bezier.

- i qua d
`au P0 v`
D
i
em d

ad
i
em cu
oi PL
- u.`o.ng cong du..a tren cac diem di
`eu khien P0 , P1 , . . . , PL khong di qua cac diem n`ay tr`
D
u.
- ay l`a mo.t tnh chat rat h
diem d`au P0 v`a diem cuoi PL . D
u.u du.ng, v` du..a v`ao do ngu.`o.i
- i
`eu n`ay l`a hien
thiet ke biet chnh xac du.`o.ng cong Bezier se bat d`au v`a ket th
uc o. dau. D
nhien t`
u. thua.t toan de Casteljau.
Ta c
ung co the ch
u.ng minh tnh chat n`ay t`
u. phu.o.ng tr`nh xac d.inh du.`o.ng cong thong
qua cac da th
u.c Bernstein. Tha.t va.y do B0L (t) = (1 t)L v`a BLL (t) = tL , nen B0L (t) nha.n
gia tri. 1 v`a 0 ta.i t = 0 v`a t = 1 tu.o.ng u
.ng. Tu.o.ng tu.., BLL (t) nha.n gia tri. 0 v`a 1 ta.i t = 0
v`a t = 1 tu.o.ng u
.ng. Ngo`ai ra, tat ca cac da th
u.c BiL (t), i = 1, 2, . . . , L 1, nha.n gia tri. 0
ta.i t = 0 v`a t = 1. He. qua l`a P (0) = P0 v`a P (1) = PL .
55

B
at bi
en d

oi v
o.i ph
ep bi
en d

oi affine
Xet phep bien doi affine T : R2 R2 , P 7 M P + tr, trong do M l`a ma tra.n vuong cap
- a.t Q(t) = T [P (t)] vo.i moi t [0, 1]. De kiem tra ra` ng
2 2 v`a tr l`a vector trong R2 . D
" L
#
X
Q(t) = M
Pk BkL (t) + tr.
k=0

ung l`a mo.t du.`o.ng cong Bezier


Noi cach khac, du.`o.ng cong Bezier qua phep bien doi affine T c
`eu khien Qk = M Pk + tr, k = 0, 1, . . . , L,-l`a cac diem qua phep
tu.o.ng u
.ng vo.i cac diem di
- i
`eu khien ban d`au. D
`eu n`ay co ngha ra` ng du.`o.ng cong
bien doi affine T cua nh
u.ng dem di
Bezier bat bien qua phep bien doi affine. V` va.y de thu..c hie.n phep bien doi affine doi vo.i
`an phai bien doi t`
du.`o.ng cong Bezier, ch
ung ta khong c
u.ng diem r`o.i ra.c tren du.`o.ng cong
`an bien doi affine doi vo.i cac diem di
`eu khien v`a du..ng du.`o.ng cong Bezier tren
do, m`a ch c
`eu khien mo.i.
cac diem di
V du. 2.3.1 Theo V du. 2.2.3, phu.o.ng tr`nh tham so cua du.`o.ng cong Bezier P (t) tu.o.ng
`eu khien P0 (0, 0), P1 (2, 3), P2 (6, 0) v`a P3 (9, 2) l`a
u
.ng bon diem di
P (t) = (3t3 + 6t2 + 6t, 11t3 18t2 + 9t).
Xet phep bien doi affine

T : R R , (x, y) 7

+
.
0 1
y
2
`eu khien Qi = T (Pi )
Khi do phu.o.ng tr`nh tham so du.`o.ng cong Q(t) tu.o.ng u
.ng bon diem di
l`a

Q(t) = T [P (t)] =

3t3 + 6t2 + 6t

0 1
11t3 18t2 + 9t

3
3t + 6t2 + 6t + 1
=
.
11t3 + 18t2 9t + 2


1
2

B
at bi
en d

oi v
o.i ph
ep bi
en d

oi affine tham s
o
Cac du.`o.ng cong Bezier xac di.nh tren doa.n [0, 1]. Tuy nhien, trong mo.t v`ai tru.`o.ng ho..p de
`an xet tren doa.n khac. Gia su. c
`an xac di.nh du.`o.ng cong Bezier vo.i cac diem
thua.n tie.n ta c
`eu khien Pk , k = 0, 1, . . . , L, tren doa.n [a, b]. Muon va.y, thay t bo.i ua
di
v`a nha.n du.o..c
ba
L
X

Pk BkL

k=0

vo.i u thay doi trong doa.n [a, b].


56

ua
ba

`oi
Bao l
`oi cua L+1 diem di
`eu khien Pk , k = 0, 1, . . . , L, k
Nhac la.i r`a ng, bao l
y hie.u Co(P0 , P1 , . . . , PL ),
`oi nho nhat ch
u.ng minh r`a ng (xem [21])
l`a ta.p l
u.a cac diem n`ay. Co the ch
( L
)
L
X
X
Co(P , P , . . . , P ) =
P |
= 1 v`a 0 vo.i k = 0, 1, . . . , L .
0

k=0

k=0

Theo cach xay du..ng h`nh ho.c cua thua.t toan de Casteljau, du.`o.ng cong Bezier na` m
`oi cua cac diem di
`eu khien Pk , k = 0, 1, . . . , L. C
u. bieu
trong bao l
ung co the suy tru..c tiep t`
dien (2.1): cac da th
u.c Bernstein BkL (t) khong am v`a co tong b`a ng 1 vo.i mo.i t [0, 1].
`eu khien c`
He. qua l`a neu cac diem di
ung n`a m tren mo.t du.`o.ng thang th` du.`o.ng cong
Bezier l`a mo.t doa.n thang.
M
u.c d

o. dao d

o.ng b
e
`eu khien. Chnh xac
Co the noi du.`o.ng cong Bezier khong the qua ma.t du.o..c da giac di
ho.n, so giao diem cua mo.t du.`o.ng thang bat k`
y vo.i du.`o.ng cong Bezier nho ho.n hoa.c b`a ng
- ay l`a mo.t tnh chat
`eu khien (xem [7]). D
so giao diem cua du.`o.ng thang do vo.i da giac di
`eu khien, ho. co
h
u.u du.ng doi vo.i cac nh`a thiet ke du.`o.ng cong: khi ho. cho.n cac diem di
.
.
.
.
.
.
.
.
.
the tin tu o ng ra` ng du `o ng cong du o. c xay du. ng t`
u ch
ung khong go. n song lung tung hay co
.
.
.
them nh
u ng du `o ng re nhanh.
- a.o h`
D
am cu a d
u.`
o.ng cong Bezier
T`
u. phu.o.ng tr`nh (2.1) de d`ang suy ra
L1
X
dP (t)
=L
Pk BkL1 (t),
dt
k=0

(2.2)

trong do Pk := Pk+1 Pk , k = 0, 1, . . . , L 1.
Do do da.o h`am ba.c nhat cua du.`o.ng cong Bezier l`a mo.t du.`o.ng cong Bezier du.o..c xay
`eu khien Pk . Suy ra, t`
du..ng tren co. so. cua L vector di
u. (2.2), ta co da.o h`am ba.c hai
L2
X
dP 2 (t)
=
L(L

1)
2 Pk BkL2 (t),
dt2
k=0

trong do 2 Pk = Pk+1 Pk . Tu.o.ng tu.. vo.i cac da.o h`am cap cao khac.
57

V du. 2.3.2 Theo V du. 2.2.1, phu.o.ng tr`nh du.`o.ng cong Bezier P (t) tu.o.ng u
.ng ba diem
`eu khien
di
P0 (0, 0), P1 (2, 2), P2 (6, 0)
l`a
P (t) = (2t2 + 4t, 4t2 + 4t).
- a.c bie.t P 0 (0) = (4, 4) v`a P 0 (1) = (8, 4). Suy ra he. so
Khi do P 0 (t) = (4t + 4, 8t + 4). D
goc cua tiep tuyen vo.i du.`o.ng cong P (t) ta.i P0 v`a P2 tu.o.ng u
.ng l`a 44 = 1 v`a 4
= 1
. T`
u.
8
2
do co phu.o.ng tr`nh tiep tuyen vo.i du.`o.ng cong P (t) ta.i P0 l`a y = x v`a phu.o.ng tr`nh tiep
tuyen vo.i du.`o.ng cong P (t) ta.i P2 l`a y = 12 x + 3. De kiem tra do chnh l`a cac phu.o.ng tr`nh
du.`o.ng thang qua P0 , P1 v`a P1 , P2 tu.o.ng u
.ng.
o.ng cong Bezier
Da.ng ma tr
a.n cu a d
u.`
Ch
ung ta co the bieu dien du.`o.ng cong Bezier o. da.ng ma tra.n (xem [8], [9]) rat thua.n tie.n
khi xu. l
y du.`o.ng cong tren may tnh.
- a.t BL (t) := (B0L (t), B1L (t), . . . , BLL (t))t l`a vector co.t trong RL+1 , v`a P := (P0 , P1 , . . . , PL )t
D
l`a ma tra.n cap (L + 1) 2. Khi do ta co the viet
P (t) = [BL (t)]t P.
Ma.t khac, theo di.nh ngha, cac da th
u.c Bernstein co the viet o. da.ng tch vo hu.o.ng. Chang
ha.n
B23 (t) = 3(1 t)t2 = h(t0 , t1 , t2 , t3 )t , (0, 0, 3, 3)t i.
Ngo`ai ra, moi da th
u.c BkL (t) co c`
ung mo.t vector co. so. l
uy th`
u.a P owL (t) := (t0 , t1 , . . . , tL )t .
uy th`
u.a vo.i ma tra.n Bez L nha.n
V` va.y, mang BL (t) co the viet da.ng tch cua vector co. so. l
du.o..c t`
u. cac vector n`ao do (doi mo.t khac nhau) tu.o.ng u
.ng BkL (t). Vo.i L = 3 ta co
B3 (t) = (t0 , t1 , t2 , t3 )Bez 3 ,
trong do

3
3

Bez 3 =
3 6
1

0 0

0 0

.
3 0

3 3 1

Tong quat ta co the viet


P (t) = [P owL (t)]t Bez L P,
58

(2.3)

`an tu. h`ang i co.t j xac d.inh bo.i


trong do Bez L l`a ma tra.n cap (L + 1) (L + 1) vo.i ph
ji

mij := (1)


n
i
i

Nha.n xet ra` ng, khi ta muon thiet ke du.`o.ng cong vo.i cac da th
u.c khac da th
u.c
Bernstein, ta c
ung nha.n du.o..c c`
ung mo.t bieu dien (2.3) (xem [8], [9]).

2.3.1

- i
`eu khi
D
en d
i.a phu.o.ng

- u.`o.ng cong Bezier l`a mo.t cong cu. h


u.u ch trong thiet ke cac du.`o.ng cong. Ba` ng cach da. t
D
`eu khien trong ma.t phang, tha.m ch trong khong gian, ta co cac du.`o.ng cong
cac diem di
`eu khien vi. tr cua ch
tro.n. Ngu.`o.i su. du.ng quan sat du.`o.ng cong du.o..c sinh ra v`a di
ung de
co mo.t dang die.u thch ho..p ho.n. Su.. tu.o.ng tac n`ay tiep tu.c cho den khi to`an bo. du.`o.ng
cong thoa man mu.c dch thiet ke.
`eu khien mo.t cach to`an cu.c; ngha l`a khi
Nha.n xet r`a ng du.`o.ng cong Bezier du.o..c di
`eu khien th` to`an bo. du.`o.ng cong bi. thay doi theo. Khang d.inh du.o..c
thay doi mo.t diem di
suy t`
u. d.inh ngha cua cac da th
u.c Bernstein. Tha.t va.y, cac da th
u.c n`ay l`a tch cu..c (khac
`eu
khong) tren to`an doa.n [0, 1]. Ma.t khac, du.`o.ng cong Bezier l`a to ho..p cua cac diem di
`eu khien co anh hu.o.ng tren
khien du.o..c tro.n vo.i cac h`am Bernstein. Do va.y, moi diem di
to`an bo. du.`o.ng cong.
`eu khien mo.t cach d.ia phu.o.ng. Nhu. trong H`nh 2.4(a), mo.t
Trong thu..c te, ta muon di
`au, trong khi ph
`an khac c
`an phai chnh
so doa.n cong cua du.`o.ng cong Bezier ph`
u ho..p yeu c
- u.`o.ng cong Bezier n`ay du..a tren nam diem di
`eu khien; ph
`an li
`en net g
`an gia tri.
su.a la.i. D
`au, nhu.ng doa.n g
`an t = 1 th` khong. Ngu.`o.i su. du.ng muon di chuyen
t = 0 tr`
ung vo.i yeu c
`eu khien P2 v`a P3 de di
`eu khien doa.n cong n`ay cho ph`
hai diem di
u ho..p. Nhu.ng, nhu. ch
`eu n`ay l`am anh hu.o.ng den nu.a d`au cua du.`o.ng cong.
ra trong H`nh 2.4(b), di
u.ng anh hu.o.ng
Tnh chat thay doi to`an cu.c t thch ho..p trong thu..c te. V` va.y de co nh
`eu khien ta xet ta.p cac h`am tro.n
d.ia phu.o.ng tren du.`o.ng cong khi thay doi cac diem di
khac. V du. cac h`am tro.n R0 (t), R1 (t), . . . , R5 (t) trong H`nh 2.5(a). Moi h`am tro.n co gia1
ch
u.a trong doa.n [0, 1]. Chang ha.n, suppR0 = [0, 0.3] v`a suppR3 = [0.3, 1.0]. Ta.i th`o.i diem t
1

Gia cua h`am f : Rn R, k


y hie.u suppf, l`a bao dong cua ta.p {x Rn | f (x) 6= 0}. Theo d.inh ngha,
`a ng khong ngo`ai ta.p suppf.
h`am f b

59

(a)

P1

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

Mong muon \Hien tai


. .
\

P2
P3

P0
(b)

P4
......

P1

P4
......

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

\
Mong muon

P0

P2

Hie.n ta.i
\

P3

`an cua mo.t du.`o.ng cong.


H`nh 2.4: Su.a cac ph
bat k`
y khong co ho.n ba h`am tro.n tch cu..c. Xet du.`o.ng cong tu.o.ng u
.ng cac h`am tro.n n`ay:
P (t) :=

5
X

Pk Rk (t).

(2.4)

k=0

`eu khien (qua cac diem d`au v`a


H`nh 2.5(b) minh ho.a du.`o.ng cong tu.o.ng u
.ng cac diem di
`eu nhat ba diem
cuoi. Ta.i sao?). Vo.i moi t [0, 1] vi. tr cua P (t) ch phu. thuo.c v`ao nhi
- a.c bie.t, vo.i mo.i t [0.7, 1] ch co ba diem P3 , P4 , P5 di
`eu khien. D
`eu khien h`nh da.ng cua
di
`an cua du.`o.ng cong bi. thay
du.`o.ng cong. Neu ta di chuyen diem P4 den P40 th` ch co mo.t ph
`eu khien d.ia phu.o.ng du.`o.ng cong.
doi. Noi cach khac, cac h`am tro.n n`ay cho ta di
`an t`m mo.t lo.p cac h`am tro.n m`a van gi
Do do ta c
u. la.i nh
u.ng tnh chat tot cua da
`eu
th
u.c Bernstein v`a cac h`am n`ay co gia ch
u.a thu..c su.. trong doa.n [0, 1] de ngu.`o.i thiet ke di
khien d.ia phu.o.ng du.`o.ng cong. Ch
ung ta se thay r`a ng lo.p h`am B-spline v`a du.`o.ng cong xac
`au n`ay.
d.inh bo.i no thoa tat ca nh
u.ng yeu c

2.4

- a th
D
u.c t`
u.ng kh
uc v`
a c
ac h`
am spline

H`am tro.n m`a ch


ung ta t`m de xay du..ng cac du.`o.ng cong co the xem nhu. mo.t ho. cac da
`e nhau v`a du.o..c dan la.i de ta.o th`anh mo.t du.`o.ng cong lien
th
u.c xac di.nh tren cac doa.n k
tu.c. Nh
u.ng du.`o.ng cong n`ay go.i l`a du.`o.ng cong da th
u.c t`
u.ng kh
uc.
60

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

R0 (t)
/
R1 (t)
|

(a)

R2 (t)
|

.3

R3 (t)
|

.5

R5 (t)
\
R4 (t)
|

.7

1
P4

P40

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

P1

(b)

P3

P0

P5

P2

H`nh 2.5: Cac h`am tro.n co gia ch


u.a trong doa.n [0, 1].

61

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

g(t)

3
4
1
2

b(t)
|

Cho noi
/

a(t)
\

c(t)
/

Knot
/

|......................................................... Gia ........................................................|.


`an cua da th
H`nh 2.6: Cac th`anh ph
u.c t`
u.ng kh
uc.
- e giai thch mo.t so thua.t ng
D
u. xet d`o thi. h`am g(t) trong H`nh 2.6. Ta thay ra` ng, g(t)
`om ba th`anh ph
`an tu.o.ng u
g
.ng cac da th
u.c
a(t) =
b(t) =
c(t) =

1 2
t,
2

2
3
t 32
4
1
(3 t)2 .
2

Gia cua g(t) l`a doa.n [0, 3]; cua a(t), b(t) v`a c(t) l`a cac doa.n [0, 1], [1, 2] v`a [2, 3] tu.o.ng u
.ng.
Cac diem ta.i cho noi hai du.`o.ng cong go.i l`a diem noi v`a cac gia tri. t ta.i cac th`o.i diem tu.o.ng
u
.ng cho noi go.i l`a cac knot. Co bon knot trong v du. n`ay: 0, 1, 2 v`a 3.
Tnh toan tru..c tiep ta co a(1) = b(1) = 12 , b(2) = c(2) = 12 v`a a0 (1) = b0 (1) = 1, b0 (2) =
c0 (2) = 1. Ma.t khac cac h`am a(t), b(t) v`a c(t) l`a cac da th
u.c nen da th
u.c t`
u.ng kh
uc g(t)
kha vi lien tu.c tren to`an doa.n [0, 3]. Tuy nhien, da.o h`am cap hai g 00 t) khong lien tu.c ta.i cac
knot.
- u.`o.ng cong g(t) cho ta v du. minh ho.a h`am spline, mo.t da th
D
u.c t`
u.ng kh
uc v`a kha vi
.
.
- a.c bie.t, ta co
`an thiet. D
lien tu.c vo i m
u c c
- i.nh ngha 2.4.1 D
- a th
D
u.c t`
u.ng kh
uc ba.c M v`a kha vi lien tu.c cap M 1 ta.i cac knot go.i
l`a h`am spline ba.c M.
u.ng kh
uc ba.c 2 v`a
Hien nhien, g(t) trong v du. tren l`a mo.t spline ba.c hai: no l`a da th
u.c t`
.
co da.o h`am ba.c mo.t lien tu.c khap no i.
62

2.4.1

Su. du.ng c
ac h`
am spline nhu. c
ac h`
am tr
o.n

`eu khien P0 , P1 , . . . , P4 (H`nh 2.7(a)):


Xet du.`o.ng cong P (t) du..a tren da giac di
P (t) :=

4
X

Pk gk (t),

(2.5)

k=0

trong do gk (t) := g(t k), k = 0, 1, 2, 3, 4, (H`nh 2.7(b)).


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

P0

(a)

P1

P2

@t = 1
P4

(b)
3
4
1
2

P3

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

g0 (t) g1 (t) g2 (t) g3 (t) g4 (t)


|
/ /
\ \

u. cac ti.nh tien cua g(t).


H`nh 2.7: Xay du..ng du.`o.ng cong t`
Vo.i t = 0 tat ca cac h`am b`a ng khong nen P (0) = 0. Ta.i t = 1, g0 (t) ba` ng 12 do do
P (1) = 0.5P0 . Khi t vu.o..t qua 1, g1 (t) tang len, bo.i va.y du.`o.ng cong P (t) phu. thuo.c v`ao ca
hai P0 v`a P1 . Tha.t va.y, ta.i t = 2 ca hai h`am tro.n n`ay co gia tri. b`a ng 21 nen P (2) l`a trung
`eu h`am tro.n se tham gia v`a co anh hu.o.ng den
diem cua doa.n P0 P1 . Khi t tiep tu.c tang, nhi
`eu khien n`ay den diem khac. Ta.i moi knot, du.`o.ng
du.`o.ng cong khi di qua t`
u. diem di
`eu khien tch cu..c. Cuoi
cong di qua trung diem cua doa.n thang xac d.inh bo.i hai diem di
c`
ung, khi t tien den 7, ch co h`am g4 (t) l`a tch cu..c v`a do do du.`o.ng cong quay tro. la.i goc.
63

T
ong qu
at
`an tru.o.c cho nhi
`eu diem di
`eu khien. Gia su. ta da.t k
Ch
ung ta de d`ang mo. ro.ng ket qua ph
`eu khien de xay du..ng du.`o.ng cong:
thay doi t`
u. 0 den L v`a ngu.`o.i thiet ke da.t L + 1 diem di
P (t) :=

L
X

Pk gk (t),

t [0, L + 3].

k=0

`an xay du..ng cac h`am tro.n sao cho du.`o.ng


trong do gk (t) := g(t k), k = 0, 1, . . . , L. Ta c
`an thiet.
cong thu du.o..c co nh
u.ng tnh chat c
- `au tien, du.`o.ng cong c
`an kha vi lien tu.c, nen cac h`am tro.n g(t k) phai thuo.c lo.p
D
`eu khien d.ia phu.o.ng, do do cac h`am
C 1 . Ho.n n
u.a, ngu.`o.i thiet ke muon du.`o.ng cong du.o..c di
tro.n phai co gia tren moi doa.n do. d`ai 3. Mo.t van d`e l`a dang die.u du.`o.ng cong ta.i cac d`au
m
ut cua doa.n [0, L + 3]. Khong nh
u.ng du.`o.ng cong khong di qua cac diem P0 v`a PL m`a c`on
`e goc to.a do. . Khi t g
`an hai gia tri. d`au m
tien thang v
ut, co t ho.n ba h`am tro.n l`a tch cu..c
(khac khong). Chang ha.n, ta.i t = 2 co ba h`am tro.n, nhu.ng khi t < 2 co t ho.n.
Ngu.`o.i thiet ke co the kiem soat du.o..c tnh chat n`ay b`a ng cach ha.n che khoang tham
so t. T
u.c l`a, cho gia tri. t thay doi trong doa.n [2, L + 1]. Khi do ch co ba h`am tro.n l`a tch
- u.`o.ng cong trong H`nh 2.7(a)
`eu khien bo.i nh
u.ng diem lan ca.n. D
cu..c v`a du.`o.ng cong du.o..c di
`eu khien bo.i bo. ba n`ao do vo.i moi t trong doa.n [2, 5]. Ho.n n
du.o..c di
u.a, ngu.`o.i thiet ke biet
r`a ng du.`o.ng cong bat d`au ta.i diem gi
u.a doa.n P0 P1 ta.i t = 2 v`a ket th
uc ta.i diem gi
u.a doa.n
PL1 PL . V` va.y, du.`o.ng cong ch du.o..c sinh ra trong doa.n n`ay.
`an 2.4.2 phu.o.ng
Cach tiep ca.n n`ay l`a thoa dang, nhu.ng ch
ung ta se mo. ro.ng trong Ph
u.a hai knot co do. d`ai thay doi. V` va.y du.`o.ng
phap tong quat ho.n cho phep khoang cach gi
`eu khien d`au v`a cuoi nhu. mong muon v`a cho cach th
`eu
u.c di
cong se no.i suy cac diem di
khien du.`o.ng cong tot ho.n.

- u.`
D
o.ng cong d

ong
- i
`eu n`ay co the thu..c hie.n de d`ang.
Trong thu..c te ta thu.`o.ng muon du.`o.ng cong dong. D
`eu khien P0 , P1 , . . . , P4 nhu. trong H`nh 2.8. Kho.i d`au t`
Tha.t va.y, xet v du. nam diem di
u.
t = 2 du.`o.ng cong n`a m ta.i diem gi
u.a doa.n P0 P1 v`a uon quanh theo h`nh da.ng nhat d.inh
`an them
cho den khi t = 5 no ga.p diem gi
u.a doa.n P3 P4 . Bay gi`o. de du.`o.ng cong dong ta c
`eu khien mo.i P5 v`a P6 tr`
`on ta.i: P5 = P0 v`a P6 = P1 . Do
hai diem di
ung vo.i hai diem da t
.
.
.
do, khi t tang den gia tri. 6 du `o ng cong den diem gi
u a doa.n P4 P5 v`a du.`o.ng cong dong ta.i
64

P0 , P5

P1 , P6

@t = 2

@t = 7

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

@t = 3

@t = 6

P2

@t = 4

P4

@t = 5

P3

H`nh 2.8: Cac du.`o.ng cong dong du..a tren cac h`am spline.
`an la.p la.i hai
t = 7. Va.y, de ta.o du.`o.ng cong dong du..a tren cac h`am spline ba.c hai ta ch c
`an cac diem di
`eu khien d`au tien.
l

2.4.2

ac h`
am tr
o.n
X
ay du..ng c

Trong v du. tru.o.c, tat ca cac h`am tro.n co c`


ung h`nh da.ng-ch
ung l`a ti.nh tien cua c`
ung mo.t
h`am. Ngo`ai ra, cac knot nha.n cac gia tri. nguyen. Mo.t ma.t, ch
ung ta muon gi
u. la.i da.ng xac
d.inh du.`o.ng cong theo cac Phu.o.ng tr`nh 2.4 v`a 2.5, nhu.ng ma.t khac c
ung muon tu.. do ho.n
cho ngu.`o.i thiet ke.
Tru.o.c het, ta tong quat hoa day cac knot nha.n gia tri. thu..c thay v` nguyen:
T := (t0 , t1 , t2 , . . .),
trong do ti ti+1 . (Co the co mo.t so knot b`a ng nhau, nhu.ng van vo.i nhan khac nhau). So
`eu khien,
cac knot se du.o..c d`e ca.p sau. Nhu. tru.o.c, ta lien ket mo.t h`am tro.n vo.i moi diem di
`eu khien
nhu.ng bay gi`o. cac h`am tro.n co cac h`nh da.ng khac nhau. Gia su. co L + 1 diem di
`eu khien Pk . Khi do du.`o.ng
P0 , P1 , . . . , PL . K
y hie.u Rk (t) l`a h`am tro.n tu.o.ng u
.ng diem di
cong xac di.nh bo.i
L
X
P (t) :=
Pk Rk (t).
(2.6)
k=0

Nha.n xet ra` ng cac phu.o.ng tr`nh xac d.inh du.`o.ng cong Bezier v`a spline ba.c hai co da.ng n`ay.
65

2.4.3

- u.`
D
o.ng cong spline v`
a c
ac h`
am co. so.

- e co the di
`eu khien h`nh da.ng cac h`am tro.n, ta c
`an ch
D
uy
r`a ng cac h`am lien tu.c Rk (t) l`a
nh
u.ng da th
u.c t`
u.ng kh
uc. Do do, Rk (t) tren moi khoang (ti , ti+1 ] l`a da th
u.c n`ao do. Suy
`eu
ra du.`o.ng cong P (t) l`a tong cua cac da th
u.c t`
u.ng kh
uc vo.i tro.ng lu.o..ng l`a cac diem di
`an co da.ng
khien. Chang ha.n, trong khoang n`ao do, du.`o.ng cong c
P (t) = P0 (3t2 4t + 2) + P1 (8t2 7.3t 5.9) + .
`e, no du.o..c cho bo.i mo.t tong theo cac da th
u.c khac, nhu.ng ta biet r`a ng
Trong khoang k
tat ca cac doa.n cong ta.o th`anh mo.t du.`o.ng cong lien tu.c. Mo.t du.`o.ng cong nhu. va.y go.i l`a
du.`o.ng cong spline2 (xem [7]).
`on ta.i mo.t ho. cac h`am tro.n du.o..c
Van d`e da. t ra o. day l`a cho tru.o.c ta.p cac knot T, co t
su. du.ng de ta.o ra mo.i du.`o.ng cong spline co the co du.o..c d.inh ngha tren cac knot n`ay? Ho.
cac h`am nhu. va.y du.o..c go.i l`a mo.t co. so. doi vo.i cac spline theo ngha bat k`
y mo.t du.`o.ng
`eu khien
cong spline n`ao d`eu co the bieu dien o. tong da.ng (2.6) vo.i vie.c cho.n cac diem di
thch ho..p.
`eu ho. nhu. va.y, nhu.ng ch co mo.t ta.p co. so. co tnh chat da.c bie.t
Cau tra l`o.i l`a co nhi
`eu khien v
`e ma.t d.ia phu.o.ng tot nhat. Ta.p n`ay
l`a cac h`am tro.n co gia nho nhat v`a do do di
du.o..c go.i l`a ta.p B-spline (B viet tat t`
u. Basic).

2.4.4

C
ac h`
am B-spline co. so.

Ch
ung ta se di.nh ngha cac h`am tro.n Rk (t) sao cho tru..c quan v`a thua.n tie.n khi giao tiep
`eu cach tiep ca.n khac nhau v
`e phat bieu cua cac
vo.i may tnh. Ma.c d`
u t`ai lie.u [7] cho nhi
u.c do.n gian xac d.inh tat ca cac h`am B-spline theo th
u.
B-spline, o. day ta du.a ra cong th
- o l`a quan he. de. qui m`a thu..c hie.n de d`ang ba` ng mo.t chu.o.ng tr`nh. Co mo.t so
tu.. bat k`
y: D
phu.o.ng phap khac cho phep tnh toan hie.u qua ho.n (xem [7]).
Moi h`am B-spline du..a tren cac da th
u.c ba.c m 1 n`ao do. Neu m = 3 cac da th
u.c
ba.c hai v`a do do cac B-spline tu.o.ng u
.ng ba.c hai (du.`o.ng cong ba.c hai). Neu m = 4 cac da
- o l`a hai tru.`o.ng
th
u.c ba.c ba v`a do do cac B-spline tu.o.ng u
.ng ba.c ba (du.`o.ng cong cubic). D
u cong th
u.c cho phep ta xay du..ng B-spline ba.c t`
uy y
.
ho..p quan tro.ng nhat, ma.c d`
`an 2.4 v`a du.`o.ng cong spline. M
Ch
uy
su.. khac nhau gi
u.a mo.t h`am spline d.inh ngha trong Ph
o.t h`am
.
.
.
.
.
.
.
u ng kh
uc vo i do. tro n nhat di.nh. Mo.t du `o ng cong spline l`a su. tro.n cua cac vector su.
spline l`a da th
u c t`
- u.`o.ng cong spline phai lien tu.c ta.i tat ca cac knot nhu.ng co the khong tro.n
du.ng cac h`am tro.n da th
u.c. D
ta.i do.
2

66

- e ch ra h`am B-spline phu. thuo.c v`ao ba.c m, ch


D
ung ta k
y hie.u Nk,m thay cho Rk (t).
.
.
.
.
Do do phu o ng tr`nh du `o ng cong B-spline co the viet la.i:
P (t) :=

L
X

Pk Nk,m (t).

(2.7)

k=0

`an:
Nhu. va.y, de xac d.inh du.`o.ng cong B-spline ta c
vector knot T = (t0 , t1 , . . . , );
`eu khien P0 , P1 , . . . , PL ;
L + 1 diem di
ba.c m cua cac h`am B-spline.
Cong th
u.c xac d.inh h`am B-spline Nk,m du.o.i da.ng de. quy theo de Boor [7]:

t tk
tk+m t
Nk,m (t) =
Nk,m1 (t) +
Nk+1,m1 (t),
tk+m1 tk
tk+m tk+1
vo.i k = 0, 1, . . . , L, v`a

(
Nk,1 (t) =

(2.8)

1 neu tk < t tk+1 ,


0 neu ngu.o..c la.i.

u.a cac knot


V du. 2.4.2 Xet vector knot T = (t0 = 0, t1 = 1, t2 = 2, . . .) co khoang cach gi
l`a 1. Khi do
N0,2 (t) =

t
N (t)
1 0,1

2t
N1,1 (t)
1

neu 0 t 1,

t
=
2 t neu 1 t 2,

0
neu ngu.o..c la.i.
- `o thi. cua h`am N0,2 (t) tren doa.n [0, 2] l`a mo.t tam giac vo.i cac dnh (0, 0), (1, 1) v`a (2, 0)
D
ung tu.o.ng tu... Chang ha.n, d`o thi.
(xem H`nh 2.9). Cach xay du..ng cac h`am B-spline khac c
cua h`am N1,2 (t) l`a tam giac vo.i cac dnh (0, 1), (2, 1) v`a (3, 0); t
u.c l`a ti.nh tien cua d`o thi.
h`am N0,2 (t) sang phai mo.t do.n vi.. Tong quat, de d`ang kiem tra r`a ng Nk,2 (t) = N0,2 (t k).
`eu khien.
Ch
uy
r`a ng, du.`o.ng cong du..a tren cac h`am B-spline Nk,2 (t) chnh l`a da giac di
- i
`eu n`ay c
(D
ung du
ng neu cac knot khong cach d`eu nhau?). V` cac du.`o.ng cong spline tuyen
tnh chnh l`a du.`o.ng gap kh
uc, nen ch
ung t du.o..c su. du.ng de thiet ke. Tuy nhien, ch
ung
nay sinh trong qua tr`nh xay du..ng cac du.`o.ng cong B-spline ba.c cao ho.n.
67

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

N0,1 (t)
/

N0,2 (t)

N1,1 (t)
/

|
1

|
2

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

2t

|
1

|
2

(b)

(a)

- `o thi. cac h`am B-spline tuyen tnh.


H`nh 2.9: D
V du. 2.4.3 Gia su. ta muon xay du..ng cac du.`o.ng cong ba.c hai du..a tren cac h`am B-spline
`an xay du..ng N0,3 v` cac h`am khac
Nk,m ba.c m = 3 vo.i cac knot cach d`eu nhau. Ta ch c
chnh l`a ti.nh tien cua h`am n`ay. T`
u. Phu.o.ng tr`nh (2.8) ta co
N0,3 (t) =

t
N (t)
2 0,2

3t
N1,2 (t)
2

1 2

3 t 3 2
4
2
=
1
2

(3 t)

neu 0 t 1,
neu 1 t 2,
neu 2 t 3,
neu ngu.o..c la.i.

Ch
uy
r`a ng, no phu. thuo.c v`ao bon knot 0, 1, 2, v`a 3 v`a suppN0,3 [0, 3] (xem H`nh 2.10).
`an 2.4. Ta da kiem tra ra` ng N0,3 (t) thuo.c
Ngo`ai ra, N0,3 (t) chnh l`a h`am g(t) trong Ph
lo.p C 1 nhu.ng khong co da.o h`am ba.c hai. Do do du.`o.ng cong B-spline ba.c hai (t nhat vo.i
cac knot d`eu nhau) chnh l`a du.`o.ng cong spline.
- `o thi. cac h`am spline ba.c hai Nk,3 (t) de d`ang nha.n du.o..c khi cac knot d`eu nhau.
D
Tha.t va.y, tong quat ho.n, vo.i gia thiet tk = k, t`
u. Phu.o.ng tr`nh (2.8) de d`ang suy ra
Nk,m (t) = N0,m (t k).

- `o thi.
V du. 2.4.4 Trong thu..c te h`am B-spline ba.c bon (m = 4) thu.`o.ng du.o..c su. du.ng. D
68

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

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

N0,3 (t)

N1,2 (t)

N0,2 (t)

|
1

|
2

|
3

|
1

|
2

|
3

(b)

(a)

- `o thi. h`am B-spline ba.c hai N0,3 (t) du..a tren cac h`am B-spline tuyen tnh.
H`nh 2.10: D
h`am N0,4 (t) du.o..c ch ra trong H`nh 2.11. H`am n`ay doi x
u.ng qua tru.c t = 2 v`a xac di.nh bo.i

u(1 t) neu 0 t < 1,

v(2 t) neu 1 t < 2,


N0,4 (t) =
v(t 2) neu 2 t < 3,

u(t 3) neu 3 t < 4,

0
neu ngu.o..c la.i,
trong do
u(t) =

1
(1 t)3 ,
6
1
(3t3 6t2
6

+ 4)3 .
De d`ang kiem tra r`a ng, cac h`am B-spline ba.c bon thuo.c lo.p C 2 .
v(t) =

Vo.i nh
u.ng v du. tren, ta co the ch ra r`a ng gia cua h`am Nk,m (t) ch
u.a trong doa.n [tk , tk+m ],
t
u.c l`a Nk,m (t) [tk , tk+m ]. Ngo`ai ra Nk,m (t) 0 vo.i mo.i t.
`an de y
C
ra` ng co the mo.t hoa.c ca hai mau so cua Phu.o.ng tr`nh (2.8) ba` ng khong vo.i
`eu do, cac h`am ba.c thap ho.n tu.o.ng u
nh
u.ng knot n`ao do. Nhu.ng khi xay ra di
.ng Nk,m1 (t)
`an tu. co mau so
hoa.c Nk+1,m1 (t) luon luon ba` ng khong. Do do ta co the da.t nh
u.ng ph
khong b`a ng 0.
T`
u. Phu.o.ng tr`nh (2.8) de d`ang suy ra doa.n ma sau:
float N(int k, int m, float t)
69

2
3

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

N0,4 (t)

v(2 t)
\

1
6

v(t 2)
/

u(1 t)

u(t 3)

- `o thi. h`am B-spline ba.c ba vo.i cac knot b`a ng nhau.


H`nh 2.11: D
{
float Denom1, Denom2, Sum;
if (m == 1)
{
if ((t < Knot[k]) || (t >= Knot[k + 1])) return(0.0);
else return(1.0);
}
else
{
Denom1 = Knot[k + m - 1] - Knot[k];
if (Denom1 != 0)
Sum = (t - Knot[k])*N(k, m - 1, t)/Denom1;
else Sum = 0.0;
Denom2 = Knot[k + m] - Knot[k + 1];
if (Denom2 != 0)
Sum += (Knot[k + m] - t)*N(k + 1, m - 1, t)/Denom2;
return(Sum);
}
70

N0,1 (t)
\

N2,1 (t)
\

N3,1 (t) N4,1 (t)


.........
..........
/
..........
.........

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

3 3+

4+

5+

`an nhau.
H`nh 2.12: Di chuyen cac knot la.i g
}

2.4.5

ac knot b
o.i
Su. du.ng c

Tren day ch
ung ta thu.`o.ng su. du.ng cac h`am B-spline vo.i cac knot cach d`eu nhau. Ba` ng
`eu khien du.`o.ng cong tot ho.n.
cach thay doi khoang cach gi
u.a cac knot, ta co the di
`eu g` se xay ra vo.i h`nh da.ng cac h`am tro.n khi hai knot du.o..c
Cau hoi da. t ra l`a di
`an nhau. Chang ha.n, xet vector knot T = (0, 1, 2, 3, 3 + , 4 + , . . .), trong do l`a so
da.t g
u.c t`
u.ng kh
uc trong doa.n [3, 3 + ] bi. nen tren
du.o.ng du be. Khi do mau cua moi da th
mo.t doa.n rat he.p (xem H`nh 2.12). Hien nhien cac h`am tro.n khong phai l`a ti.nh tien cua
nhau. Neu da. t = 0 th` doa.n n`ay se trie.t tieu v`a mo.t knot bo.i hai se xuat hie.n ta.i t = 3.
H`nh 2.13 minh ho.a cac h`am tro.n vo.i mo.t knot bo.i hai. Bay gi`o. hai h`am B-spline (tuyen
tnh) gian doa.n (H`nh 2.13(b)), v`a cac h`am B-spline ba.c hai khong kha vi ta.i t = 3 (H`nh
2.13(c)). Noi chung, du.`o.ng cong lo.p C i se tro. th`anh lo.p C i1 ta.i cac knot co gia tri. bo.i.
u. H`nh 2.13(c),
H`am B-spline ba.c ba thuo.c lo.p C 1 nhu.ng khong C 2 ta.i t = 3. Tuy nhien, t`
ch
uy
ra` ng neu su. du.ng cac h`am B-spline ba.c hai th` du.`o.ng cong se di qua diem P2 v` h`am
N2,3 (t) b`a ng 1 ta.i t = 3 trong khi cac h`am khac ba` ng khong ta.i do. Noi chung, khi t tien
`on ta.i lu..c h
`eu khien
ut ma.nh ho.n den mo.t diem di
den mo.t knot vo.i bo.i lo.n ho.n mo.t th` t
chu da.o (diem n`ao?).
u.ng knot bo.i 3. Cac h`am spline
Tu.o.ng tu.., cac h`am spline ba.c hai se gian doa.n ta.i nh
`eu
cubic khong kha vi ta.i nh
u.ng knot bo.i 3, nhu.ng ch
ung di qua mo.t trong cac diem di
.
.
khien. Do do, ba` ng cach thay doi bo.i ta.i moi knot, ngu `o i thiet ke co the thay doi dang
die.u cua du.`o.ng cong.
`an su.a doi la.i Phu.o.ng tr`nh (2.8) c
Nha.n xet ra` ng, khong c
ung nhu. doa.n ma xac di.nh
71

(a) 1

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

/
/
N2,1 (t) N4,1 (t)

Ba.c = 1

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

(b) 1

Ba.c = 2

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

(c) 1

N0,3 (t)
\

N2,3 (t)
/

N1,3 (t)
|

Ba.c = 3

- `o thi. cac h`am B-spline trong lan ca.n knot bo.i hai.
H`nh 2.13: D

72

h`am Nk,m (t) trong tru.`o.ng ho..p co knot bo.i (ta.i sao?).

2.4.6

Vector knot chu


an

Vie.c cho.n ra mo.t ta.p cac knot da. c bie.t l`a mo.t chuan khi thiet ke du.`o.ng cong. Vo.i cach
`eu khien d`au v`a cuoi, v`a v` va.y cho phep ngu.`o.i
cho.n n`ay, du.`o.ng cong di qua cac diem di
thiet ke du.. doan tru.o.c du.`o.ng cong se na` m o. dau.
Vector knot chuan doi vo.i du.`o.ng cong B-spline ba.c m bat d`au v`a ket th
uc ta.i cac
.
knot bo.i m, cac knot khac cach nhau co do. d`ai do n vi.. Ta bat d`au b`a ng v du.. Gia su. co
`eu khien v`a ch
tam diem di
ung ta muon su. du.ng cac h`am B-spline ba.c bon (m = 4). Khi do
vector knot chuan l`a:
T = (0, 0, 0, 0, 1, 2, 3, 4, 5, 5, 5, 5).
Tam h`am tro.n N0,4 (t), N1,4 (t), . . . , N7,4 (t) xac di.nh theo (2.8). Cac h`am N0,4 (t) v`a N7,4 (t)
khong lien tu.c v`a co gia tren doa.n do. d`ai do.n vi.. Hai h`am N3,4 (t) v`a N4,4 (t) co gia tren
doa.n do. d`ai bon do.n vi.. V`a cac h`am c`on la.i co gia tren doa.n do. d`ai hai hoa.c ba do.n vi. v`a
h`nh da.ng cua ch
ung bi. bien da.ng khi t tien den cac knot d`au v`a cuoi. (Xay du..ng cac h`am
`om cac h`am tro.n n`ay!). Nha.n xet ra` ng, du.`o.ng cong du..a tren vector knot v`a cac
da th
u.c g
P1

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

P3

P0

P7

P2

P4
P6

P5
- u.`o.ng cong B-spline du..a tren tam h`am B-spline ba.c ba.
H`nh 2.14: D
`eu khien d`au tien v`a cuoi c`
h`am tro.n n`ay luon luon di qua cac diem di
ung. Chang ha.n, tat
.
.
ca cac h`am tro.n b`a ng khong tr`
u h`am N0,4 (t) b`a ng mo.t ta.i t = 0. Ho n n
u.a, vector tiep x
uc
.
.
.
.
.
.
.
.
.
.
vo i du `o ng cong ta.i P0 tr`
ung vo i phu o ng P0 P1 . Tu o ng tu. vo i diem cuoi c`
ung PL .
`eu khien: di qua diem
H`nh 2.14 l`a v du. minh ho.a du.`o.ng cong du..a tren tam diem di
73

d`au v`a cuoi; hu.o.ng ta.i cac vi. tr n`ay tr`


ung vo.i hu.o.ng cua cac vector P0 P1 v`a PL1 PL . Ch
u
`eu khien tu.. cat.
y
ra` ng du.`o.ng cong B-spline co the tu.. cat, chang ha.n khi da giac di
`eu khien v`a cac h`am B-spline ba.c m du.o..c mo
Vector knot chuan doi vo.i L + 1 diem di
ta nhu. sau:
1. Co tat ca L + m + 1 knot, k
y hie.u l`a t0 , t1 , . . . , tL+m .
2. m knot d`au tien t0 , t1 , . . . , tm1 b`a ng 0 (m h`am tro.n d`au tien bat d`au ta.i t = 0).
3. Cac knot tm , tm+1 , . . . , tL la.p th`anh day do.n die.u tang vo.i do. le.ch gi
u.a hai knot l`a
mo.t, bat d`au t`
u. gia tri. 1 den gia tri. L m + 1. (H`am tro.n cuoi c`
ung NL,m (t) bat d`au
ta.i t = L m + 1 v`a co gia trong doa.n do. d`ai mo.t).
4. m knot cuoi c`
ung tL+1 , tL+2 , . . . , tL+m b`a ng L m + 2.
T`
u. nguyen tac n`ay, ch
ung ta de d`ang xay du..ng thu tu.c ta.o vector knot chuan nhu. sau:
void Build_Knots(int m, int NumVertices, float *Knot[MaxKnots])
{
int i;
if ((NumVertices < m - 1) || (m + NumVertices > MaxKnots))
{
printf("Thong bao loi");
return;
}
else
{
for (i = 0; i <= m - 1; i++) Knot[i] = 0.0;
for (; i <= NumVertices; i++) Knot[i] = i - m + 1;
for (; i <= NumVertices + m; i++) Knot[i] = NumVertices - m + 2;
}
}
- oi vo.i m da cho, c
`an phai co
`eu kie.n loi du..a tren cac gia tri. m v`a L. D
Ch
uy
ra` ng di
`eu khien: m L + 1.
du so diem de di
74

Nh
a.n x
et 2.4.5 Lo.p du.`o.ng cong B-spline ch
u.a lo.p du.`o.ng cong Bezier. Tha.t va.y vo.i
vector knot chuan, cac h`am B-spline ba.c m = L + 1 xac d.inh trong (2.8) chnh l`a cac da
- e ch
(t) = B L (t), vo.i k = 0, 1, . . . , L. D
u.ng minh, hay quan sat vector
th
u.c Bernstein: N
k,L+1

knot chuan khi tang m cho den khi b`a ng L + 1 : m knot d`au tien b`a ng 0; m knot cuoi
b`a ng 1; v`a t thay doi trong doa.n [0, 1]. Chang ha.n, neu L = 5 v`a m = 6 ta nha.n du.o..c
T = (0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1). Do do tat ca cac da th
u.c t`
u.ng kh
uc co c`
ung ba.c m = L + 1
.
.
v`a c`
ung co gia l`a doa.n [0, 1]. Thu. c te ta co the suy ra cac da th
u c Bernstein t`
u. Phu.o.ng
tr`nh (2.8).
Nhac la.i r`a ng nguyen nhan chnh chuyen t`
u. cac du.`o.ng cong Bezier sang du.`o.ng cong
`eu khien di.a phu.o.ng tren h`nh da.ng du.`o.ng cong. Khi ba.c
B-spline l`a ta muon nha.n du.o..c di
cua cac da th
u.c B-spline tang len mo.t, gia cua moi h`am tro.n B-spline mo. ro.ng them mo.t
`eu khien d.ia phu.o.ng. Khi m da.t den ca.n tren L + 1, tru.`o.ng
doa.n v`a do do giam m
u.c do. di
`eu khien d.ia phu.o.ng l`a nho nhat.
ho..p du.`o.ng cong Bezier, m
u.c do. di

2.5

o.ng cong B-spline


C
ac tnh ch
at cu a d
u.`

`an n`ay tr`nh b`ay nh


Ph
u.ng tnh chat chnh cua cac du.`o.ng cong B-spline. Ta c
ung se thay
`eu tnh chat cua du.`o.ng cong Bezier c
r`a ng nhi
ung du
ng trong tru.`o.ng ho..p du.`o.ng cong
B-spline.
u.c t`
1. Cac h`am B-spline ba.c m l`a cac da th
u.ng kh
uc ba.c m. Ch
ung l`a nh
u.ng h`am spline
ung ba.c du.o..c xac
v` thuo.c lo.p C m2 . Cac h`am n`ay l`a co. so. cho mo.i h`am spline khac c`
d.inh tren c`
ung mo.t ta.p knot; t
u.c l`a mo.i h`am spline d`eu l`a to ho..p tuyen tnh cua cac
h`am B-spline. Trong tat ca cac lo.p spline co. so., cac h`am B-spline co do.ng nhat:
ch
ung co gia nho nhat.
2. Cac h`am B-spline Nk,m (t) co gia ch
u.a trong doa.n [tk , tk+m ]. Gia cua ho. cac h`am Bspline Nk,m (t) vo.i k = 0, 1, . . . , L, ch
u.a trong doa.n [t0 , tm+L ].
- u.`o.ng cong B-spline dong du..a tren L + 1 diem di
`eu khien co da.ng (gia thiet cac knot
3. D
cach d`eu nhau):
L
X
P (t) =
Pk N0,m [(t k) mod (L + 1)].
(2.9)
k=0

`eu khien
4. Neu su. du.ng vector knot chuan th` du.`o.ng cong B-spline se di qua cac diem di
.
.
.
`eu khien d`au v`a
d`au v`a cuoi. Cac vector tiep tuyen vo i du `o ng cong ta.i cac diem di
75

`eu khien ta.i cac diem


cuoi co phu.o.ng tr`
ung vo.i phu.o.ng cua cac ca.nh cua da giac di
.
.
.
ng.
tu o ng u
5. Moi h`am B-spline Nk,m (t) khong am vo.i mo.i t R v`a co tong ba` ng 1:
L
X

Nk,m (t) = 1

k=0

vo.i mo.i t [t0 , tm+L ]. Co the ch


u.ng minh khang d.inh n`ay theo quy na.p t`
u. Phu.o.ng
tr`nh (2.8).
6. Cac du.`o.ng cong du..a tren cac h`am B-spline l`a bat bien affine. V` va.y de bien doi
`an thu..c hie.n bien doi tren cac diem di
`eu khien v`a sau
du.`o.ng cong B-spline, ta ch c
`eu khien mo.i. Ch
do xay du..ng la.i du.`o.ng cong B-spline du..a v`ao cac diem di
u.ng minh
(tu.o.ng tu.. nhu. trong tru.`o.ng ho..p du.`o.ng cong Bezier) du.o..c suy t`
u. Tnh chat 5.
`oi cua cac diem di
`eu
7. C
ung theo Tnh chat 5, du.`o.ng cong B-spline na` m trong bao l
`eu nhat m h`am B-spline l`a tch cu..c (t
khien. Ho.n n
u.a, vo.i mo.i t ch co nhi
u.c khac
`oi cua nhi
`eu nhat m diem di
`eu
khong). Do do vo.i moi t, du.`o.ng cong n`a m trong bao l
`oi n`ay to.i mo.t bao l
`oi khac cua
khien tch cu..c lien tiep. Khi t tang, P (t) se di t`
u. bao l
`eu khien ke tiep v`a tu.o.ng u
cac diem di
.ng se co mo.t h`am B-spline ba.t len tch cu..c v`a
mo.t h`am B-spline bi. tat di. Va.y th` ta.i nh
u.ng gia tri. t n`ao du.`o.ng cong se bang qua
`oi lien tiep?
hai bao l
`oi cua ta.p g
`om m diem lien tiep n`a m trong bao l
`oi cua tat ca cac
Nha.n xet r`a ng bao l
.
.
.
.
.
`eu khien (do m L + 1). V` va.y du `o ng cong du o. c gi
diem di
u la.i trong mo.t v`
ung
nho ho.n so vo.i tru.`o.ng ho..p du.`o.ng cong Bezier. Gia cua cac h`am B-spline co la.i khong
`eu khien d.ia phu.o.ng m`a c`on gi
`e
up ho. nh`n sau sac ho.n v
ch gi
up ngu.`o.i thiet ke di
ban chat cua du.`o.ng cong.
`oi cua
`eu khien lien tiep c`
8. Neu m diem di
ung n`a m tren mo.t du.`o.ng thang th` bao l
`an n`a m tren doa.n
ch
ung se l`a mo.t doa.n thang v`a do do du.`o.ng cong B-spline co ph
thang n`ay.
`eu khien lo.n ho.n so giao diem
9. So giao diem cua du.`o.ng thang bat k`
y vo.i da giac di
cua du.`o.ng thang vo.i du.`o.ng cong B-spline.
`eu khi
Su. du.ng c
ac d
i
em d
i
en b
o.i
`an vo.i mo.t diem di
`eu khien b`a ng cach da. t nhi
`eu
Ch
ung ta co the thiet ke du.`o.ng cong di g
.
`eu khien ta.i c`
diem di
ung mo.t vi. tr, t
u c l`a ta.o ra cac diem bo.i.
76

(b)

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

- iem bo.i ba ta.i D


D

- iem bo.i hai ta.i D


D

- iem do.n ta.i D


D
E

F
- i
`eu khien du.`o.ng cong su. du.ng cac diem bo.i.
H`nh 2.15: D
`eu khien
H`nh 2.15 minh ho.a ba du.`o.ng cong B-spline cubic du..a tren cac diem di
A, B, C, Dn , E, F, v`a G vo.i Dn , n = 1, 2, 3, l`a diem D do.n, bo.i hai v`a bo.i ba tu.o.ng u
.ng.
`eu
Ch
uy
du.`o.ng cong u
.ng vo.i bo.i ba ta.i D di qua diem n`ay. Tong quat, khi mo.t diem di
`eu l
`an th` du.`o.ng cong se di g
`an den diem n`ay; da.c bie.t khi la.p la.i m
khien du.o..c la.p la.i nhi
.
.
.
.
`an th` du `o ng cong se di qua diem du o. c la.p.
l
`eu khien l`a khac vo.i su. du.ng cac knot bo.i ma.c
Ch
uy
r`a ng, su. du.ng la.p la.i cac diem di
d`
u ch
ung co c`
ung anh hu.o.ng. Trong thu..c te, ta thu.`o.ng su. du.ng diem bo.i v` de d`ang tu.o.ng
tac ho.n trong thiet ke.
`eu phu.o.ng phap thiet ke du.`o.ng cong khac.
Ngo`ai cac du.`o.ng cong spline, c`on co nhi
Trong so do, cac du.`o.ng cong spline h
u.u t to ra rat hie.u qua khi ta.o ra cac du.`o.ng cong
`om cac conic (xem [7], [8]).
tong quat bao g

2.6

`
`eu khi
o.ng cong BN
o.i suy c
ac d
i
em d
i
en b
a ng d
u.`
spline

`eu khien. Tuy


Nha.n xet r`a ng, noi chung, du.`o.ng cong B-spline khong di qua cac diem di
.
.
.
.
.
.

`eu khien de da.t du o. c mu.c dch n`ay. Y


nhien, ta co the xu l
y tru o c du. a tren cac diem di
`eu khien mo.i du..a tren ta.p c
tu.o.ng l`a ta.o ra mo.t ta.p cac diem di
u v`a sau do xay du..ng du.`o.ng
cong B-spline tren ta.p d
u. lie.u mo.i.
77

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

y4

y0

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

y2

y5

y3

y1
........................................

`eu khien n`ay.


H`nh 2.16: No.i suy sau diem v`a du.`o.ng cong B-spline tu.o.ng u
.ng cac diem di
u. lie.u
Ch
ung ta tr`nh b`ay phu.o.ng phap thong qua v du.: no.i suy ta.p sau diem d
y0 , y1 , . . . , y5 ta.i cac gia tri. t cach d`eu nhau b`a ng du.`o.ng cong B-spline cubic nhu. trong H`nh
2.16. Ch
ung ta se no.i suy y0 ta.i t = 2, y1 ta.i t = 3, v`a van van.
Tuy nhien, nhu. trong h`nh, tong
y(t) =

5
X

yk Nk,4 (t)

k=0

- e co du.`o.ng cong no.i suy nh


khong di qua cac diem n`ay. D
u.ng diem da cho, ta xet
P (t) =

5
X

ck Nk,4 (t),

k=0

- i
`an t`m. D
`eu kie.n de no.i suy sau diem l`a
trong do c0 , c1 , . . . , c5 l`a nh
u.ng gia tri. n`ao do c
P (2) = y0 , P (3) = y1 , . . . , P (7) = y5 . Suy ra
4c0 + c1 = 6y0 ,
c0 + 4c1 + c2 = 6y1 ,
c1 + 4c2 + c3 = 6y2 ,
=
c4 + 4c5 = 6y5 .
Hay o. da.ng ma tra.n

4 1 0 0 0 0

c0

y0

y

4 1 0 0 0
1
c1


y

c
1 4 1 0 0
2 = 6 2.
y

0 1 4 1 0
3
c3


y4
0 0 1 4 1 c4

0 0 0 0 1 4
78

c5

y5

`an tu. n`a m ngo`ai ba du.`o.ng cheo


Ch
uy
r`a ng ma tra.n co da.ng tam giac cheo: tat ca cac ph
chnh b`a ng khong. Do do de d`ang suy ra

1 g0

g1

g2

g3


0
c1 d1

0 c2 d2
= ,

0
c3 d3

g4 c4 d4

c0

c5

d0

d5

trong do g0 = 1/4, d0 = 6y0 g0 v`a


gi =

1
,
4gi1

di = (6yi di1 )gi ,


vo.i i = 1, 2, . . . , L = 5. T`
u. do ta nha.n du.o..c cL = dL v`a ci = di gi ci+1 vo.i i = L 1, L
2, . . . , 0.
`an thu tu.c
Trong tru.`o.ng ho..p tong quat, de no.i suy cac d
u. lie.u y0 , y1 , . . . , yL ta c
.
.
.
.

u a so cac gia
Adjust() xay du. ng mang c[] du. a tren mang y[]. O day, data l`a kieu mau tin ch
tri. L v`a mang cac gia tri. thu..c.
- e no.i suy cac diem Pi = (xi , yi ) ta thu..c hie.n tien tr`nh tren cho cac th`anh ph
`an x
D
v`a y; t
u.c l`a go.i cac thu tu.c Adjust(x, new x) v`a Adjust(y, new y) de ta.o ra hai mang mo.i
`an t`m l`a
new x[] v`a new y[]. Khi do du.`o.ng cong c
P (t) =

L
X

Wk Nk,4 (t),

k=0

trong do Wk = (new x[k], new y[k]).


Nha.n xet ra` ng so lu.o..ng tnh toan trong phu.o.ng phap no.i suy tren L + 1 diem t le. vo.i
L + 1, du
ng ho.n l`a tang nhanh ho.n toc do. tuyen tnh giong nhu. tru.`o.ng ho..p cac phu.o.ng
phap so khac. Do do de d`ang xu. l
y vo.i ta.p d
u. lie.u lo.n.
`eu cai bien cua phu.o.ng phap n`ay, vo.i mo.t so cho phep ngu.`o.i su. du.ng di
`eu
Co nhi
khien h`nh da.ng du.`o.ng cong. Chang ha.n, ta co the thay doi khoang cach gi
u.a cac knot,
`eu
hoa.c them cac diem dieu khien. Co the ta.o cac du.`o.ng cong dong di qua cac diem di
khien. Co the no.i suy su. du.ng cac h`am ba.c hai B-spline hay ba.c cao ho.n. Ba.n do.c quan
tam co the xem, chang ha.n [7], [1].
79

2.7

Thi
et k
e c
ac m
a.t Bezier v`
a B-spline

`an n`ay du..a tren cac h`am tro.n Bezier v`a B-spline nha` m xay du..ng v`a ve cac ma.t tham so
Ph
P (u, v) = (x(u, v), y(u, v), z(u, v))
trong do cac tham so u v`a v thay doi trong doa.n n`ao do.
Cac ma.t du.o..c xay du..ng o. day xac di.nh bo.i cac h`am tro.n c`
ung vo.i mo.t ta.p cac diem
`eu khien. Chang ha.n, ma.t song tuyen tnh (S) :
di
P (u, v) = (1 v)[(1 u)P00 + uP10 ] + v[(1 u)P01 + uP11 ]
l`a su.. ket ho..p bo.i bon goc P00 , P10 , P01 v`a P11 . Ta noi (S) l`a ma.t du.`o.ng ke v` vo.i moi u
.ng go.i l`a
hoa.c v co d.inh, P (u, v) l`a h`am tuyen tnh theo bien c`on la.i (du.`o.ng cong tu.o.ng u
uchu tuyen v`a vchu tuyen).

2.7.1

Patch Bezier

Xet Phu.o.ng tr`nh (2.1) xac di.nh du.`o.ng cong Bezier theo tham so v
P (u, v) =

L
X

Pk (u)BkL (v),

(2.10)

k=0

`eu khien phu. thuo.c v`ao tham so u. T


trong do L + 1 diem di
u.c l`a vo.i moi u co d.inh, Phu.o.ng
`eu khien Pk (u)
tr`nh (2.10) xac d.inh mo.t du.`o.ng cong Bezier. Khi u thay doi, moi diem di
di chuyen ta.o th`anh mo.t du.`o.ng cong n`ao do. Ma.t co the xem nhu. su.. di.ch chuyen cua mo.t
du.`o.ng cong Bezier trong khong gian.
H`nh 2.17 minh ho.a phep chieu phoi canh cua mo.t ma.t du.o..c xay du..ng t`
u. no.i suy
`eu khien P0 v`a P1 . Moi
tuyen tnh gi
u.a hai du.`o.ng cong Bezier du..a tren hai da giac diem di
`eu khien Pk (u) no.i suy tuyen tnh gi
`eu khien Pk0 v`a Pk1 khi
du.`o.ng cong di
u.a hai diem di
u thay doi trong doa.n [0, 1] :
Pk (u) = (1 u)Pk0 + uPk1 ,

k = 0, 1, 2, 3.

De thay day l`a ma.t du.`o.ng ke, t


u.c l`a vchu tuyen l`a mo.t doa.n thang. Tong quat hoa ta co
mo.t h`nh da.ng Bezier tu`
yy
theo mo.t ta.p cac chu tuyen. Cac uchu tuyen v`a vchu tuyen
sinh ra h`nh da.ng cua ma.t.
80

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

(P1 )

(P0 )

H`nh 2.17: No.i suy ma.t du..a tren cac du.`o.ng cong Bezier.
- e thiet ke tu.. do ho.n, ta gia thiet cac du.`o.ng cong di
`eu khien Pk (u) l`a cac du.`o.ng
D
`eu khien:
cong Bezier tu.o.ng u
.ng ta.p M + 1 diem di
Pk (u) =

M
X

Pi,k BiM (u).

i=0

Khi do Phu.o.ng tr`nh (2.10) co the viet la.i


P (u, v) =

M X
L
X

Pi,k BiM (u)BkL (v),

(2.11)

i=0 k=0

`en xac di.nh, ta.p cac diem P (u, v) ta.o th`anh


vo.i u, v [0, 1]. Khi u v`a v thay doi trong mi
mo.t ma.t go.i l`a patch Bezier.
`eu khien Pi,k ta.o th`anh mo.t ma.ng g
`om (M + 1) (L + 1) dnh go.i l`a
Ta.p cac diem di
- e ta.o ra mo.t patch Bezier, ngu.`o.i thiet ke ch c
`eu khien. D
`an da. c ta vi. tr cua cac
da die.n di
.
.
dnh n`ay v`a sau do ap du.ng Phu o ng tr`nh (2.11).

2.7.2

D
an c
ac patch Bezier

`an mo h`nh hoa mo.t doi tu.o..ng ph


Trong thu..c te ta c
u.c ta.p du..a tren mo.t so cac patch Bezier
`an da.t mo.t v`ai di
`eu
sao cho cho noi cac patch du tro.n theo du.`o.ng bien chung. Khi do c
`eu khien.
kie.n tren cac da die.n di
Tru.o.c het nha.n xet r`a ng hai patch ga.p nhau ta.i tat ca cac diem do.c theo du.`o.ng bien
- i
`eu n`ay suy t`
chung neu cac da die.n cua ch
ung tr`
ung nhau theo du.`o.ng bien. D
u. h`nh da.ng
`eu khien bien cua da die.n. Do
cua du.`o.ng cong bien Bezier ch phu. thuo.c v`ao da giac di
.
.
`an cho.n cac da giac di
`eu khien bien tu.o.ng u
do ngu `o i thiet ke ch c
.ng hai patch tr`
ung nhau.
- i
`eu kie.n tro.n ta.i cho noi tu.o.ng u
.ng cac khong gian tiep x
uc vo.i hai patch lien tu.c
D
`an su. du.ng tnh lien tu.c cua cac phap vector ta.i cho noi gi
ta.i do v`a do do c
u.a hai patch.
81

`eu kie.n du (xem [8]) l`a: moi ca.p cua cac ca.nh da die.n chung nhau theo bien c
`an phu.
Mo.t di
.
.
.
- i
`eu n`ay gay kho khan cho ngu `o i thiet ke. V
`e nh
`eu kie.n khac,
thuo.c tuyen tnh. D
u ng di
xem them [8].

2.7.3

Patch spline

`eu khien d.ia phu.o.ng tot ho.n ta xet


Tu.o.ng tu.. nhu. cach xac di.nh ma.t Bezier, de co the di
cac ma.t spline xac d.inh bo.i phu.o.ng tr`nh
P (u, v) =

M X
L
X

Pi,k Ni,m (u)Nk,n (v).

(2.12)

i=0 k=0

Thong thu.`o.ng, vector knot chuan du.o..c cho.n cho ca hai da.ng B-spline sao cho cac goc
- e ta.o cac ma.t dong (theo u hay v) ta c
`eu khien du.o..c no.i suy thch ho..p. D
`an
cua da die.n di
-a
`an ho`an trong Phu.o.ng tr`nh (2.9). D
`eu khien hoa.c xay du..ng o. da.ng tu
la.p la.i cac diem di
`eu khien g
`om (M + 1) (L + 1) diem, u v`a v thay doi t`
die.n di
u. 0 den gia tri. knot cu..c da.i
trong cac vector knot tu.o.ng u
.ng cua ch
ung. Ta thu.`o.ng d`
ung cac B-spline ba.c bon do ba.c
`eu khien, khoi lu.o..ng tnh toan t v`a tnh da
cua no khong phu. thuo.c v`ao so lu.o..ng diem di
da.ng cua nh
u.ng du.`o.ng cong m`a no ta.o ra.
`eu phu.o.ng phap thiet ke du.`o.ng cong v`a
Ngo`ai nh
u.ng cach d`e ca.p o. day, c`on co nhi
ma.t cong khac. Ba.n do.c quan tam, xem them cac t`ai lie.u [1], [7], [8].

82

Chu.o.ng 3
Giao cua c
ac d

oi tu.o..ng
3.1

`au
Mo. d

`an giao
Mo.t trong nh
u.ng b`ai toan quan tro.ng cua d`o ho.a may tnh l`a xac di.nh du.o..c ph
(c`on go.i l`a cat xen) cac nguyen so.: giao diem cua hai doa.n thang, giao cua du.`o.ng thang
`oi... Van d`e o. day l`a xac di.nh cac doi tu.o..ng co giao nhau
vo.i du.`o.ng tr`on hay da da giac l
khong? Neu co th` t`m giao cua ch
ung.
`an thu..c hie.n nhanh nhat co the du.o..c
Nhu. da d`e ca.p trong Chu.o.ng 1, cac thua.t toan c
.ng du.ng. Ch
ung
de cung cap ngu.`o.i su. du.ng ca.p nha.t nhanh cac ket qua thay doi trong u
ta se ap du.ng cac phu.o.ng phap giai tch de giai quyet cac b`ai toan trong chu.o.ng n`ay.

3.2

Giao cu a hai d
oa.n th
a ng

- ay
Mo.t b`ai toan thong du.ng trong d`o ho.a may tnh l`a xac di.nh giao cua hai doa.n thang. D
`an quyet d.inh cua nh
l`a mo.t ph
u.ng thua.t toan t`m giao (chang ha.n, giao hai da giac) v`a
`eu tien tr`nh khac. Ph
`an n`ay ap du.ng vie.c tham so hoa cua doa.n thang
xuat hie.n trong nhi
de giai quyet b`ai toan sau

B`
ai to
an
Trong ma.t phang cho hai doa.n thang AB v`a CD. Xac d.inh giao diem cua ch
ung neu co.
83

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

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

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

C
A

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

A
s

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

Cs

B
s

D
s

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

H`nh 3.1: Cac tru.`o.ng ho..p vo.i hai doa.n thang.

3.2.1

Ph
an tch

`eu tru.`o.ng ho..p xay ra vo.i hai doa.n thang nhu. trong H`nh 3.1: Ch
Co nhi
ung co the khong
`an len nhau.
giao nhau, co the cat nhau ta.i mo.t diem hoa.c phu lap mo.t ph
Xet cac phu.o.ng tr`nh tham so tu.o.ng u
.ng hai doa.n thang 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
Vie.c su. du.ng cac tham so khac nhau vo.i hai doa.n thang de bieu dien cac diem khac nhau
tren hai doa.n mo.t cach do. c la.p.
K
y hie.u l1 v`a l2 l`a cac du.`o.ng thang di qua A, B v`a C, D tu.o.ng u
.ng. Phu.o.ng phap o.
day tru.o.c het l`a t`m giao diem cua hai du.`o.ng thang l1 v`a l2 (neu co) v`a sau do xac di.nh
giao diem co na` m tren hai doa.n thang hay khong. Trong tru.`o.ng ho..p hai du.`o.ng thang giao
- i
`an xac d.inh cac tham so t0 v`a u0 sao cho P (t0 ) = Q(u0 ). D
`eu kie.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 = d0 ,
84

trong do

v`a

xB xA
d :=
xD xC

yB yA
,
y y

xC xA
d :=
xD xC

yC yA
.
y y

Co hai tru.`o.ng ho..p chnh xay ra tu`


y theo d b`a ng khong hay khong.

d kh
ac kh
ong
0
`on ta.i duy nhat tham so t0 = dd . Neu t0 khong thuo.c doa.n [0, 1] th`
Trong tru.`o.ng ho..p n`ay, t
ket lua.n hai doa.n thang AB v`a CD khong giao nhau; ngu.o..c la.i xac di.nh tham so u0 t`
u.
Phu.o.ng tr`nh (3.1) hoa.c (3.2). Neu u0 thuo.c doa.n [0, 1] th` hai doa.n thang giao nhau v`a
to.a do. diem giao co the xac d.inh bo.i P (t0 ) = Q(u0 ).

`
d b
a ng kh
ong
Neu d = 0 th` hai du.`o.ng thang l1 v`a l2 song song hoa.c tr`
ung nhau. Cac doa.n thang co the
.
- e
`eu n`ay ch co the xay ra khi hai du.`o.ng thang tr`
phu lap len nhau nhu ng di
ung nhau. D
`eu do, ta ch c
`an xac d.inh diem C co n`a m tren du.`o.ng thang l1 di qua hai diem
kiem tra di
A v`a B khong. Ta co C thuo.c l1 neu to.a do. cua no thoa man d00 (xC , yC ) = 0, trong do

x xA
y yA
00
.
d (x, y) :=
xB xA yB yA
Trong tru.`o.ng ho..p ngu.o..c la.i, hai du.`o.ng thang l1 v`a l2 song song v`a khong tr`
ung nhau; suy
ra hai doa.n thang khong giao nhau. Do do tien tr`nh cuoi c`
ung l`a kiem tra hai doa.n thang
co phu lap len nhau khong.
- e thu..c hie.n di
`eu n`ay, ta c
`an xac d.inh hai tham so thu..c tC v`a tD sao cho C = P (tC )
D
`an xet phu.o.ng tr`nh theo x (neu l1
v`a D = P (tD ). V` hai du.`o.ng thang tr`
ung nhau nen ch c
khong song song vo.i tru.c tung; ngu.o..c la.i su. du.ng phu.o.ng tr`nh theo y). De d`ang kiem tra
r`a ng
xC xA
tC =
,
xB xA
v`a
tD =

xD xA
.
xB xA
85

- oa.n thang AB bat d`au v`a ket th


D
uc tu.o.ng u
.ng ta.i t = 0 v`a t = 1 v`a b`a ng cach kiem
tra th
u. tu.. cua bon tham so 0, 1, tC v`a tD ch
ung ta co the xac d.inh du.o..c vi. tr tu.o.ng doi
`on ta.i ph
`an chung gi
u. khi ca hai tham so tC v`a tD c`
ung
cua hai doa.n thang. T
u.a hai doa.n tr`
nho ho.n 0 hoa.c lo.n ho.n 1. Trong tru.`o.ng ho..p co doa.n chung, cac diem d`au cuoi co the de
d`ang xac di.nh t`
u. cac gia 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
Tren co. so. cua nh
u.ng thao lua.n tren ta co the viet la.i thua.t toan chi tiet nhu. sau. D
`om bon diem A, B, C v`a D; d`au ra g
`om giao diem I (neu co) v`a bien Kind nha.n mo.t
v`ao g
`on ta.i diem giao, t
`on ta.i mo.t diem giao I hoa.c
trong ba gia tri. 0, 1 hoa.c 2 tu`
y theo khong t
`an.
hai doa.n phu lap len nhau mo.t ph
1. Kho.i ta.o Kind = 0. Tnh d.
2. Neu d 6= 0 (t
u.c l`a cac doa.n thang khong song song) thu..c hie.n
Tnh t0 . Neu t0 6 [0, 1] th` d`
u.ng, hai doa.n thang khong giao nhau.
u.ng, hai doa.n thang khong giao nhau.
Tnh u0 . Neu u0 6 [0, 1] th` d`
Ngu.o..c la.i, ket lua.n Kind = 1 v`a hai doa.n thang giao nhau ta.i
I = A + t0 (B A) = C + u0 (D C).
3. Ngu.o..c la.i (cac doa.n thang song song) v`a neu diem C n`a m tren du.`o.ng thang AB
Xac di.nh tC v`a tD .
Neu ca hai tC v`a tD c`
ung nho ho.n 0 hoa.c c`
ung lo.n ho.n 1 th` hai doa.n thang
khong giao nhau. Ngu.o..c la.i, da.t Kind = 2; giao hai doa.n thang l`a mo.t doa.n
thang (t`m hai d`au 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 co

xB xA y B y A 6 2
= 0.
=
d =
xD xC y D y C 3 1
- e ket lua.n, thay to.a do.
Suy ra hai du.`o.ng thang AB v`a CD song song hoa.c tr`
ung nhau. D
diem C v`ao phu.o.ng tr`nh d00 (x, y) ta du.o..c

xC xA y C y A 3 4
00
= 18 6= 0.

=
d (xC , yC ) =
xB xA y B y A 6 2
86

Va.y AB CD = .
(b) Gia su. A(1, 3), B(10, 6), C(4, 7) v`a D(13, 1). Ta co

xB xA
d =
xD xC

yB yA 9
3
=
= 81 6= 0.
yD yC 9 6

Suy ra hai du.`o.ng thang AB v`a CD cat nhau ta.i I. T`


u.

xC xA yC yA 3
4
0

= 54,
d =
=
xD xC yD yC 9 6
co t0 =

d0
d

2
3

[0, 1]. Giai u0 theo Phu.o.ng tr`nh (3.1) ta du.o..c


u0 =

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

Va.y hai doa.n thang 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 hieu mo.t so thua.t toan xac d.inh giao cua doa.n thang v`a h`nh
ch
u. nha.t (R) (co cac ca.nh song song vo.i cac tru.c to.a do.). H`nh 3.2 ch ra bon tru.`o.ng ho..p
co the:
Ca hai diem d`au cuoi cua doa.n thang, chang ha.n AB, n`a m ho`an to`an trong h`nh ch
u.
`an giao chnh l`a doa.n thang n`ay.
nha.t. Hien nhien khi do ph
Mo.t trong hai d`au m
ut cua doa.n thang, chang ha.n BC, n`a m trong h`nh ch
u. nha.t.
Ca hai diem d`au cuoi cua doa.n thang, chang ha.n CD, n`a m ngo`ai h`nh ch
u. nha.t nhu.ng
co giao khac trong vo.i h`nh ch
u. nha.t.
`e nu.a ma.t
Ca hai diem d`au cuoi cua doa.n thang (chang ha.n DE) n`a m ho`an to`an v
`an giao
phang ngo`ai xac di.nh bo.i mo.t ca.nh (ben trai) cua h`nh ch
u. nha.t. Ta co ph
b`a ng trong. T`nh huong n`ay thu.`o.ng xay ra khi h`nh ch
u. nha.t du nho v`a do do co
`eu doa.n n`a m ngo`ai h`nh ch
nhi
u. nha.t.
87

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

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

H`nh ch
u. nha.t (R)

H`nh 3.2: Cac doa.n thang v`a h`nh ch


u. nha.t (R).
C

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

ymax

ymin

|
xmin

xmax

H`nh 3.3: Cac tru.`o.ng ho..p chap nha.n hoa.c loa.i bo cua mo.t doa.n thang.
Hay quan sat vi. tr tu.o.ng doi cua doa.n thang v`a h`nh ch
u. nha.t (R), ch
ung ta se thay
- oa.n thang co the n`a m ben
`eu t`nh huong co the xay ra m`a thua.t toan phai xu. l
y. D
co nhi
trai, ben phai, pha du.o.i hay pha tren cua h`nh ch
u. nha.t. Hoa.c no co the cat bat k`
y mo.t
.
`eu
(hay hai) ca.nh h`nh ch
u nha.t, v`a van van. Tom la.i van d`e co ve rac roi v` co the co nhi
`an mo.t cach to ch
kha nang khac nhau co the xay ra. Do do ch
ung ta c
u.c v`a tiep ca.n hie.u
qua giai quyet b`ai toan trong tru.`o.ng ho..p tong quat v`a tnh toan cac diem d`au cuoi mo.i
`an giao. Tnh hie.u qua da. c bie.t quan tro.ng do co the co h`ang tram, tha.m ch h`ang
cua ph
`an loa.i bo ph
`an na` m ngo`ai h`nh ch
ng`an, doa.n thang trong mo.t h`nh v`a moi doa.n c
u. nha.t.
`an n`ay tr`nh b`ay mo.t so thua.t toan t`m giao cua doa.n thang v`a h`nh ch
Ph
u. nha.t.
`am thu.`o.ng (xem H`nh 3.3) co the xay ra:
Tru.o.c het nha.n xet ra` ng co hai tru.`o.ng ho..p t
`am thu.`o.ng d`au tien, go.i l`a chap nha.n, l`a hai diem d`au cuoi doa.n thang
1. Tru.`o.ng ho..p t
88

ch
u.a trong h`nh ch
u. nha.t.
`am thu.`o.ng th
2. Tru.`o.ng ho..p t
u. hai, go.i l`a loa.i bo, ca hai diem d`au cuoi cua doa.n thang
`e nu.a ma.t phang ngo`ai xac di.nh bo.i mo.t ca.nh cua h`nh ch
u. nha.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

Cach tiep ca.n chnh trong tru.`o.ng ho..p A v`a B khong d`ong th`o.i na` m trong (R) l`a kiem tra
doa.n thang AB co giao vo.i cac ca.nh cua h`nh ch
u. nha.t khong; neu co, xac d.inh cac giao
`an giao. Do do du.a v
`e b`ai toan xac d.inh giao cua hai doa.n thang v`a co
diem v`a suy ra ph
`an 3.2. Theo phu.o.ng phap n`ay, ch
`an tnh toan
the ap du.ng nh
u.ng ket qua trong Ph
ung ta c
`eu kha nang; do do khong hie.u qua.
v`a kiem tra nhi

3.3.2

Thu
a.t to
an chia nhi. ph
an

chnh cua thua.t toan n`ay tu.o.ng tu.. thua.t toan t`m nghie.m cua phu.o.ng tr`nh f (x) = 0
Y
tren doa.n [a, b] vo.i f lien tu.c v`a f (a)f (b) < 0 ba` ng phu.o.ng phap chia nhi. phan (bisection):
Xac di.nh cac giao diem (neu co) cua doa.n thang AB v`a h`nh ch
u. nha.t b`a ng phu.o.ng phap
chia nhi. phan.
Thua.t toan tru.o.c het kiem tra hai tru.`o.ng ho..p chap nha.n v`a loa.i bo. Neu khong xay
`an b`a ng nhau v`a loa.i bo nh
`an n`a m ngo`ai h`nh
ra, no chia doa.n thang th`anh hai ph
u.ng ph
`an c`on la.i du.o..c xu. l
y la.p la.i b`a ng cach kiem tra cac Tru.`o.ng ho..p 1 v`a
ch
u. nha.t. Sau do ph
`an) cho den khi ph
`an c`on la.i ho`an to`an n`a m trong h`nh ch
2 v`a tiep tu.c phan chia (neu c
u.
nha.t hoa.c n`a m trong nu.a ma.t phang ngo`ai xac d.inh bo.i mo.t du.`o.ng thang ben trai, ben
phai, ben du.o.i hoa.c ben tren n`ao do.
- e xac d.inh cac diem d`au cuoi khi n`ao na` m ngo`ai hay trong mo.t h`nh ch
D
u. nha.t, ch
ung
.
.
ta da.t mo.t ma nu a ma.t phang cho moi diem. Moi ca.nh cua h`nh ch
u nha.t xac di.nh mo.t
du.`o.ng thang di qua no; du.`o.ng thang n`ay chia ma.t phang th`anh nu.a ma.t phang trong v`a
nu.a ma.t phang ngo`ai nhu. trong H`nh 3.4 doi vo.i ca.nh ben phai: Ta quy u.o.c nu.a ma.t phang
trong tu.o.ng u
.ng ch
u.a h`nh ch
u. nha.t; ngu.o..c la.i l`a nu.a ma.t phang ngo`ai.
Do co bon ca.nh, ta se su. du.ng chuoi bon bit de ma hoa mo.t diem P trong ma.t phang.
K
y hie.u E(P ) l`a ma cua diem P. Moi bit trong t`
u. ma du.o..c da. t b`a ng 1 (TRUE) hoa.c 0
`eu kie.n sau:
(FALSE); bon bit trong t`
u. ma E(P ) tu.o.ng u
.ng cac di
89

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

(R)

Nu.a
ma.t phang
ngo`ai

Nu.a ma.t phang trong

xmax

H`nh 3.4: Cac nu.a ma.t phang du.o..c xac d.inh bo.i ca.nh ben phai.
Bit th
u. nhat da.t b`a ng 1 neu diem P thuo.c nu.a ma.t phang ngo`ai xac di.nh bo.i ca.nh
ben trai;
Bit th
u. hai da. t b`a ng 1 neu diem P thuo.c nu.a ma.t phang ngo`ai xac di.nh bo.i ca.nh
ben phai;
Bit th
u. ba da. t b`a ng 1 neu diem P thuo.c nu.a ma.t phang ngo`ai xac di.nh bo.i ca.nh ben
tren;
u. tu. da. t ba` ng 1 neu diem P thuo.c nu.a ma.t phang ngo`ai xac d.inh bo.i ca.nh ben
Bit th
du.o.i.
Do do cac diem n`a m trong h`nh ch
u. nha.t co ma 0000; cac diem thuo.c v`
ung na` m pha
tren v`a ben trai h`nh ch
u. nha.t du.o..c gan t`
u. ma l`a 1001. Vie.c xay du..ng ma cua mo.t diem
`an l`a bon phep so sanh: Ho`anh do. cua diem du.o..c so sanh vo.i ca.nh ben trai xmin ;
do.n thu
tung do. du.o..c so sanh vo.i ca.nh ben du.o.i ymin ; v.v. Cac du.`o.ng thang di qua cac ca.nh cua
h`nh ch
u. nha.t chia ma.t phang th`anh chn v`
ung. Cac diem trong mo.t v`
ung co c`
ung mo.t ma
.
.
nhu ch ra trong H`nh 3.5. V` do n vi. nho nhat co the do.c, ghi tren may tnh l`a byte, nen
ch
ung ta su. du.ng kieu byte de ma hoa mo.t diem trong do bon bit thap tu.o.ng u
.ng t`
u. ma
cua no v`a bon bit cao du.o..c da. t b`a ng khong. Thu tu.c Encode() thu..c hie.n tien 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. nha.t (R).
H`nh 3.5: Cac t`
u. ma 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
Cac diem A, B du.o..c ma hoa th`anh cac t`
u. ma E(A) v`a E(B). Tren co. so. do ch
.
co the xac d.inh doa.n thang AB n`a m ho`an to`an ben trong h`nh ch
u nha.t hoa.c thuo.c nu.a
ma.t phang ngo`ai n`ao do. Ta co
1. Chap nha.n neu v`a ch neu E(A) = E(B) = 0.
2. Loa.i bo neu v`a ch neu [E(A) AND E(B)] != 0.
Tren co. so. cua nh
u.ng phan tch tren ta co the viet la.i thua.t toan chia nhi. phan nhu.
sau:
1. Neu E(A) = 0 v`a E(B) = 0 ket lua.n AB (R) = AB; thua.t toan d`
u.ng.
2. Neu [E(A) AND E(B)] != 0 ket lua.n AB (R) = ; ket th
uc thua.t toan.
91

3. Neu E(A) = 0 v`a E(B) 6= 0 (t


u.c A (R) v`a B
/ (R)) thu..c hie.n
- a.t C = A, D = B.
D
Trong khi do. d`ai kCDk lo.n ho.n (so du.o.ng nho t`
uy y
)
- a.t M l`a trung diem cua doa.n CD.
D
Neu E(M ) = 0 th` ca.p nha.t C = M ngu.o..c la.i D = M.
Ket lua.n AB (R) = AM ; ket th
uc thua.t toan.
4. Neu E(A) 6= 0 v`a E(B) = 0 (t
u.c A
/ (R) v`a B (R)), hoan doi vai tr`o cua A v`a B;
la.p la.i Bu.o.c 3.
5. Ngu.o..c la.i thu..c hie.n
- a.t C = A, D = B.
D
Trong khi do. d`ai kCDk lo.n ho.n
- a.t M l`a trung diem cua doa.n CD.
D
Neu E(M ) = 0 ap du.ng Bu.o.c 3 cho hai doa.n M C v`a M D. Ket lua.n AB (R) =
CD; ket th
uc thua.t toan.
Neu [E(M ) AND E(C)] != 0 da. t C = M.
Neu [E(M ) AND E(D)] != 0 da.t D = M.
Neu [E(C) AND E(D)] != 0 ket lua.n AB (R) = ; ket th
uc thua.t toan.
y..

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

ymax

M1
3
M2M

ymin

|
xmin

|
xmax

H`nh 3.6: Minh ho.a cua thua.t toan chia nhi. phan.
u. nha.t
V du. 3.3.1 Xet v du. t`m giao cua h`nh ch
R := {(x, y) R2 | 3 x 7, 2 y 5}
92

v`a hai diem A(5, 3) v`a B(10, 5). Ba bu.o.c d`au tien cua thua.t toan chia nhi. phan cho trong
bang sau
k

(5, 3)

(10, 5)

( 15
, 4)
2

0000

0100

0100

(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 la.p d`au tien cua thua.t toan chia nhi. phan vo.i cac diem gi
u.a
.ng l`a M1 , M2 , v`a M3 .
tu.o.ng u
`eu de xac
Nha.n xet ra` ng phu.o.ng phap chia nhi. phan khong hie.u qua do tnh toan nhi
d.inh cac giao diem.

3.3.3

Thu
a.t to
an Cohen-Sutherland

Thua.t toan Cohen-Sutherland thu.`o.ng du.o..c su. du.ng trong cac u


.ng du.ng cat xen do tnh
hie.u qua v`a pho bien cua no. Thua.t toan cung cap mo.t cach tiep ca.n chia de tri. rat hie.u
qua giai b`ai toan xac d.inh giao cua doa.n thang v`a h`nh ch
u. nha.t.
Tu.o.ng tu.. phu.o.ng phap chia nhi. phan, thua.t toan Cohen-Sutherland tru.o.c het kiem
tra Tru.`o.ng ho..p 1 (chap nha.n) v`a 2 (loa.i bo). Neu khong xay ra, no chia doa.n thang th`anh
`an v`a loa.i bo ph
`an na` m ngo`ai h`nh ch
`an c`on la.i du.o..c xu. l
y la.p
hai ph
u. nha.t. Sau do ph
`an) cho den khi
la.i b`a ng cach kiem tra cac Tru.`o.ng ho..p 1 v`a 2 v`a tiep tu.c phan chia (neu c
.
.
`an c`on la.i ho`an to`an na` m trong h`nh ch
ph
u nha.t hoa.c na` m trong nu a ma.t phang ngo`ai xac
d.inh bo.i mo.t du.`o.ng thang ben trai, ben phai, ben du.o.i hoa.c ben tren n`ao do.
Thua.t toan da.c bie.t hie.u qua trong hai tru.`o.ng ho..p chung: Trong Tru.`o.ng ho..p 1, h`nh
`au het v`
`an lo.n cac nguyen so. l`a chap
ch
u. nha.t ch
u.a tat ca hoa.c h
ung hien thi., v`a do do ph
u. nha.t
nha.n. Tru.`o.ng ho..p 2 nay sinh trong b`ai toan cho.n cac doi tu.o..ng n`a m trong h`nh ch
bao quanh con cha.y (xem [9]).
`an phan chia doa.n thang AB
ung ta c
Neu khong xay ra hai Tru.`o.ng ho..p 1 hoa.c 2 ch
`an sao cho mo.t hoa.c ca hai doa.n con co the bi. loa.i bo. Muon va.y xet du.`o.ng
th`anh hai ph
`an: Ph
`an
thang xac d.inh bo.i ca.nh cua h`nh ch
u. nha.t chia doa.n thang AB th`anh hai ph
y
thuo.c nu.a ma.t phang ngo`ai se bi. loa.i bo. Co the cho.n cac ca.nh de kiem tra theo th
u. tu.. tu`
.
.
.
.
.
`an nhat quan trong thua.t toan. Ch
y
, nhu ng c
u trai sang phai
ung ta se su du.ng th
u tu. t`
93

v`a t`
u. du.o.i len tren trong t`
u. ma. Ch
uy
ra` ng, bit trong t`
u. ma du.o..c da.t b`a ng 1 tu.o.ng u
.ng
`an xet: Neu, chang ha.n, A thuo.c nu.a ma.t phang ngo`ai x < xmin v`a AB khong thoa
ca.nh c
Tru.`o.ng ho..p 2 th` diem B phai thuo.c nu.a ma.t phang trong x > xmin v`a doa.n thang AB
phai cat du.`o.ng thang x = xmin . Do do thua.t toan luon luon cho.n mo.t diem thuo.c nu.a ma.t
phang ngo`ai v`a su. du.ng t`
u. ma cua no de xac di.nh ca.nh du.o..c xet; ca.nh du.o..c cho.n tu.o.ng
u
.ng bit du.o..c da.t b`a ng 1 theo th
u. tu.. t`
u. trai sang phai v`a t`
u. du.o.i len tren; t
u.c l`a, no l`a bit
ben trai nhat b`a ng 1 trong t`
u. ma.
`om cac bu.o.c nhu. sau.
Thua.t toan g
1. Ma hoa cac diem A, B b`a ng cac t`
u. ma E(A) v`a E(B).
2. Neu E(A) = E(B) = 0 th` AB (R) = AB.
3. Neu [E(A) AND E(B)] != 0 th` AB (R) = .
4. Ngu.o..c la.i cho.n mo.t diem na` m ngo`ai v`a du..a v`ao t`
u. ma cua no de xac d.inh ca.nh se
`an n`a m ngo`ai. Ca.p nha.t diem ngo`ai l`a giao
cat. Sau do xac di.nh giao diem, loa.i bo ph
diem v`a ma hoa no. Chuyen sang Bu.o.c 2.

- iem D co ma 0000 v`a


V du. 3.3.2 (a) Chang ha.n, xet doa.n thang AD trong H`nh 3.7. D
- oa.n thang AD khong thoa man cac Tru.`o.ng ho..p 1 v`a 2. Do do
diem A co ma 0110. D
cho.n diem ngo`ai l`a A. T`
u. ma E(A) cho biet doa.n thang AD cat cac du.`o.ng thang ben phai
u. tu.. kiem tra, ch
x = xmax v`a ben du.o.i y = ymin . Theo th
ung ta su. du.ng ca.nh ben phai de
cat doa.n thang AD l`a DC. Thay diem A l`a C v`a ca.p nha.t t`
u. ma cua A l`a 0000. Trong
bu.o.c la.p ke tiep, kiem tra ta thay DC thoa man Tru.`o.ng ho..p 1, do do ket th
uc thua.t toan.
- oa.n
(b) Xet doa.n thang EI. Ma cua cac diem E v`a I tu.o.ng u
.ng l`a 1001 v`a 0010. D
.
.
.
thang EI khong thoa man cac Tru `o ng ho. p 1 v`a 2. Cho.n diem ngo`ai, chang ha.n E. Do
bit khac khong d`au tien trong t`
u. ma cua E l`a bit th
u. nhat nen du.`o.ng thang du.o..c cho.n
l`a x = xmin . Giao cua EI vo.i du.`o.ng thang n`ay ta.i F. Ca.p nha.t E l`a F tu.o.ng u
.ng t`
u. ma
0001. Bu.o.c la.p ke tiep, F I khong thoa man cac Tru.`o.ng ho..p 1 v`a 2, nen cho.n diem ngo`ai,
chang ha.n l`a F. Ch co mo.t bit (th
u. ba) trong E(F ) khac khong, nen cho.n du.`o.ng thang cat
l`a y = ymax . Ta co G = F I ymax . Do do ca.p nha.t E l`a G v`a ca.p nha.t ma cua no l`a 0000.
La.p la.i mo.t bu.o.c n
ung nha.n du.o..c neu ta xuat
u.a, ta du.o..c GH = EI (R). Ket qua n`ay c
phat t`
u. diem I.

94

E ...........

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

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

D ...........
...
..........C

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

H`nh 3.7: Minh ho.a cua thua.t toan Cohen-Sutherland.


u. nha.t
V du. 3.3.3 Xet v du. t`m giao cua h`nh ch
R := {(x, y) R2 | 0 x 8, 0 y 4}
v`a hai diem A(1, 2) v`a B(10, 9). Phu.o.ng tr`nh du.`o.ng thang AB co da.ng
y = x 1;
hay tu.o.ng du.o.ng
x = y + 1.
Cac bu.o.c cua thua.t toan Cohen Sutherland co the tong ket trong bang sau

k
1

(1, 2) (10, 9)

E(A) E(B) CodeOut

- u.`o.ng thang cat


D

To.a do. giao I

1010

0101

1010

x = xmin

(0, 1)

(0, 1)

(10, 9)

0010

0101

0010

y = ymin

(1, 0)

(1, 0)

(10, 9)

0000

0101

0101

x = xmax

(8, 7)

(1, 0)

(8, 7)

0000

0001

0001

y = ymax

(5, 4)

(1, 0)

(5, 4)

0000

0000

Va.y giao cua doa.n thang AB v`a h`nh ch


u. nha.t l`a doa.n thang noi hai diem C(1, 0) v`a
D(5, 4).
Nh
u.ng y
tu.o.ng tren du.o..c ta.p ho..p trong thu tu.c Cohen Sutherland(). Cac bu.o.c la.p
`an trong v`ong la.p hai diem d`au cuoi
kiem tra cac tru.`o.ng ho..p chap nha.n hay loa.i bo. Moi l
.
.
.
.
du o. c ca.p nha.t c`
ung vo i t`
u ma cua ch
ung v`a sau do tien h`anh kiem tra.
95

- e thua.t toan hie.u qua ho.n, ch


`an. Tuy nhien,
D
ung ta nen tnh cac he. so goc ch mo.t l
.
vo i cai tien n`ay, thua.t toan khong phai l`a hie.u qua nhat. Do vie.c kiem tra v`a loa.i bo du.o..c
u. tu.. nhat d.inh, thua.t toan doi khi thu..c hie.n tien tr`nh loa.i bo khong
thu..c hie.n theo mo.t th
`an thiet, chang ha.n trong tru.`o.ng ho..p giao diem cua doa.n thang vo.i mo.t ca.nh cua h`nh
c
ch
u. nha.t l`a diem giao ngo`ai; t
u.c l`a, khi no khong n`a m tren bien cua h`nh ch
u. nha.t (v
du., diem F tren doa.n thang EI trong H`nh 3.7). Thua.t toan cua Nicholl v`a Lee tranh vie.c
`eu v`
tnh toan cac giao diem ngo`ai b`a ng cach phan chia ma.t phang 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 cua Cyrus v`a Beck cong bo nam 1978


Sau khi thua.t toan cat doa.n thang v`a da giac l
`an ke tiep), nam 1984, Liang (do.c la.p vo.i Barsky) da xay du..ng
(du.o..c tr`nh b`ay trong ph
thua.t toan giao doa.n thang v`a h`nh ch
u. nha.t rat hie.u qua theo cach ho`an to`an khac vo.i
nh
u.ng thua.t toan tr`nh b`ay tren. Phu.o.ng phap n`ay du..a tren tham so hoa cua doa.n thang
v`a giai he. cac bat phu.o.ng tr`nh tuyen tnh theo mo.t an so.
`om ta.p cac diem trong ma.t phang gio.i ha.n bo.i cac
Nha.n xet r`a ng h`nh ch
u. nha.t (R) g
du.`o.ng thang qua cac ca.nh cua no; t
u.c l`a
(R) = {(x, y) R2 | xmin x xmax , ymin y ymax }.
97

Tham so hoa hoa doa.n AB bo.i P (t) := A + t(B A) vo.i t [0, 1].
`e xac
Nhu. va.y b`ai toan xac di.nh giao cua h`nh ch
u. nha.t (R) v`a doa.n thang AB du.a v
d.inh cac gia tri. tham so t thoa he. cac bat phu.o.ng tr`nh

t
1,

0
xmin xA + t(xB xA ) xmax ,

ymin yA + t(yB yA ) ymax .


Hay tu.o.ng du.o.ng

1,

qi pi t,

i = 0, 1, 2, 3,

trong do
p0 =

dx, q0 = xmin xA ,

p1 = dx, q1 = xA xmax ,
p2 =

dy, q2 = ymin yA ,

p3 = dy, q3 = yA ymax ,
vo.i dx := xB xA , dy := yB yA .
`on ta.i ch so i {0, 1, 2, 3} sao cho pi = 0 v`a qi > 0 th` he. bat phu.o.ng
Suy ra neu t
u. nha.t (R) b`a ng
tr`nh vo nghie.m; trong tru.`o.ng ho..p n`ay, doa.n thang AB giao vo.i h`nh ch
trong. Ngu.o..c la.i da.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 do he. bat phu.o.ng tr`nh tu.o.ng du.o.ng vo.i


t0 t t1 .
- i
`eu n`ay ch ra r`a ng doa.n thang AB giao vo.i h`nh ch
D
u. nha.t (R) khac trong ch neu t0 < t1 ;
v`a trong tru.`o.ng ho..p n`ay,
AB (R) = {P (t) | t [t0 , t1 ]}.
Tren co. so. nh
u.ng phan tch tren, ta co thua.t toan chi tiet sau:
1. Tnh pi , qi vo.i i = 0, 1, 2, 3.
2. Kho.i ta.o i = 0 v`a t0 = 0, t1 = 1.
u.ng.
3. Neu pi = 0 v`a qi > 0 ket lua.n AB (R) = ; thua.t toan d`
98

4. Neu pi > 0 da.t t0 = max{t0 , pqii }. Chuyen sang Bu.o.c 7.


5. Neu pi < 0 da.t t1 = min{t1 , pqii }. Chuyen sang Bu.o.c 7.
6. Neu t0 > t1 ket lua.n AB (R) = ; thua.t toan d`
u.ng.
7. Neu i < 3 thay i = i + 1 v`a la.p la.i Bu.o.c 3; ngu.o..c la.i, ket lua.n AB (R) = CD, trong
do
C = A + t0 (B A),
D = A + t1 (B A).
V du. 3.3.4 H`nh 3.8 minh ho.a mo.t v du. cua thua.t toan Lang-Barsky.
7
B

@t1 = 1

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

@t1 =

(R)

2
3

@t0 =

A
@t0 = 0

1
5

H`nh 3.8: Mo.t v du. cua thua.t toan Liang-Barsky.

V du. 3.3.5 Xet h`nh ch


u. nha.t
R := {(x, y) R2 |0 x 8, 0 y 4}
v`a hai diem A(1, 2) v`a B(10, 9). Phu.o.ng tr`nh tham so doa.n thang AB co da.ng
(1 t)A + tB.
`an giai he. cac bat phu.o.ng
Ta c

0
0

tr`nh

1,

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

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

4.

Hay tu.o.ng du.o.ng

0 t 1,
1 11t 9,

2 11t 6.

Va.y

6
2
t .
11
11
Suy ra giao cua doa.n thang AB v`a h`nh ch
u. nha.t l`a doa.n thang noi hai diem C v`a D trong
do
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

oi cu a m
o.t d
i
em v
o.i d
u.`
o.ng th
a ng

`eu u
Trong nhi
.ng du.ng ta thu.`o.ng quan tam khai nie.m nu.a ma.t phang trong v`a nu.a ma.t
phang ngo`ai xac d.inh bo.i mo.t du.`o.ng thang (xem Chu.o.ng 1). Khai nie.m n`ay lien quan ma.t
thiet den phap vector cua du.`o.ng thang.
Nhac la.i l`a phu.o.ng tr`nh tong quat cua du.`o.ng thang l co da.ng
ax + by + c = 0.
Hay tu.o.ng du.o.ng
ax + by = c.

Noi cach khac, l = {P R2 | hOP , ni = D}, trong do n = (a, b)t l`a phap vector cua du.`o.ng
thang v`a D = c. K
y hie.u

(l+ ) := {P R2 | hOP , ni > D},

(l ) := {P R2 | hOP , ni < D},


100

Nu.a ma.t phang ngo`ai (l )

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

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

Nu.a ma.t phang trong (l+ )


H`nh 3.9: Vi. tr tu.o.ng doi cua diem Q vo.i du.`o.ng thang l.
l`a cac nu.a ma.t phang ngo`ai v`a nu.a ma.t phang trong xac d.inh bo.i l (xem H`nh 3.9).
uy y
trong ma.t phang, hay xac d.inh diem
Van d`e da. t ra o. day l`a vo.i mo.t diem Q t`
Q n`a m trong nu.a ma.t phang n`ao? Gia su. A l`a diem n`a m tren du.`o.ng thang l. K
y hie.u l`a

goc gi
u.a vector n v`a vector AQ . De d`ang thay r`a ng goc nho ho.n 900 neu Q thuo.c nu.a

ma.t phang ngo`ai v`a do do hn, AQi > 0. Tu.o.ng tu.., goc lo.n ho.n 900 neu Q thuo.c nu.a ma.t

phang trong v`a do do hn, AQi < 0. Cuoi c`


ung, goc b`a ng 900 neu Q thuo.c du.`o.ng thang l

v`a do do hn, AQi = 0. Va.y

1. Q (l+ ) neu hn, AQi > 0.

2. Q (l ) neu hn, AQi < 0.

3. Q l neu hn, AQi = 0.


Ch
uy
r`a ng

hn, AQi > 0


tu.o.ng du.o.ng

hn, OQi > D.


Do do ta co the viet la.i tieu chuan kiem tra diem Q thuo.c nu.a ma.t phang n`ao nhu. sau:

1. Q (l+ ) neu hn, OQi > D.

2. Q (l ) neu hn, OQi < D.

3. Q l neu hn, OQi = D.


Chang ha.n, goc to.a do. (0, 0) thuo.c nu.a ma.t phang ngo`ai neu v`a ch neu D < 0.
101

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

(R)

`oi.
H`nh 3.10: Giao cua doa.n thang v`a da giac 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

Nam 1978, Cyrus v`a Beck [5] da xay du..ng thua.t toan xac d.inh giao cua doa.n thang v`a da
`eu. H`nh ch
`oi v`a co the mo. ro.ng de d`ang trong ba chi
u. nha.t l`a mo.t tru.`o.ng ho..p da. c
giac l
`oi v`a do do co the ap du.ng thua.t toan n`ay. Thua.t toan Liang-Barsky tr`nh
bie.t cua da giac l
`an tru.o.c du..a tren cach tiep ca.n cua Cyrus v`a Beck. Thua.t toan Cyrus-Beck
b`ay trong ph
du..a tren tieu chuan loa.i bo do.n gian b`a ng cach xet vi. tr tu.o.ng doi cua mo.t diem vo.i mo.t
du.`o.ng thang.
Nhac la.i l`a trong thua.t toan Cohen-Sutherland, doi vo.i cac doa.n thang khong n`a m
`an tnh to.a do. giao diem (x, y) cua doa.n
trong h`nh ch
u. nha.t hoa.c bi. loa.i bo ho`an to`an, ta c
thang vo.i mo.t ca.nh n`ao do ba` ng cach the gia tri. da biet x hoa.c y v`ao phu.o.ng tr`nh ca.nh
du
.ng hay ngang tu.o.ng u
.ng. Tuy nhien, trong thua.t toan tham so hoa doa.n thang, ta se
t`m cac gia tri. tham so t trong khoang bieu dien cua doa.n thang cho diem giao cua du.`o.ng
thang v`a ca.nh du.o..c xet. Noi chung, v` tat ca cac ca.nh se giao vo.i du.`o.ng thang, nen bon
`an du.o..c tnh. Vo.i mo.t loa.t cac phep so sanh do.n gian se cho biet cac tham so
gia tri. t c
trong bon gia tri. n`ay tu.o.ng u
.ng vo.i cac diem giao thu..c su... Sau do cac to.a do. (x, y) cua
mo.t hoa.c hai giao diem du.o..c xac d.inh. Noi chung cach tiep ca.n n`ay se tiet kie.m th`o.i gian
`an thiet de cat nhi
`eu ca.nh
ho.n thua.t toan cat xen Cohen-Sutherland do no tranh v`ong la.p c
.
.
.
.
cua h`nh ch
u nha.t. Ho n n
u a, cac phep tnh trong khong gian tham so 1D do n gian ho.n
trong khong gian 2D.
`oi (R) du.o..c d.inh ngha nhu. mo.t day cac dnh Pi = (xi , yi ), i =
Gia su. da giac l
`an n`ay l`a loa.i bo nh
`an
0, 1, . . . , L, trong he. to.a do. thu..c vo.i P0 = PL . Mu.c dch cua ph
u.ng ph
.
cua doa.n thang AB khong n`a m trong cu a so (R) (H`nh 3.10).
102

- a.t
K
y hie.u li , i = 0, 1, . . . , L, l`a du.`o.ng thang di qua hai dnh lien tiep Pi v`a Pi+1 . D

(li+ ) := {P R2 | hOP , ni i > Di },

(li ) := {P R2 | hOP , ni i < Di },


l`a cac nu.a ma.t phang ngo`ai v`a ma.t phang trong xac di.nh bo.i li , trong do ni l`a phap vector
cua li du.o..c cho.n hu.o.ng ra nu.a ma.t phang ngo`ai v`a Di l`a h`a ng so n`ao do. V` (R) l`a mo.t
`oi, nen ph
`an trong cua da giac (R) chnh l`a giao cua cac nu.a ma.t phang ben trong cua
ta.p l
moi ca.nh xac d.inh bo.i (R); t
u.c l`a

(R) =

L
\

(li ).

(3.3)

i=0

tu.o.ng cua thua.t toan nhu. sau. Vo.i moi du.`o.ng thang li , i = 0, 1, . . . , L, ch
Y
ung ta
.
.
`an cua doa.n thang AB thuo.c nu a ma.t phang ngo`ai xac di.nh bo i li v`a ca.p nha.t
loa.i bo ph
AB = AB (li ). Neu o. bu.o.c n`ao do AB (li+ ) th` ket lua.n giao cua doan thang v`a da
`oi b`a ng trong; ngu.o..c la.i, o. bu.o.c cuoi c`
`an doa.n thang AB c`on la.i se n`a m ben
giac l
ung ph
`an giao c
`an t`m.
trong (R) chnh l`a ph
- e de d`ang xu. l
D
y, ch
ung ta bieu dien AB o. da.ng tham so
P (t) = A + ct

trong do c = BA l`a vector ch phu.o.ng cua du.`o.ng thang AB. Khi t = 0, P (t) da. t ta.i diem
A v`a t = 1, P (t) da. t ta.i diem B. Ta noi P (t) di chuyen t`
u. A den B khi t tang t`
u. 0 den
1 v`a c l`a hu.o.ng di chuyen.
Khi xet du.`o.ng thang li ch
ung ta su. du.ng hai gia tri. tin v`a tout de xac d.inh pha.m vi
thay doi cua tham so t doi vo.i doa.n thang AB c`on la.i. T
u.c l`a, du..a tren cac tham so n`ay
`an c`on la.i cua doa.n AB o. bu.o.c dang xet chnh l`a ta.p cac diem
ch
ung ta co the xac d.inh ph
P (t) vo.i tin t tout . L
uc ban d`au tin = 0 v`a tout = 1. Khoang thay doi cua tham so t se
`an khong n`a m trong da giac (R)
tiep tu.c co la.i khi kiem tra vo.i mo.t ca.nh mo.i v`a nh
u.ng ph
se bi. loa.i bo. Neu o. bu.o.c n`ao do, khoang n`ay ba` ng trong thua.t toan se ket th
uc v`a ta co
.
.
.
.
.
giao cua doa.n thang AB vo i da giac (R) ba` ng trong. Trong tru `o ng ho. p ngu o..c la.i, doa.n
`an giao AB (R).
c`on la.i [tin , tout ] se xac di.nh ph
Xet du.`o.ng thang li di qua hai dnh Pi v`a Pi+1 . Co hai tru.`o.ng ho..p xay 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 thang li song song vo.i doa.n thang AB neu phap vector ni vuong goc vo.i vector c;
D
t
u.c l`a hni , ci = 0. Trong tru.`o.ng ho..p n`ay, doa.n thang AB n`a m ho`an to`an trong nu.a ma.t
- e kiem tra tru.`o.ng ho..p n`ao xay ra, ta
phang ngo`ai (li+ ) hoa.c nu.a ma.t phang trong (li ). D

- a.t a = OA .
`an xet vi. tr tu.o.ng doi cua mo.t diem, chang ha.n A, vo.i du.`o.ng thang li . D
ch c
Khi do
- oa.n thang AB thuo.c nu.a ma.t phang trong (li ) neu hni , ai < Di . Trong tru.`o.ng ho..p
1. D
`an ca.p nha.t la.i cac tham so tin v`a tout .
n`ay ta khong c
2. Ngu.o..c la.i, neu hni , ai > Di th` doa.n thang AB thuo.c nu.a ma.t phang ngo`ai (li+ ) v`a do
do theo (3.3) th` AB (R) = ; thua.t toan ket th
uc.

- u.`
D
o.ng th
a ng li kh
ong song song v
o.i d
oa.n th
a ng AB.
Neu du.`o.ng thang li khong song song vo.i AB th` gia tri. hni , ci khac khong v`a li phai cat
`on ta.i ti sao cho P (ti ) li . De d`ang kiem tra r`a ng
du.`o.ng thang qua hai diem A, B; t
u.c l`a t
ti =

Di hni , ai
.
hni , ci

- e di
`an lu.u y
`eu n`ay khong xay ra, thua.t
C
mau so trong bieu th
u.c tren co the ba` ng khong. D
`an kiem tra
toan c
ni 6= 0 (t
u.c l`a, phap vector phai khac vector khong); v`a
c 6= 0 (t
u.c l`a A 6= B).
Co hai tru.`o.ng ho..p nhu. trong H`nh 3.11:
- i v`ao. D
- oa.n thang AB di t`
1. D
u. nu.a ma.t phang ngo`ai (li+ ) v`ao nu.a ma.t phang trong
(li ) (H`nh 3.11(a)).
- i ra. D
- oa.n thang AB di t`
2. D
u. nu.a ma.t phang trong (li ) ra nu.a ma.t phang ngo`ai (li+ )
(H`nh 3.11(b)).
104

(a)

Nu.a ma.t phang ngo`ai

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

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

t
.
Nu a ma.t phang trong

B
(b)

Nu.a ma.t phang ngo`ai


t

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

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

Nu.a ma.t phang trong

B
- oa.n thang AB di v`ao hay di ra nu.a ma.t phang xac d.inh bo.i li .
H`nh 3.11: D
- e xac di.nh tru.`o.ng ho..p n`ao xay ra, ch
D
ung ta xet goc ho..p bo.i cac vector c v`a ni .
Neu goc nho ho.n 900 (t
u.c l`a hni , ci > 0) th` tu.o.ng u
.ng di ra; ngu.o..c la.i u
.ng vo.i di v`ao.
`an u
`an
Trong tru.`o.ng ho..p di v`ao, th` ph
.ng vo.i t < ti n`a m ngo`ai da giac (R) v`a do do c
`an u
ca.p nha.t la.i tin := max(tin , ti ). Ngu.o..c la.i, neu di ra, ph
.ng vo.i t > ti n`a m ngo`ai da giac
(R) v`a do do ca.p nha.t la.i tout := min(tout , ti ).
Ch
uy
r`a ng, o. bu.o.c n`ao do neu xay ra tru.`o.ng ho..p tin > tout th` thua.t toan se ket
`an giao AB (R) = .
th
uc: ph
Trong tru.`o.ng ho..p ngu.o..c la.i, o. bu.o.c cuoi c`
ung, AB (R) l`a doa.n thang tu.o.ng u
.ng
hai diem d`au cuoi P (tin ) v`a P (tout ).
`e tri. False neu giao cua doa.n thang AB v`a da giac (R) (du.o..c
H`am Cyrus Beck() tra v
`an giao l`a
lu.u trong danh sach Poly kieu VertPtr2D) b`a ng trong; ngu.o..c la.i l`a True v`a ph
- e ho`an thie.n thu tu.c, ch
`an phai them cac d`ong le.nh kiem tra cac
doa.n AB mo.i. D
ung ta c
`eu kie.n bien.
di
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 toan xac


Ch
uy
r`a ng de d`ang mo. ro.ng thua.t toan trong khong gian ba chi
`oi.
d.inh giao cua mo.t doa.n thang v`a mo.t da die.n l

3.5

Giao hai d
a gi
ac

`au het cac u


Trong h
.ng du.ng, cac da giac du.o..c di.nh ngha nhu. mo.t day cac dnh trong he.
`eu tru.`o.ng ho..p ch
ung du.o..c d.inh ngha nhu. va.y v`a trong nhi
to.a do. thu..c. Mo.t cu.a so c
ung
.
.
.
.
`an doi tu o. ng n`a m ben trong cu a so xac d.inh bo i da giac.
ta muon ve ph
Vo.i doi tu.o..ng l`a mo.t doa.n thang, ta co the ap du.ng phu.o.ng phap Cyrus-Beck trong
`an 3.4: doa.n thang du.o..c cat doi vo.i moi du.`o.ng bien cua da giac, v`a cac diem d`au cuoi
Ph
`an ph
du.o..c h`nh th`anh. Vo.i cac doi tu.o..ng l`a da giac th` vie.c t`m giao (hay cat xen) co ph
u.c
ta.p ho.n bo.i v` trong qua tr`nh xu. l
y thua.t toan cat, mo.t da giac co the bi. phan manh th`anh
- a giac co the du.o..c to m`au vo.i mau to cho
`eu da giac con khac nhu. trong H`nh 3.12. D
nhi
tru.o.c v`a do do cac manh da giac phai du.o..c noi ket vo.i mau to do.
Ta se quy u.o.c r`a ng da giac bi. cat l`a da giac doi tu.o..ng (S). Cu.a so se du.o..c go.i l`a da
`an giao gi
giac cat (C). Van d`e da.t ra l`a l`am sao ta.o ra mo.t danh sach cac dnh cua ph
u.a
hai da giac n`ay?
`an sau, ch
Trong nh
u.ng ph
ung ta se xet hai phu.o.ng phap:
107

(C)

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

(S)

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

`an giao cua hai da giac


Ph
H`nh 3.12: Giao hai da giac.
1. Thua.t toan Sutherland-Hodgman [25]. Phu.o.ng phap n`ay ho`an to`an do.n gian v`a thu..c
`oi. Cu.a so h`nh ch
u. nha.t l`a
hie.n qua tr`nh cat mo.t da giac bat k`
y vo.i mo.t da giac l
`oi. Thua.t toan n`ay co the sinh them nh
u.ng
mo.t tru.`o.ng ho..p da.c bie.t cua cac da giac l
`an loa.i bo sau khi ket th
ca.nh mo.i v`a do do c
uc.
u.c ta.p ho.n nhu.ng cho phep
2. Thua.t toan Weiler-Atherton [27]. Cach tiep ca.n n`ay ph
cat hai da giac bat k`
y; tha.m ch co the co lo hong trong cac da giac.

3.5.1

Thu
a.t to
an Sutherland-Hodgman

`oi (C)
`eu tru.`o.ng ho..p xay ra khi da giac doi tu.o..ng (S) du.o..c cat bo.i da giac l
V` co nhi
`an phu.o.ng phap to ch
`an da di qua trong qua tr`nh xu. l
nen ch
ung ta c
y. Thua.t
u.c cac ph
.
.
toan Sutherland-Hodgman ap du.ng phu o ng phap chia de tri.: Phan tch b`ai toan kho th`anh
- a.c bie.t, tu.o.ng tu.. thua.t toan Cyrus-Beck, no lo..i du.ng
nh
u.ng b`ai toan con do.n gian ho.n. D
`oi: mo.t du.`o.ng thang di qua ca.nh bat k`
tnh chat cua da giac l
y cua da giac se chia ma.t
`an ngo`ai. Thua.t toan se cat da giac (S) vo.i
`an trong (ch
phang th`anh ph
u.a da giac) v`a ph
`an thuo.c nu.a ma.t phang trong.
du.`o.ng thang qua moi ca.nh cua da giac (C) v`a gi
u. la.i ph
Tien tr`nh du.o..c la.p la.i cho mo.i ca.nh cua (C). H`nh 3.14 minh ho.a thua.t toan cat cua da giac
(S) v`a h`nh ch
u. nha.t (C). Danh sach cac dnh cua Subj xuat phat l`a A, B, C, D, E, F, G, A.
- a giac n`ay du.o..c cat vo.i cac ca.nh ben trai, ben du.o.i, ben phai v`a ben tren cua (C); trong
D
moi bu.o.c, mo.t danh sach mo.i du.o..c sinh ra v`a gan la.i cho (S). Danh sach sinh ra o. bu.o.c
108

`eu da giac lien ket la.i vo.i nhau cho ta thong tin giao cua
cuoi c`
ung tu.o.ng u
.ng mo.t hoa.c nhi
hai da giac.
K
y hie.u Subj v`a Clip l`a danh sach cac dnh cua hai da giac (S) v`a (C) tu.o.ng u
.ng.
Danh sach Subj se du.o..c ca.p nha.t sau moi tien tr`nh cat vo.i mo.t ca.nh cua da giac (C). V`
`oi, nen du.`o.ng thang di qua ca.nh bat k`
(C) l`a da giac l
y cua no se chia ma.t phang th`anh
`an ngo`ai v`a ph
`an trong. Xet hai dnh lien tiep P v`a P
ph
cua (C) v`a du.`o.ng thang l di
i

i+1

qua hai diem n`ay. K


y hie.u
v`a
tu.o.ng u
.ng l`a cac nu.a ma.t phang ngo`ai v`a trong
`an 3.3) da giac l
`oi l`a giao cua cac nu.a ma.t phang trong
tu.o.ng u
.ng. Ta biet r`a ng (xem Ph
xac di.nh bo.i cac ca.nh cua no: (C) = i (li ). Xet ca.nh e lien thuo.c hai dnh lien tiep F v`a S
cua da giac Subj. Co bon kha nang xay ra gi
u.a ca.nh e v`a du.`o.ng thang li : ca hai dnh F, S
`an trong; ca hai thuo.c ph
`an ngo`ai; hoa.c ch
thuo.c ph
ung thuo.c hai pha cua du.`o.ng thang li .
Trong moi tru.`o.ng ho..p, ta xuat mo.t (hoa.c hai) diem ra mo.t danh sach mo.i nhu. trong H`nh
(li+ )

(li )

3.13.
.
..........
...
... .....
......
... .
..........
....
.. .
...........
...
... .....
......
... .
..........
....
.. .
...........
.....
............. ....
...
.............
...
............................
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
... ..
.............
...
.. .
.............
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.....
.
...
.......
...
...
...
... ...
...
...
.....
.
...
..
...
.
.
...
...
...
.... ......
...
...
...
......
...
...
.
.
. ...
...
...
.
.
.
...
.
...
.......
....
...
. .
........
.
.....................................................................................................................
.
....
.. .....
......
... .
.........
.

(li )

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

(li+ )

(li )

li

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

(b)

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

(li+ )

(li )

li

I
li

(a)

(li )

(li+ )

(li+ )

li

(c)

(d)

H`nh 3.13: Bon tru.`o.ng ho..p vo.i moi ca.nh cua (S).

109

B........................................................................................ A
...
..
...
...
...
... (S)
...
...
.

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

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

3
2

(a)

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

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

4 5
3
2

4 5

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

(d)

1 A
10
11
I
4 5
7

(b)

(c)

1 A

1 A

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

1 A

(C)
|
F
E
...........................................................
.....

F 9
8

E
6

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


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

F 9
8

(e)
H`nh 3.14: Mo.t v du. cua thua.t toan Sutherland-Hodgman.
1. Hai dnh F v`a S na` m trong: xuat S.
- nh F na` m trong v`a S n`a m ngo`ai: t`m giao diem I v`a xuat no.
2. D
3. Hai dnh F v`a S na` m ngo`ai: khong xuat.
- nh F na` m ngo`ai v`a S n`a m trong: t`m giao diem I; xuat I v`a sau do xuat S.
4. D
Bay gi`o. ta ap du.ng cach xu. l
y n`ay cho H`nh 3.14.
1. Danh sach Subj sau khi cat (S) vo.i ca.nh ben trai cua (C) :
(1, 2, D, E, F, G, 3, 4, I, A, 1).
2. Danh sach Subj sau khi cat (S) vo.i ca.nh ben du.o.i cua (C) :
(5, 6, E, F, 7, 5, 4, I, A, 1, 5).
110

3. Danh sach Subj sau khi cat (S) vo.i ca.nh ben phai cua (C) :
(8, 9, F, 7, 5, 4, I, A, 1, 5, 8).
4. Danh sach Subj sau khi cat (S) vo.i ca.nh ben tren cua (C) :
(9, F, 7, 5, 4, I, 10, 11, 5, 8, 9).
Ch
u y
ra` ng co them nh
u.ng ca.nh phu. nhu. (5, 4) noi hai manh da giac du.o..c ta.o ra
trong qua tr`nh thu..c hie.n thua.t toan. Nh
u.ng ca.nh nhu. va.y co the gay kho khan trong mo.t
u.ng ca.nh nhu. va.y; tuy nhien
so u
.ng du..ng, chang ha.n to m`au da giac. Ta co the loa.i bo nh
`am thu.`o.ng (xem [24]).
day l`a b`ai toan khong t
Trong moi tien tr`nh thu..c hie.n thua.t toan Sutherland-Hodgman, mo.t danh sach mo.i
`an mo.t danh sach trung
du.o..c ta.o ra v`a sau do gan la.i cho danh sach Subj. Do do ch
ung ta c
.
gian NewSubj. Ma gia cua thua.t toan nhu sau:
Vo.i moi du.`o.ng thang l di qua hai dnh lien tiep cua da giac (C) thu..c hie.n
Xac di.nh phap vector n v`a ha` ng so D t`
u. du.`o.ng thang l.
Kho.i ta.o danh sach NewSubj = NULL.
Vo.i hai dnh F, S lien tiep cua da giac (S), kiem tra cac tru.`o.ng ho..p cua ca.nh
F S vo.i du.`o.ng thang l; tu`
y theo moi Tru.`o.ng ho..p 1, 2 hoa.c 4, cat mo.t hoa.c hai
diem v`ao danh sach NewSubj.
Gan Subj = NewSubj.

3.5.2

Thu
a.t to
an Weiler-Atherton

`an xac di.nh


Trong mo.t so u
.ng du.ng nhu. khu. bo ma.t khuat hay danh bong ma.t, ch
ung ta c
.
.
.
.
`an chung cua hai da giac. Trong tru `o ng ho. p n`ay, tien tr`nh rat ph
u c ta.p. Cach tiep ca.n
ph
cua Weiler-Atherton nha` m t`m giao cua hai da giac bat k`
y, tha.m ch cho phep co lo hong
`an ho..p v`a hie.u cua hai da giac.
trong cac da giac. Ngo`ai ra ta c
ung co the ta.o ra cac ph
Xet v du. trong H`nh 3.15: Hai da giac (S) v`a (C) du.o..c bieu dien bo.i cac danh sach
- e thua.n tie.n,
dnh, k
y hie.u Subj = (A, B, C, D, E, A) v`a Clip = (a, b, c, d, e, a) tu.o.ng u
.ng. D
`an trong cua v`
`e pha tay trai cua moi
ch
ung ta lu.u danh sach cac dnh sao cho ph
ung na` m v
.
ca.nh khi di chuyen xung quanh da giac t`
u dnh n`ay den dnh khac trong danh sach. Chang
111

`an trong cua (S) n`a m v


`e ben tay trai cua ca.nh t`
ha.n, ph
u. A den B v`a ben trai cua ca.nh t`
u.
- i
`eu n`ay giong nhu. danh sach cac dnh du.o..c lu.u theo th
`eu kim
B den C. D
u. tu.. ngu.o..c chi
`o.
d`ong h
Tat ca cac giao diem cua hai da giac du.o..c xac d.inh v`a lu.u trong mo.t danh sach.
Chang ha.n, trong v du. n`ay, co sau giao diem. Bay gi`o. ta cat (S) vo.i da giac (C) b`a ng
`an theo hu.o.ng thua.n (t
`an trong cua no n`a m ben trai) cho den khi
cach l
u.c l`a, sao cho ph
ga.p giao diem di v`ao: l`a diem giao m`a di theo danh sach Subj se di chuyen t`
u. pha ngo`ai
v`ao pha trong cua da giac Clip. Trong tru.`o.ng ho..p n`ay l`a 1, v`a xuat ra danh sach lu.u tr
u.
thong tin (cac) da giac du.o..c cat.
A

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

D
H`nh 3.15: Cat xen Weiler-Atherton.
Tien tr`nh bay gi`o. do.n gian khi phat bieu da.ng h`nh ho.c: Duye.t do.c theo Subj, di
chuyen theo t`
u.ng doa.n, cho den khi ga.p mo.t giao diem (2 trong v du. n`ay). Ke tiep ta di
`an theo Clip thay cho Subj. Co hai cach di chuyen tren Clip. Di chuyen tren
chuyen v`a l
`an trong cua da giac Subj v`a Clip luon luon na` m
Clip theo hu.o.ng thua.n cua no. Nhu. va.y ph
ben tay trai trong qua tr`nh di chuyen. Khi ga.p mo.t giao diem, ta chuyen sang Subj theo
hu.o.ng thua.n cua no v`a van van. Moi dnh hay giao diem bat ga.p du.o..c da. t v`ao danh sach.
La.p la.i tien tr`nh di chuyen theo hu.o.ng thua.n v`a nhay gi
u.a hai da giac cho den khi ga.p
dnh xuat phat. Danh sach xuat ra den l
uc n`ay l`a (1, B, 2, 1).
Tiep tu.c kiem tra giao diem v`ao ke tiep cua Subj chu.a du.o..c di qua. Ta co giao diem
3 v`a la.p la.i tien tr`nh tren, danh sach sinh ra l`a (3, 4, 5, 6, 3). Kiem tra them, khong c`on giao
diem v`ao cua Subj n`ao chu.a du.o..c vieng tham, nen tien tr`nh cat ket th
uc. Ta co hai da
.
.
giac du o. c sinh ra (1, B, 2, 1) v`a (3, 4, 5, 6, 3).
`an theo hu.o.ng thua.n v`a nhay
Mo.t cach sap xep h
u.u hie.u de thu..c hie.n tien tr`nh l
112

l`a xay du..ng hai danh sach


Subj: (A, 1, B, 2, C, 3, 4, D, 5, 6, E, A)
Clip: (a, b, 4, 5, c, d, e, 6, 3, 2, 1, a).
`an theo moi da giac (sao cho ph
`an trong cua no ben tay trai) v`a danh sach cac dnh v`a
de l
- i
`eu g` xay ra neu khong co giao diem
cac diem giao du.o..c lu.u theo th
u. tu.. ch
ung bat ga.p. (D
`an theo da giac tu.o.ng u
gi
u.a hai ca.nh cua hai da giac?). Nhu. va.y vie.c l
.ng duye.t danh sach
v`a nhay gi
u.a hai da giac tu.o.ng u
.ng nhay gi
u.a hai danh sach.
Ch
u y
r`a ng ngay khi danh sach du.o..c xay du..ng, co rat t thong tin h`nh ho.c trong
do-nhu. kho co the kiem tra diem na` m ngo`ai da giac de xac d.inh chnh xac dnh v`ao.
Hu.o.ng thu..c su.. de di chuyen doi vo.i moi da giac du.o..c nh
ung trong th
u. tu.. cua danh sach.
Trong v du. tru.o.c, tien tr`nh di chuyen trong thua.t toan du.o..c cho bo.i H`nh 3.16.
Xuat
Xuat phat
|
Subj: A
1n B
2
C

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

phat la.i
|
3n 4
............................................................

5
6
D
.........................................................................................

Clip: a

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

= diem du.o..c xuat ra

a
3
2
1
|
|
- a du.o..c vieng tham
D

du.ng phu.o.ng phap Weiler-Atherton.


H`nh 3.16: Ap

`an kiem tra nh


Cuoi c`
ung, de ho`an thie.n thua.t toan, ch
ung ta c
u.ng tru.`o.ng ho..p cac
`an.
ca.nh cua Clip v`a Subj song song hay phu lap len nhau mo.t ph

3.5.3

C
ac ph
ep to
an t
a.p ho..p tr
en c
ac d
a gi
ac

`an tren ta da xet b`ai toan xac di.nh giao cua hai da giac. Phu.o.ng phap tr`nh b`ay n`ay
Ph
c
ung co the ap du.ng de t`m hie.u v`a ho..p cua hai da giac.
113

- i tren danh sach Subj theo hu.o.ng thua.n cho den


1. Ho..p cua hai da giac (S) v`a (C). D
`an trong
khi ga.p giao diem ra: l`a diem m`a di theo ca.nh cua (S) se di chuyen t`
u. ph
`an ngo`ai cua (C). Xuat giao diem n`ay v`a duye.t theo Subj cho den khi ga.p giao
ra ph
diem khac vo.i Clip. Nhay sang danh sach Clip v`a di theo hu.o.ng thua.n cua no cho
den khi ga.p giao diem ke tiep; xuat cac dnh trong qua tr`nh di ngang qua v`a nhay
`oi di theo hu.o.ng thua.n. Qua tr`nh ket th
sang danh sach Subj r
uc khi ga.p dnh xuat
phat ban d`au; t`m giao diem ra ke tiep chu.a du.o..c vieng tham v`a la.p la.i tien tr`nh
tren.
- i tren danh sach Subj theo hu.o.ng thua.n cho den
2. Hie.u cua hai da giac (S) v`a (C). D
khi ga.p giao diem v`ao. Nhay sang danh sach Clip v`a di theo hu.o.ng ngu.o..c (do do
`an trong da giac (C) n`a m ben tay phai trong hu.o.ng di chuyen) cho den khi ga.p
ph
giao diem, nhay sang Subj. Trong moi bu.o.c la.p, ta luon luon di chuyen tren Subj
theo hu.o.ng thua.n v`a di chuyen tren Clip theo hu.o.ng ngu.o..c.
Vo.i hai da giac (S) v`a (C) trong H`nh 3.15, ap du.ng cac phu.o.ng phap tren de d`ang
co
(S) (C) :
(2, C, 3, 2)

(lo hong).

(4, D, 5, c, d, e, 6, E, A, 1, a, b, 4).
(S) \ (C) :
(1, B, 2, 3, 4, b, a, 1); v`a
(5, 6, e, d, c, 5).
(C) \ (S) :
(4, 5, D, 4); v`a
(6, 3, C, 2, 1, A, E, 6).

3.6

`eu: phan xa. trong bu


`ong kn
Ray tracing hai chi

`an n`ay l`a ap du.ng mo.t so khai nie.m h`nh ho.c de ta.o mo.t u
Mu.c dch cua ph
.ng du.ng d`o ho.a:
`ong kn.
mo phong qua tr`nh chuyen do. ng cua tia sang trong bu
114

Phu.o.ng phap ray tracing l`a mo.t cong cu. quan tro.ng trong d`o ho.a may tnh de tong
`an theo trong the gio.i thu..c
ho..p cac anh. Trong tong ho..p anh, cac tia sang (nhan ta.o) l
- u.`o.ng di cua moi tia sang xuyen qua cac doi tu.o..ng trong
`eu ch
`eu doi tu.o..ng. D
ba chi
u.a nhi
suot hoa.c phan xa. la.i t`
uy theo m
u.c do. phan xa. cua doi tu.o..ng cho den khi no d`
u.ng o. doi
tu.o..ng n`ao do. M`au cua doi tu.o..ng n`ay sau do se du.o..c da.t cho pixel tu.o.ng u
.ng tren thiet
`eu.
bi. hien thi.. Mo phong qua tr`nh ray tracing rat de d`ang trong hai chi
H`nh dung qu
y da.o cua trai pinball nho khi no va cha.m v`ao cac doi tu.o..ng trong
`ong kn. H`nh 3.17 minh ho.a nhat cat ngang cua mo.t bu
`ong kn co nam b
bu
u.c tu.`o.ng v`a
ch
u.a ba tru. tr`on. Trai pinball bat d`au ta.i vi. tr S v`a di chuyen theo hu.o.ng vector c cho
den khi ga.p va.t can se bi. do.i la.i v`a di chuyen theo hu.o.ng mo.i. Qua tr`nh du.o..c la.p la.i. Qu
y
.
.
.
.
da.o cua trai pinball l`a mo.t du `o ng gap kh
uc m`a ta co the h`nh dung chnh l`a du `o ng di cua
`ong kn.
tia sang khi no di chuyen trong bu
......................................................................................................................................................................................................
.....
.
.....
....
.....
...
.....
...
.....
.....
...
.....
...
.....
...
.....
.....
...
.....
...
.....
.....
.....
.....
...
.....
.....
...
...
....
..
......
.
.
.
...
.
.
....
.
.
.
....
.
...
.
.
.
....
...
.....
...............................
......
.....
......
...
......
.
.
.
.
.
...
.....
...
......
.....
...
......
...
......
.
.
.
.
...
...
...
......
......
...
......
...
......
.
.
.
.
...
.
...
.
......
......
.......
.....
......
.....
......
.
.
.
.
.
.....
....
.....
.....
.....
......
.....
......
.....
......
.
.....
.
.
.
.
.....
...
.....
......
.....
......
.....
......
.....
......
.
.
.
.....
.
.
....
.....
..... ..........
.......

`e ray tracing.
H`nh 3.17: V du. v
`an xay du..ng thua.t toan xac di.nh doi tu.o..ng n`ao tia sang se ga.p d`au tien
Ch
ung ta c
v`a vi. tr va cha.m ta.i do. Vi. tr va cha.m se l`a diem kho.i d`au cho du.`o.ng di ke tiep v`a ch
ung
ta co the t`m hu.o.ng di chuyen mo.i cua tia sang ba` ng cach ap du.ng nh
u.ng k
y thua.t trong
.
.
`an 3.6.1 du o i day.
Ph

3.6.1

Vector pha n xa.

Trong thu..c te ta thu.`o.ng nghien c


u.u su.. phan xa. cua cac doi tu.o..ng khi va cha.m v`ao nhau
- i
`eu n`ay da. c bie.t quan tro.ng trong mo h`nh phan xa. anh sang cua b
`e
v`a hien thi. ch
ung. D
.
.
ma.t hoa.c trong vie.c nghien c
u u qua tr`nh chuyen do. ng cua cac phan tu gas hay cua cac qua
115

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

H`nh 3.18: Phan giai mo.t vector th`anh hai vector tru..c giao.
bong billiard.
Quang h`nh ho.c da ch ra ra` ng, goc phan xa. b`a ng goc to.i. Ch
ung ta se su. du.ng cac
vector v`a cac phep chieu de xac d.inh hu.o.ng phan xa.. Cac ket qua n`ay, du.o..c tr`nh b`ay
`eu, co the de d`ang mo. ro.ng len ba chi
`eu.
trong hai chi
`an: mo.t th`anh
Tru.o.c het ch
ung ta phan giai mo.t vector (th
u. nhat) th`anh hai th`anh ph
`an theo hu.o.ng cua vector (th
`an vuong goc vo.i vector
ph
u. hai) cho tru.o.c v`a mo.t th`anh ph
y. Trong
th
u. hai. B`ai toan n`ay co lien quan ma.t thiet den phan tch lu..c hap dan trong va.t l
`an w (go.i l`a phep chieu tru..c giao
H`nh 3.18 vector u du.o..c phan giai th`anh mo.t th`anh ph
cua u len v) do.c theo vector v cho tru.o.c v`a mo.t vector z vuong goc vo.i v. Ta co z = u w.
`an xac d.inh vector w t`
V` va.y ch c
u. u v`a v. Hien nhien vector w c`
ung hu.o.ng vo.i vector v
u.a
nhu.ng khac do. d`ai. Ho.n n
kwk = kuk cos()
hu,vi
= kuk kukkvk
v
= hu, kvk
i.
v
. Va.y
Ma.t khac, w = kwk kvk

w=

hu, vi
v.
kvk2

De d`ang kiem tra r`a ng vector z vuong goc vo.i vector v, v`a kzk2 = kuk2 kwk2 .
Bay gi`o. ap du.ng nh
u.ng ket qua tren de xac d.inh vector phan xa.. Xet tia theo hu.o.ng
vector ch phu.o.ng c ga.p du.`o.ng thang l v`a phan xa. la.i theo hu.o.ng r (xem H`nh 3.19(a)).
K
y hie.u n l`a phap vector cua du.`o.ng thang l. Khi do, goc ho..p bo.i gi
u.a hai vector c v`a n
b`a ng goc ho..p bo.i gi
u.a hai vector r v`a n (b`a ng ).
`an m do.c theo n v`a th`anh ph
`an e vuong
H`nh 3.19(b) phan giai vector c th`anh th`anh ph
`an e vuong goc vo.i n nhu.ng co th`anh ph
`an
goc vo.i n. Do tnh doi x
u.ng, r co c`
ung th`anh ph
.
.
.
ngu o. c la.i do.c theo n, do do r = e m. Nhu ng e = c m nen r = c 2m. V` vector m l`a
116

n
......
........
....
......
.......
........
......
..
......
......
......
......
...
.....
.
......
.
.
.
.
.
.
......
......
......
....
.....
......
...
......
......
......
...
......
.....
.
.
.
......
.
.
.
.
......
.....
...
......
.....
...... .................. ..........
......... .. .........
........ .. .....
.
.
.
.
.....................................................................................................................................................................................................................................................................

(a)

l/

n
........
...........
...
... ........
........
..............
......
...... ....
......
.....
......
....
..
......
.....
.
.
.
.
......
.
....
.
...
......
......
...
....
...
......
.....
.
.
.
.
..
.
.
.
...
......
...
.....
.
..
......
.
.
.
...
.
.
......
...
.
.
....
.
.
.
.
.
...
......
....
...
.
..
.
......
.
.
.
...
...
.
......
.
...
.
.
.
.
.
.
...
......
. .........
...
.
.
.
...
.
...... . .. .....
.........
.
.
.
.
.
.
..
.
.
........................................................................................................................................................................................................................................................................

(b)
l

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

H`nh 3.19: Phan xa. cua tia t`


u. ma.t.
`an trong phan giai cua vector c theo vector n nen
th`anh ph
m=

hc, ni
n.
knk2

Suy ra
r =c2

hc, ni
n.
knk2

Thu tu.c sau xac d.inh vector phan xa. r t`


u. vector c v`a phap vector n :
void Reflection(Vector2D c, Vector2D n, Vector2D *r)
{
float Coeff = 2*Dot2D(c, n)/Dot2D(n, n);
(*r).dx = c.dx - Coeff*n.dx;
(*r).dy = c.dy - Coeff*n.dy;
}

3.6.2

Giao cu a tia s
ang v`
ad
u.`
o.ng th
a ng

ung ta, tia sang se va cha.m v`ao hai doi tu.o..ng: cac tru. tr`on (du.o..c
Trong u
.ng du.ng cua ch
- e
mo h`nh bo.i cac h`nh tr`on) v`a cac b
u.c tu.`o.ng (du.o..c bieu dien bo.i cac du.`o.ng thang). D
117

`ong kn l`a da giac l


`oi. Khi do, da giac se l`a giao cua cac
do.n gian ch
ung ta se gia thiet bu
.
.
.
.
nu a ma.t phang ngo`ai v`a du o. c mo h`nh hoa bo i ho. cac du.`o.ng thang nhu. da tr`nh b`ay trong
`an 3.4.
Ph
`ong kn da du.o..c di.nh ngha, ke tiep ch
`an xac d.inh vi. tr giao cua tia
Vo.i bu
ung ta c
sang vo.i b
u.c tu.`o.ng. Phu.o.ng tr`nh tham so cua tia sang xuat phat t`
u. diem S chuyen do.ng
theo vector ch phu.o.ng c cho bo.i
R(t) := S + ct,

t 0.

B
u.c tu.`o.ng tu.o.ng u
.ng du.`o.ng thang

l := {P R2 | hn, OP i = D},
`ong kn.
trong do phap vector n cua du.`o.ng thang l du.o..c cho.n hu.o.ng ra ngo`ai bu
y hie.u , di qua S co vector ch phu.o.ng c cat du.`o.ng
Neu hn, ci 6= 0 th` du.`o.ng thang, k
thang l ta.i diem Ph = S + cth , trong do

D hn, OSi
th =
.
hn, ci
De d`ang thay r`a ng, th 0 neu v`a ch neu tia sang R(t) cat b
u.c tu.`o.ng l ta.i Ph . Ngu.o..c la.i,
neu hn, ci = 0 th` du.`o.ng thang (v`a do do tia sang) se song song vo.i du.`o.ng thang l. Trong
tru.`o.ng ho..p n`ay ta gan th l`a mo.t gia tri. am n`ao do, chang ha.n 1.
V du. 3.6.1 Cho du.`o.ng thang co phu.o.ng tr`nh 6x 8y + 10 = 0 v`a tia sang xuat phat
- u.`o.ng thang co phap vector
t`
u. S(7, 4) di chuyen theo vector ch phu.o.ng c = (2, 1)t . D
n = (6, 8)t v`a ha` ng so D = 10. Ta co

th

D hn, OSi
=
hn, ci
10 (42 32)
= 1.
=
(12 8)

Suy ra giao diem I cua tia v`a du.`o.ng thang xac d.inh bo.i
I = S + th c = (7, 4) + (2, 1) = (5, 5).
Vector phan xa.
r = c2

hn, ci
n
knk2
118

20
=
2
1
100
2
1
=
.
5 11

V du. 3.6.2 Gia su. du.`o.ng thang l co phap vector n = (1, 4)t v`a h`a ng so D = 5. Xet tia
sang xuat phat t`
u. S(1, 2) di chuyen theo vector ch phu.o.ng c = (1, 1)t . V` hn, ci = 5 6= 0
nen th`o.i diem giao xac d.inh bo.i

D hn, OSi
5 (9)
14
th =
=
= .
hn, ci
5
5
Do th > 0 nen tia sang se giao vo.i du.`o.ng thang l ta.i diem Ph xac d.inh bo.i

14
9 4
,
.
Ph = S + th c = (1, 2) + (1, 1) =
5
5 5
T`
u. do co vector phan xa.
hn, ci
r =c2
n=
knk2

1
1

10

17

1
4

7
17

23
17

Cac ket qua du.o..c tong ket trong thu tu.c xac d.inh th`o.i diem giao th nhu. sau:
void Ray_With_Line(Point2D S, Vector2D c, Vector2D normal,
float D, float *t_hit)
{
float Denom = Dot2D(normal, c);
Vector2D s;
PointToVector2D(S, &s);
if (Denom == 0.0) *t_hit = -1.0;
else
*t_hit = (D - Dot2D(normal, s))/Denom;
}
Khi tia sang song song vo.i du.`o.ng thang, Denom = 0, thu tu.c thong bao cho ta biet
b`a ng cach gan t hit l`a mo.t gia tri. khong the xay ra. Bat k`
y mo.t gia tri. am l`a khong the
.
v` tia sang bat d`au h`anh tr`nh cua no ta.i th`o i diem xuat phat t = 0.
119

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

l4

t4

l5

......

t2
|

.......

.......

l3

t1

t2

t1
|

t3

l1

l2

t5
|
1

t4
|

|
0
u.c tu.`o.ng.
H`nh 3.20: Giao vo.i cac b

t3
|

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

- e kiem tra tac du.ng cua thu tu.c n`ay trong u


D
.ng du.ng, xet tru.`o.ng ho..p do.n gian nhat:
`ong kn v`a do do tia sang ch ga.p cac b
Khong co cac du.`o.ng tr`on ben trong bu
u.c tu.`o.ng.
`ong kn co nam b
H`nh 3.20 minh ho.a bu
u.c tu.`o.ng v`a tia S + ct. Du..a tren cac th`o.i diem giao
u.c tu.`o.ng, ta co the xac d.inh chnh xac b
u.c tu.`o.ng m`a tia sang ga.p.
cua tia sang vo.i cac b
- e xac d.inh b
D
u.c tu.`o.ng m`a tia sang ga.p, ta go.i thu tu.c Ray With Line() vo.i moi b
u.c
tu.`o.ng v`a lu.u gi
u. gia tri. th`o.i diem giao. B
u.c tu.`o.ng m`a tia sang ga.p o. pha tru.o.c se tu.o.ng
u
.ng vo.i th`o.i diem giao du.o.ng; b
u.c tu.`o.ng co giao diem o. pha sau hay song song vo.i tia
`e cac gia tri. t1 , t2 , . . . , t5
sang co th`o.i diem giao am. Gia su. thu tu.c Ray With Line() tra v
`eu tang d
`an
tu.o.ng u
.ng th`o.i diem giao cua tia sang vo.i cac b
u.c tu.`o.ng. Sap xep la.i theo chi
cac gia tri. n`ay ta du.o..c
t2 < t1 < t5 = 1 < 0 < t4 < t3 .
Hien nhien, th`o.i diem giao du.o.ng nho nhat se tu.o.ng u
.ng b
u.c tu.`o.ng m`a tia sang ga.p.
Sau khi b
u.c tu.`o.ng v`a th`o.i diem giao th du.o..c xac d.inh, ta go.i thu tu.c ve doa.n thang
`an 1.1) t`
(xem Ph
u. vi. tr S den vi. tr mo.i P = S + cth . Ke tiep la.p la.i tien tr`nh vo.i tia mo.i
xuat phat t`
u. S = P v`a di chuyen theo hu.o.ng phan xa. cua no. Hu.o.ng r cua tia sang phan
120

xa. xac d.inh bo.i


r = c 2hc, un iun ,
trong do un l`a phap vector do.n vi. cua b
u.c tu.`o.ng tu.o.ng tac vo.i tia sang. Thua.t toan lu.u
gi
u. thong tin b
u.c tu.`o.ng m`a tia sang bat ga.p d`au tien sao cho phap vector cua no co the
truy ca.p de d`ang t`
u. d
u. lie.u ban d`au. B
u.c tu.`o.ng co the mieu ta bo.i kieu d
u. lie.u Line2D.1
`ong kn du.o..c lu.u tr
To`an bo. bu
u. da.ng danh sach lien ket cac b
u.c tu.`o.ng hay mo.t mang. Ma
`ong kn nhu. sau:
gia cua tien tr`nh chuyen do. ng cua tia sang trong bu
`ong kn, vi. tr xuat phat S v`a hu.o.ng c;
1. [Kho.i ta.o] Kho.i ta.o d
u. lie.u cua bu
2. [Bu.o.c la.p] Trong khi (chu.a chan) thu..c hie.n
T`m th`o.i diem giao t h du.o.ng nho nhat;
Tnh diem giao P = S + ct h;
Cho tia sang chuyen do.ng t`
u. S den P ;
Xac di.nh vector phan xa. r;
Ca.p nha.t S = P v`a c = r;
Ch
uy
ra` ng (ngo`ai bu.o.c d`au tien) diem xuat phat cua tia sang luon luon na` m tren
u.c tu.`o.ng n`ay du.o..c kiem tra trong tien tr`nh ke tiep de xac d.inh
b
u.c tu.`o.ng l n`ao do. Khi b
diem giao th` th`o.i diem giao tu.o.ng u
.ng vo.i l se b`a ng 0.0. Do do de tranh tnh toan v`a vie.c
`an bo qua vie.c kiem tra vo.i b
tia sang khong thoat khoi l ta c
u.c tu.`o.ng n`ay.

3.6.3

Giao cu a tia s
ang v
o.i d
u.`
o.ng tr`
on

`ong kn. Gia su. du.`o.ng tr`on (C) co ban knh R tam
Bay gi`o. ta se them cac tru. tr`on v`ao bu
I. Xet su.. tu.o.ng giao gi
u.a tia sang v`a du.`o.ng tr`on (C).
Phu.o.ng tr`nh giao diem cua tia sang vo.i du.`o.ng tr`on ta.i th`o.i diem t thoa man phu.o.ng
tr`nh:

k IS +ctk2 = R2 .
Suy ra

k IS k2 + 2hIS, cit + kck2 t2 = R2 .


1

`om hai tru.`o.ng: phap vector n cua du.`o.ng thang v`a h`a ng so D.
Cau tr
uc Line2D g

121

Hay tu.o.ng du.o.ng


At2 + 2Bt + C = 0,
trong do
A = kck2 ,

B = hIS, ci,

C = k IS k2 R2 .
Nghie.m (co the ao) cua phu.o.ng tr`nh ba.c hai n`ay xac di.nh bo.i

B
B 2 AC
th =
.
A
A
Ch
uy
r`a ng A 6= 0 (ta.i sao?). Neu bie.t th
u.c := B 2 AC am, phu.o.ng tr`nh ba.c hai khong
co nghie.m thu..c, trong tru.`o.ng ho..p n`ay tia sang khong ga.p du.`o.ng tr`on. Neu ba` ng khong,
tia sang di su.o..t qua du.`o.ng tr`on (tiep x
uc ta.i mo.t diem). Neu du.o.ng, phu.o.ng tr`nh co
`eu cua vector
hai nghie.m v`a ta co tu.o.ng u
.ng hai giao diem. V` tia sang di chuyen theo chi
c khi t tang, nghie.m du.o.ng nho ho.n se tu.o.ng u
.ng vo.i th`o.i diem giao.
V du. 3.6.3 Cho du.`o.ng tr`on co phu.o.ng tr`nh
(x 1)2 + (y 4)2 = 4
- u.`o.ng tr`on
v`a tia sang xuat phat t`
u. S(8, 9) di chuyen theo vector ch phu.o.ng c = (1, 1)t . D
co tam I = (1, 4) v`a ban knh R = 5. Phu.o.ng tr`nh giao diem cua tia sang vo.i du.`o.ng tr`on
ta.i th`o.i diem th thoa man phu.o.ng tr`nh:
At2 + 2Bt + C = 0,
trong do
A = kck2 = 2,

B = hIS, ci = 12,

C = k IS k2 R2 = 70.
Ta co = B 2 AC = 4 > 0. Suy ra th`o.i diem giao

B
B 2 AC
= 5.
th =
A
A

- a.t n =IPh = (2, 0)t . Ta co vector


Va.y to.a do. giao diem l`a Ph = S + th c = (8 5, 9 5). D
phan xa.
hn, ci
n
r = c2
knk2


1
2 2
=
2
4
1
0

1
=
.
1
122

V du. 3.6.4 Gia su. du.`o.ng tr`on (C) tam I(0, 0) ban knh R = 5. Xet tia sang xuat phat

t`
u. S(7, 0) di chuyen theo vector ch phu.o.ng c = (1, 1)t . Ta co IS= (7, 0)t v`a
A = kck2 = 2,

B = hIS, ci = 7,

C = k IS k2 R2 = 49 25 = 24.
Suy ra phu.o.ng tr`nh ba.c hai co da.ng
2t2 14t + 24 = 0.
Vi = B 2 AC = 49 48 = 1 > 0 nen th`o.i diem giao

B
71
th =
=
= 3.
A
2
Do th > 0 nen tia sang se giao vo.i du.`o.ng tr`on (C) ta.i diem Ph xac d.inh bo.i
Ph = S + th c = (7, 0) + 3(1, 1) = (4, 3).
T`
u. do co vector phan xa.

r =c2

hP I, ci

k PI

P I=

k2

25

4
3

17
25
31
25

Tnh toan tren de d`ang du.o..c thu..c hie.n qua thu tu.c
void Ray_With_Circle(Point2D S, Vector2D c, Point2D Center, float Rad,
float *t_hit)
{
float A, B, C, delta;
Vector2D tempt;
tempt.dx = S.x - Center.x;
tempt.dy = S.y - Center.y;
A = Dot2D(c, c);
B = Dot2D(tempt, c);
C = Dot2D(tempt, tempt) - Rad*Rad;
delta = B*B - A*C;

123

if (delta < 0.0) *t_hit = -1.0;


else
{
*t_hit = (-B - sqrt(delta))/A;
}
}
Ngay khi gia tri. th du.o..c tnh, diem giao Ph xac d.inh theo cong th
u.c S + cth . V` tiep
tuyen vo.i du.`o.ng tr`on ta.i Ph vuong goc vo.i du.`o.ng thang qua hai diem I (tam du.`o.ng tr`on)
uc du.`o.ng tr`on ta.i Ph l`a vector
v`a Ph , nen co the cho.n phap vector cua du.`o.ng thang tiep x

IPh .

3.6.4

X
ay du..ng v du. ray tracing

`an thay doi khong dang ke ma gia trong Ph


`an 3.6.2 cho tru.`o.ng ho..p co cac tru. tr`on
Ta ch c
`ong kn. Danh sach cac b
trong bu
u.c tu.`o.ng du.o..c bo sung them cac tru. tr`on. Cach do.n gian
nhat l`a go.p hai doi tu.o..ng n`ay v`ao c`
ung mo.t danh sach lien ket co kieu ObjPtr nhu. sau:

typedef struct ObjNode *ObjPtr;


struct ObjNode
{
Boolean Kind;
Vector2D n;
float D;
ObjPtr Next;
};
Khi Kind b`a ng T rue, mau tin lu.u gi
u. thong tin cua b
u.c tu.`o.ng; ngu.o..c la.i no mieu ta
tru. tr`on: n l`a vector t`
u. goc to.a do. den tam du.`o.ng tr`on v`a D l`a ban knh.
- oi vo.i moi tia to.i, bat d`au ta.i S, di chuyen theo hu.o.ng vector c, cac ph
`an tu. cua
D
danh sach doi tu.o..ng se du.o..c quet. Con tro T empt co kieu ObjP tr duye.t to`an bo. danh sach:
`an xac di.nh th`o.i diem giao vo.i tia to.i. Th`o.i diem giao du.o.ng
vo.i moi doi tu.o..ng ch
ung ta c
`an d`au tien.
nho nhat chnh l`a th`o.i diem tot nhat theo ngha tia to.i bat ga.p doi tu.o..ng l
.
.
- `au tien T empt du.o..c
`an xac d.inh doi tu o. ng d`au tien n`ay. D
Trong thu tu.c, ch
ung ta c
ung c
124

so sanh vo.i Last Best, l`a con tro, tro den doi tu.o..ng m`a tia to.i xuat phat tren do (kho.i ta.o
du.o..c gan l`a N U LL) :
if (Tempt != Last_Best)
{
if (Tempt->Kind == True)
Ray_With_Line(S, c, Tempt->n, Tempt->D, &Time);
else
{
Center.x = Tempt->n.dx;
Center.y = Tempt->n.dy;
Ray_With_Circle(S, c, Center, Tempt->D, &Time);
}
if ((Time > 0) && (Time < Best_Time))
{
Best_Time = Time;
Best_Object = Tempt;
}
}
Khi diem va cha.m P du.o..c xac d.inh, tia sang se di chuyen t`
u. S den no. Phap vector
n v`a hu.o.ng phan xa. mo.i r du.o..c cho bo.i doa.n ma
if (Best_Object->Kind == True)
n = Best_Object->n;
else
{
n.dx = P.x - Best_Object->n.dx;
n.dy = P.y - Best_Object->n.dy;
}
Reflection(c, n, &r);
Cuoi c`
ung Last Best du.o..c ca.p nha.t bo.i Best Object de chuan bi. cho mo.t chu tr`nh
ke tiep.
125

3.6.5

`ong kn l`
Bu
a ellipse

`an n`ay xet chuyen do.ng cua tia sang trong bu


`ong kn co da.ng h`nh ellipse. Do b
Ph
u.c tu.`o.ng
`an:
trong tru.`o.ng ho..p n`ay l`a du.`o.ng cong, nen ta c
T`m giao cua tia sang vo.i ellipse; v`a
T`m hu.o.ng chuyen do. ng cua tia sang sau khi no phan xa. t`
u. b
u.c tu.`o.ng.
Xet ellipse
f (x, y) := b2 x2 + a2 y 2 a2 b2 = 0

co cac tieu diem ( a2 b2 , 0) (gia thiet a > b).


`an tren, giao cua tia sang vo.i b
Tu.o.ng tu.. nhu. ph
u.c tu.`o.ng ellipse du.o..c xac d.inh b`a ng
cach thay phu.o.ng tr`nh S + ct xac d.inh no v`ao phu.o.ng tr`nh ellipse: ta du.o..c phu.o.ng tr`nh
ba.c hai theo t. Neu diem xuat phat na` m trong ellipse, giai phu.o.ng tr`nh ta du.o..c mo.t nghie.m
du.o.ng v`a mo.t nghie.m am. Gia tri. du.o.ng du.o..c su. du.ng de xac d.inh giao diem.
- e t`m hu.o.ng cua tia phan xa., ta c
`an tnh phap vector n cua b
D
u.c tu.`o.ng. De d`ang thay
r`a ng vector n`ay t le. vo.i vector gradient f (x, y) = 2(b2 x, a2 y)t cua du.`o.ng cong ellipse. Ta
`ong kn, nen co the da. t n := (b2 x, a2 y)t .
su. du.ng phap vector hu.o.ng v`ao trong bu
Co the ch
u.ng minh r`a ng, qu
y da.o cua tia sang ch co mo.t trong ba da.ng:
Neu tia sang di qua mo.t tieu diem, th` sau khi phan xa. no se di qua tieu diem khac.
Neu ban d`au tia sang khong cat doa.n thang noi hai tieu diem, th` no se khong bao
gi`o. cat sau do. Qu
y da.o cua no se l`a nh
u.ng doa.n thang tiep x
uc vo.i ellipse nho ho.n
co c`
ung tieu diem.
Neu ban d`au tia sang cat doa.n thang noi hai tieu diem, th` qu
y da.o cua no se l`a nh
u.ng
doa.n thang na` m trong v`
ung lien thong gio.i ha.n bo.i ellipse v`a hyperbol co c`
ung tieu
diem.

126

Chu.o.ng 4
T
o m`
au v`
ung
`eu lnh vu..c khac nhau cua d`o ho.a may tnh,
B`ai toan to m`au v`
ung du.o..c su. du.ng trong nhi
`om va.n do. ng, ta.o bong, v`a bieu dien cac doi tu.o..ng ba chi
`eu c
bao g
ung nhu. nh
u.ng u
.ng
`en d
y anh, truy
u. lie.u anh v`a hoa.t h`nh may tnh (xem [9]).
du.ng trong xu. l

4.1

C
ac d
i.nh ngha

`eu cach khac nhau v`a tu.o.ng u


Cac v`
ung co the d.inh ngha theo nhi
.ng vo.i nh
u.ng cau tr
uc
d
u. lie.u khac nhau. Cac bieu dien khac nhau n`ay rat quan tro.ng trong nh
u.ng lnh vu..c nhu.
nha.n da.ng mau v`a thi. giac may tnh, o. do cac thong tin cua mo.t anh co the nha.n du.o..c t`
u.
`an trong cua v`
cac chu tuyen bao quanh v`
ung hay ph
ung. Trong pha.m vi nghien c
u.u, co hai
`an to m`au: v`
loa.i v`
ung c
ung du.o..c d.inh ngha bo.i cac pixel v`a v`
ung di.nh ngha bo.i da giac.
V`
ung l`a mo.t nhom cac pixel lien thong trong bo. nho. m`an h`nh du.o..c phac ho.a bo.i
h`nh da.ng du.`o.ng bien n`ao do. Ch
ung ta co the xem mo.t v`
ung trong bo. nho. m`an h`nh nhu.
`an trong v`a bien. Tuy nhien, de hieu cac ket qua tr`nh b`ay trong ph
`an sau,
to ho..p cua ph
`an mo.t v`ai khai nie.m.
ch
ung ta c

4.1.1

V`
ung d
i.nh ngha bo.i pixel

Ta gia thiet v`
ung du.o..c bao quanh bo.i cac pixel m`a gia tri. cua no khac vo.i gia tri. cac pixel
ben trong v`
ung. Ch
ung ta co the gia thiet, chang ha.n, tat ca cac pixel ben trong v`
ung co
.
.
.
.
`e vo i pixel ben trong nhu.ng
c`
ung gia tri., v`a trong tru `o ng ho. p n`ay pixel l`a pixel bien neu no k
127

co gia tri. khac vo.i gia tri. pixel ben trong v`


ung. Ch
ung ta c
ung co the gan mo.t pha.m vi cho
.
`an trong v`a bien. Tuy nhien, de do.n gian, thua.t toan tr`nh
phep cac gia tri. pixel vo i ca ph
`an n`ay gia thiet cac pixel bien co c`
b`ay trong ph
ung mo.t gia tri., v`a cac pixel ben trong v`
ung
co c`
ung gia tri. (khac gia tri. bien).
`eu u
Trong nhi
.ng du.ng, vie.c su. du.ng mo.t pha.m vi thay doi cua cac to.a do. pixel xac
`an cua bien cua mo.t v`
`an thiet. Do do, khai nie.m pixel
d.inh to`an bo. hay mo.t ph
ung l`a c
bien co the du.o..c no.i ro.ng ra de ch
u.a cac pixel ben ngo`ai mo.t v`
ung xac d.inh tru.o.c. Vo.i
cach n`ay, mo.t v`
ung co the bi. cha.n bo.i bo. de.m m`an h`nh hoa.c bo.i mo.t cu.a so cho tru.o.c
c
ung nhu. bo.i cac pixel co gia tri. cho tru.o.c hoa.c thuo.c mo.t pha.m vi n`ao do.
y theo cac m`au cua cac pixel, v`a nh
u.ng gia tri. m`au n`ay
Cac v`
ung du.o..c d.inh ngha tu`
- e xac d.inh ph
`an trong, ph
`an ngo`ai v`a bien cua v`
`an bat d`au v`a
cho biet vi. tr cua ph
ung. D
`an d.inh ngha hai pixel l`a k
`e nhau hay lien thong.
ket th
uc cua v`
ung, ta c
`e lien thong. Gia su. p = (x, y) l`a pixel n`ao do. K
Co hai di.nh ngha co. ban v
y hie.u
N4 (p) := {(x 1, y), (x + 1, y), (x, y 1), (x, y + 1)}
l`a lan ca.n 4-lien thong cua p; v`a
N8 (p) := N4 (p) {(x 1, y 1), (x + 1, y 1), (x 1, y + 1), (x + 1, y + 1)}
l`a lan ca.n 8-lien thong cua p. Do do pixel (23, 35) l`a 4-lien thong vo.i pixel (23, 36) v`a 8-lien
thong vo.i pixel (24, 36) nhu.ng khong 4-lien thong vo.i pixel (24, 36).
`an phan bie.t cach di.nh ngha v`
`an trong hay bien.
Ch
ung ta c
ung c
ung theo ph
- .inh ngha bo.i ph
`an trong. Tat ca cac pixel ben trong v`
ung co c`
ung mo.t gia tri. m`au
D
.
OldV alue, v`a cac pixel bien co gia tri. m`au khac vo i OldV alue. V`
ung di.nh ngha bo.i
`an trong co the co lo thung g
`om cac pixel co m`au khac vo.i OldV alue.
ph
- .inh ngha bo.i bien. V`
ung d.inh ngha bo.i ta.p cac pixel co m`au bien-BoundaryValue,
D
v`a cac pixel ben trong khong co gia tri. n`ay. Cac pixel co m`au bien BoundaryValue co
the xuat hie.n ben trong v`
ung tu.o.ng u
.ng vo.i nh
u.ng lo thung.
`an phai gia thiet cac
Neu ta cho phep cac pixel ben trong v`
ung l`a 8-lien thong th` c
.
.
.
.
pixel tren du `o ng bien xung quanh v`
ung phai 4-lien thong. Ngu o. c la.i, neu gia thiet cac pixel
`an gia thiet cac pixel ben trong l`a 4-lien thong. L
bien l`a 8-lien thong th` c
y do cua gia thiet
.
.
`an trong du o. c d.inh ngha l`a 8-lien thong th` pixel ben trong
n`ay l`a: neu ca hai bien v`a ph
co the du.o..c noi vo.i pixel ben ngo`ai du.`o.ng bien ta.i nh
u.ng no.i m`a cac pixel bien lien thong
theo du.`o.ng cheo.
128

4.1.2

V`
ung d
i.nh ngha bo.i d
a gi
ac

Cac v`
ung da giac du.o..c xac d.inh bo.i cac dnh cua no. Co the su. du.ng mang hoa.c cau tr
uc
.
.
.
.
.
.
.
`en du o. c d.inh ngha bo i da giac. Vo i nh
u ng thua.t toan to
d
u lie.u kieu VertPtr2D doi vo i mi
.
.
.
.
`an phan bie.t cac lo p da giac: l
`oi ngu o. c vo i lom, do.n da giac
m`au v`
ung da giac ch
ung ta c
ngu.o..c vo.i da giac tu.. cat, v`a van van, v` mo.t so thua.t toan cha.y du
ng vo.i lo.p n`ay nhu.ng
sai vo.i lo.p khac.
- e thu..c hie.n cac thua.t toan to m`au trong chu.o.ng n`ay, ch
`an thiet su. du.ng cac
D
ung ta c
h`am
`e gia tri. m`au ta.i diem ve (x, y); v`a
getpixel(int x, int y) tra v
putpixel(int x, int y, int c) da.t m`au ve c ta.i diem ve (x, y).

4.2

`au loang
Thu
a.t to
an t
o m`
au theo v
et d

`eu nhat l`a xuat phat t`


Phu.o.ng phap du.o..c biet den nhi
u. pixel ha.t giong, di chuyen theo
tat ca bon hay tam hu.o.ng v`a ap du.ng thua.t toan de. qui. Cac thu tu.c FloodFill() v`a
u.ng v du. nhu. va.y. Ch
ung ta bat d`au vo.i hai thua.t
BoundaryFill() tr`nh b`ay du.o.i day l`a nh
toan to m`au cho cac v`
ung di.nh ngha bo.i cac pixel. Tru.o.c het xet cac v`
ung d.inh ngha bo.i
`an trong v`a 4-lien thong. Thua.t toan to m`au thay doi m`au cua mo.i pixel ben trong, m`au
ph
OldV alue, th`anh m`au mo.i-N ewV alue. Phu.o.ng phap n`ay go.i l`a thua.t toan to m`au theo vet
`an trong
`au loang (flood fill) bo.i v` no bat d`au vo.i mo.t pixel ha.t giong (seed) trong ph
d
.
.
`an trong cua mi
`en vo i mo.t m`au mo i. Thua.t toan to m`au
cua v`
ung v`a loang ra to`an bo. ph
`au loang thu.`o.ng du.o..c su. du.ng khi co su.. tu.o.ng tac gi
theo vet d
u.a ngu.`o.i su. du.ng v`a tr`nh
u
.ng du.ng de to m`au v` ngu.`o.i su. du.ng co the ch ra vi. tr ha.t giong b`a ng cach danh dau ta.i
mo.t diem ben trong v`
ung sau do kho.i ta.o tien tr`nh to m`au.
tu.o.ng cua thua.t toan nhu. sau: neu pixel p = (x, y) thuo.c ph
`an trong cua v`
Y
ung (t
u.c
l`a, no co m`au OldV alue) th` thay doi m`au cua p th`anh m`au N ewV alue, v`a xu. l
y de. qui
cho bon pixel lan ca.n cua no. Ngu.o..c la.i se khong l`am g` ca.
void FloodFill(int x, int y, int OldValue, int NewValue)
{
if (getpixel(x, y) == OldValue)
129

{
putpixel(x, y, NewValue);
FloodFill(x - 1, y, OldValue, NewValue);
FloodFill(x + 1, y, OldValue, NewValue);
FloodFill(x, y + 1, OldValue, NewValue);
FloodFill(x, y - 1, OldValue, NewValue);
}
}
Ch
uy
ra` ng tien tr`nh to m`au kho.i d`au la.i vo.i moi pixel xuat hie.n trong l`o.i go.i cua
FloodFill(): Thua.t toan khong danh dau nh
u.ng v`
ung da duye.t qua tru.o.c do, co the xay
`e vo.i mo.t pixel ben trong v`
ra mo.t pixel k
ung c
ung l`a pixel ben trong v`
ung. Thua.t toan xu.
`an nhat m`a khong ch
l
y mo.t cach m`
u quang do kiem tra nh
u.ng lan ca.n g
uy
ra` ng no da
`oi. V` the, nhi
`eu pixel du.o..c kiem tra la.i v`ai l
`an v`a do do co mo.t so
du.o..c kiem tra tru.o.c do r
`en tu.o.ng
rat lo.n l`o.i go.i de. qui. Do do, thua.t toan n`ay co the gay ra tr`an stack vo.i mo.t mi
`an co th`o.i gian de quan l
doi nho do co h`ang tram l`o.i go.i de. qui. Ngo`ai ra, c
y tien tr`nh de.
ung
qui, khien cho qua tr`nh to m`au cha.m la.i. Nh
u.ng phu.o.ng phap hieu qua ho.n (nhu.ng c
.
.
.
.
.
`an sau.
ph
u c ta.p ho n) se du o. c d`e ca.p o cac ph
`om 5 pixel du.o..c d.inh ngha bo.i ph
`an trong vo.i m`au ben trong
V du. 4.2.1 Xet v`
ung (R) g
b`a ng 1 v`a ha.t giong s co to.a do. (4, 2) (pixel in da. m v`a du.o..c ga.ch du.o.i) trong H`nh 4.1.
Khi go.i thu tu.c F loodF ill(4, 2, 1, 2) day cac pixel d`au tien vo.i cac to.a do. tu.o.ng u
.ng se l`a
(3, 2), (2, 2), (1, 2), (3, 2), (2, 3), (2, 1), (4, 2), (3, 3), (2, 3), (4, 3), . . . .
`eu pixel du.o..c kiem tra nhi
`eu l
`an (chang ha.n
Co tat ca 21 l`o.i go.i thu tu.c, trong do co nhi
pixel (2,3)).
- e mo. ro.ng cho tru.`o.ng ho..p mi
`en du.o..c d.inh ngha 8-lien thong, ch
`an them
D
ung ta ch c
bon ch thi. cho bon pixel lan ca.n cheo, nhu. l`a
FloodFill(x + 1, y - 1, OldValue, NewValue);
Thu tu.c de. qui n`ay c
ung co the su.a doi doi vo.i nh
u.ng v`
ung di.nh ngha bo.i bien:
`an thay doi le.nh if. Nhu. tru.o.c, ha.t giong thuo.c ph
`an trong v`
ch
ung ta ch c
ung. Ta co ma
.
gia nhu sau:
130

6
5
4
3
2
1
0

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

0 0 0

0 0 0

0 0 0

0 0 0

1 0 0

0 0 0

0 1

4 5

0 0

`an trong.
H`nh 4.1: V du. to m`au v`
ung di.nh ngha bo.i ph
1. Lay gia tri. m`au c ta.i pixel (x, y).
`an to N ewV alue th` thu..c hie.n
2. Neu c khac m`au bien BoundaryV alue v`a khac m`au c
- a.t m`au N ewV alue ta.i pixel (x, y);
D
Go.i de. qui la.i thu tu.c cho bon (hoa.c tam) pixel lan ca.n cua (x, y).
Thua.t toan tren thu..c hie.n ngay ca tru.`o.ng ho..p BoundaryV alue b`a ng N ewV alue. Khi
cac gia tri. n`ay khac nhau, thua.t toan co the ket th
uc tru.o.c khi to`an bo. v`
ung du.o..c to m`au,
chang ha.n neu pixel ha.t giong ban d`au co m`au tr`
ung vo.i N ewV alue. Tu.o.ng tu.. nhu. tren,
`eu l
`an v`a kiem tra cac pixel mo.t cach m`
ha.n che cua thu tu.c n`ay l`a go.i de. qui nhi
u quang.

4.3

Thu
a.t to
an t
o m`
au theo con cha.y

Cach tiep ca.n hie.u qua ho.n khac phu.c t`nh tra.ng stack bi. tr`an se du.o..c tr`nh b`ay trong
`an n`ay. Phu.o.ng phap n`ay ph
`eu ngoa.i
ph
u.c ta.p ho.n nhu.ng do. sau cua stack giam rat nhi
`an trong cua v`
ung nhu. mo.t nhom cac doa.n thang
u.ng tru.`o.ng ho..p suy bien: ta xem ph
tr`
u. nh
`e nhau v`a lien thong theo chi
`eu du
ngang k
.ng thay cho mo.t nhom cac pixel lien thong theo
`eu ngang v`a du
`an du.o..c to se hie.u qua ho.n.
chi
.ng. Theo cach n`ay, vie.c kiem tra pixel n`ao c
`e nhau cua cac doa.n thang co lien quan g
`an ho.n vo.i bieu dien va.t l
Ngo`ai ra, khai nie.m k
y
.
.
.
.
.
cua cac pixel trong bo. nho m`an h`nh: cac pixel du o. c sap xep theo cac h`ang ngang du o. c
hien thi. trong suot qua tr`nh quet d`ong.
131

tu.o.ng co. ban cua nh


Y
u.ng thua.t toan con cha.y du..a tren cac d`ong quet n`a m ngang
u.ng pixel co gia tri. m`au l`a BoundaryV alue v`a khong co nh
u.ng pixel
bi. cha.n hai d`au bo.i nh
gia tri. N ewV alue tren do. Cac d`ong quet du.o..c to vo.i m`au N ewV alue trong mo.t v`ong la.p.
Moi d`ong quet du.o..c xac d.inh bo.i pixel ben phai nhat cua no; co t nhat mo.t doa.n thuo.c
`an chu.a to du.o..c lu.u trong stack.
moi ph
`om cac pixel lan ca.n ch
Thua.t toan xu. l
y nhu. sau. D`ong quet ngang g
u.a diem kho.i
d`au du.o..c to. Sau do kiem tra h`ang tren cua d`ong quet v`
u.a du.o..c to t`
u. trai sang phai de
t`m pixel ben phai nhat cua moi d`ong quet, v`a di.a ch cac pixel n`ay du.o..c cat v`ao mo.t bien
u.a du.o..c
Stack (kho.i ta.o gia tri. NULL). Thu..c hie.n tu.o.ng tu.. vo.i h`ang du.o.i cua d`ong quet v`
to. Khi mo.t d`ong quet da du.o..c xu. l
y theo cach n`ay, pixel tren dnh cua Stack du.o..c su.
du.ng nhu. mo.t diem ha.t giong mo.i; thua.t toan ket th
uc khi Stack rong. So. d`o chnh cua
thua.t toan n`ay nhu. sau:
Cat d.ia ch cua pixel ha.t giong s v`ao Stack;
while (Stack! = NULL)
{
Lay ha.t giong s t`
u. Stack cho bu.o.c tiep theo;
To m`au d`ong quet xac di.nh bo.i ha.t giong s;
Kiem tra h`ang tren v`a h`ang du.o.i de lay thong tin cac ha.t giong (neu co) v`a cat v`ao
Stack;
}
`au het cac d`ong quet co kha nang g
`om nhi
`eu pixel. Ngo`ai ra do
Do su.. lien ket cua v`
ung, h
.
cac d`ong quet na` m ngang, tien tr`nh to m`au cho moi d`ong quet du o..c thu..c hie.n theo th
u.
tu.. v`a co the sap da.t sao cho hie.u qua. Cac diem bien ben trai v`a phai cua d`ong quet du.o..c
phat hie.n b`a ng cach so sanh vo.i gia tri. BoundaryV alue, v`a sau do to`an bo. d`ong quet du.o..c
`an do.c la.i cac gia tri. m`au cua no. Nhom cac pixel
to vo.i gia tri. mo.i N ewV alue m`a khong c
.
.
.
.
co the du o. c to d`ong th`o i vo i mo.t thu tu.c da.t m`au thch ho..p.
H`am getpixel() thu.`o.ng xuyen du.o..c su. du.ng de t`m cac d`ong quet tren v`a du.o.i d`ong
quet hie.n h`anh. Khi duye.t t`
u. trai sang phai, co mo.t d`ong quet mo.i ben tren hay du.o.i neu
- i
`on ta.i pixel co m`au ta.i do thay doi t`
`eu g` se xay ra
t
u. BoundaryV alue sang OldV alue. D
khi v`
ung ban d`au co mo.t nhom nho cac pixel mang gia tri. N ewV alue?
132

Nh
a.n x
et 4.3.1 (i) Thua.t toan co the cai tien them de tranh kiem tra th`
u.a cac d`ong quet
`e nhau (xem [23]). Neu sau khi mo.t d`ong quet du.o..c to, d`ong tren no du.o..c duye.t de xac
k
`an mo. ro.ng n`a m ho`an to`an
d.inh mo.t d`ong quet mo.i, v`a tat ca cac d`ong quet mo.i co ph
`an mo. ro.ng cua cac d`ong quet hie.n h`anh (go.i l`a bong (shadow) cua d`ong quet hie.n
trong ph
`an
h`anh), sau do trong suot qua tr`nh xu. l
y d`ong quet tren, d`ong quet na` m du.o.i no khong c
duye.t de t`m d`ong quet mo.i. C
ung va.y, tien tr`nh duye.t mo.t du.`o.ng xac di.nh cac d`ong quet
`eu l
`an moi pixel l`a khong c
`an
co the to ho..p vo.i tien tr`nh to cac pixel, bo.i va.y vie.c do.c nhi
thiet.
u.a, to`an bo. tien tr`nh xu. l
y duye.t cac d`ong tren v`a du.o.i d`ong quet hie.n h`anh
(ii) Tot ho.n n
co the tang nhanh ho.n b`a ng cach su. du.ng them (khong dang ke) bo. nho.. Sau khi to m`au
d`ong quet hie.n h`anh, t`m trong h`ang tren mo.t pixel lien thong vo.i d`ong quet hie.n h`anh, v`a
pixel ha.t giong n`ay du.o..c day v`ao stack c`
ung vo.i cac diem bien cua d`ong quet hie.n h`anh (do
do go.i l`a d`ong quet cha). Sau do thu tu.c to m`au du.o..c thu..c hie.n du..a v`ao pixel ha.t giong.
Neu sau khi to m`au, d`ong quet du.o..c to khong keo d`ai cac diem bien cua d`ong quet cha
`eu
th` duye.t bong cua d`ong quet cha cho den khi ha.t giong mo.i du.o..c t`m thay. Trong nhi
ung do. d`ai hoa.c lo.n ho.n do. d`ai d`ong
tru.`o.ng ho..p, d`ong quet tren d`ong quet hie.n h`anh co c`
`an xac d.inh them cac pixel ha.t giong [13].
quet hie.n h`anh nen khong c
(iii) Ta co the xay du..ng mo.t d`o thi. LAG (line-adjacency graph) bieu dien tnh lien thong
`e nhau trong v`
gi
u.a cac d`ong quet k
ung (xem H`nh 4.2). B`ai toan to m`au v`
ung tu.o.ng du.o.ng
vo.i duye.t tat ca cac dnh cua d`o thi. LAG. Trong thu..c te, b`ai toan vieng tham tat ca cac
- e co them thong tin,
dnh cua d`o thi. tu.o.ng doi de d`ang so vo.i vie.c xay du..ng d`o thi. LAG. D
xem [22]).

1
y

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

5
`e d`o thi. LAG.
H`nh 4.2: Mo.t v du. v

133

4.4

Thu
a.t to
an t
o m`
au theo bi
en

`an trong cua no, nen ta co the to m`au v`


V` bien cua v`
ung xac di.nh ph
ung du..a tren hai pixel
bien lien tiep cua c`
ung mo.t d`ong quet m`a doa.n noi hai pixel do na` m ho`an to`an trong v`
ung
.
.
.
.
`an to. Pavlidis ([15]) du a ra phu o ng phap to m`au v`
`an theo bien.
c
ung c`
ung l
uc vo i vie.c l
`an theo bien
Tuy nhien thua.t toan n`ay to ra khong thua.n lo..i. Neu ch
ung ta tach b`ai toan l
.
`em deo ho.n.
khoi tien tr`nh to m`au ben trong v`
ung, ta se co mo.t thua.t toan mo i m
Xet v`
ung (R) du.o..c gio.i ha.n bo.i mo.t du.`o.ng bien kn; v`
ung n`ay co the ch
u.a cac lo
tu.o.ng cua thua.t toan to m`au du..a tren bien nhu. sau: d`au tien ta xuat phat t`
thung. Y
u.
`an to (R) v`a o. pha ben phai nhat cua
pixel ha.t giong s n`a m tren bien ngo`ai c`
ung cua v`
ung c
`eu kim d`ong
v`
ung. Vo.i ha.t giong s ta t`m cac diem tren bien lien tiep theo hu.o.ng c`
ung chi
`o cho to.i khi ga.p la.i diem xuat phat ban d`au (hai diem bien lien tiep c`
h
ung na` m trong mo.t
lan ca.n 8-lien thong). Ke tiep ch
ung ta t`m cac lo hong (neu co) v`a xay du..ng cac du.`o.ng
`an lien thong cua du.`o.ng bien du.o..c xay du..ng
bien tu.o.ng u
.ng cua no. Ta.p ho..p cac th`anh ph
`an tu. l`a BPEnd v`a co kieu cau tr
tren (du.o..c lu.u trong mang BP[] vo.i so ph
uc BPstruct) se
`om ba bu.o.c:
cho ta thong tin chnh xac de to m`au v`
ung (R). Tien tr`nh to m`au v`
ung g
`an theo
1. Ta.o mo.t danh sach du.o..c sap th
u. tu.. BP[] ch
u.a thong tin cua cac pixel bien (l
bien) du..a tren pixel ha.t giong s.
`an trong v`
2. Duye.t ph
ung de xac di.nh cac lo hong (neu co); t
u.c l`a t`m mo.t ha.t giong
mo.i s tu.o.ng u
.ng lo hong.
3. Noi b`a ng cac cham diem trong danh sach BP[] t`
u. trai sang phai theo d`ong ngang;
t
u.c l`a to m`au v`
ung S.
Thu tu.c chnh BoundaryFill() trong chu.o.ng tr`nh Boundary.cpp thu..c hie.n tien tr`nh
to m`au v`
ung (R) su. du.ng ba bu.o.c tr`nh b`ay tren.
Chu.o.ng tr`nh Boundary.cpp

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<search.h>
#include<graphics.h>
134

#include<stdio.h>
#include<dos.h>
#include<alloc.h>
#define MaxElement 3000
#define BLOCKED 0
#define UNBLOCKED 1
#define True 1
#define False 0
struct BPstruct
{
int x, y;
char flag;
} BP[MaxElement];
int BPstart, BPend = 0;
int PrevD, PrevV, D;
struct BPstruct CurrentPixel;
int

CompareBP(const void *arg1, const void *arg2);

int

ScanRight(int x, int y);

int

FindNextPixel();

int

FindBP(int d);

void TraceBorder (int startx, int starty);


void ScanRegion (int *x, int *y);
void SortBP ();
void AddBPlist(int d);
void FillRegion();
void NextXY(int *x, int *y, int Direction);
void SameDirection();
void DifferentDirection(int d);
void AppendBPlist(int p, int q, int f);
void

BorderFill(int x, int y)

{
135

do
{
TraceBorder(x, y);
SortBP();
ScanRegion(&x, &y);
}
while (BPstart < BPend);
FillRegion();
}
void ScanRegion(int *x, int *y)
{
int i = BPstart, xr;
while (i < BPend)
{
if (BP[i].flag == BLOCKED) i++;
else
if (BP[i].y != BP[i+1].y) i++;
else
{
if (BP[i].x < BP[i+1].x - 1)
{
xr = ScanRight(BP[i].x + 1, BP[i].y);
if (xr < BP[i+1].x)
{
*x = xr;
*y = BP[i].y;
break;
}
}
i += 2;
}
}
BPstart = i;
}
136

void SortBP()
{
qsort(BP + BPstart, BPend - BPstart, sizeof(struct BPstruct), CompareBP);
}
int CompareBP(const void *arg1, const void *arg2)
{
int i;
i = ((BPstruct*)arg1)->y - ((BPstruct*)arg2)->y;
if (i != 0) return((i < 0) ? -1 : 1);
i = ((BPstruct*)arg1)->x - ((BPstruct*)arg2)->x;
if (i != 0) return((i < 0) ? -1 : 1);
i = ((BPstruct*)arg1)->flag - ((BPstruct*)arg2)->flag;
return((i < 0) ? -1 : 1);
}
void FillRegion()
{
int i;
for (i = 0; i < BPend;)
{
if (BP[i].flag == BLOCKED) i++;
else
if (BP[i].y != BP[i + 1].y) i++;
else
{
if (BP[i].x < BP[i + 1].x -1)
line(BP[i].x + 1, BP[i].y, BP[i+1].x - 1, BP[i].y );
i += 2;
}
}
}
137

void TraceBorder(int startx, int starty)


{
int done, Nextfound;
CurrentPixel.x = startx;
CurrentPixel.y = starty;
D = 6;
PrevD = 4;
PrevV = 2;
do
{
Nextfound = FindNextPixel();
done = ((CurrentPixel.x == startx) && (CurrentPixel.y == starty));
}
while (Nextfound && !done);
if (!Nextfound)
{
AppendBPlist(startx, starty, BLOCKED);
AppendBPlist(startx, starty, UNBLOCKED);
}
else
if ((PrevD <= 3) && (PrevD >= 1))
AppendBPlist(startx, starty, UNBLOCKED);
}
int

FindNextPixel()

{
int i, flag;
for (i = -1; i <= 5; i++)
{
flag = FindBP((D + i) & 7);
if (flag)
138

{
D = (D + i) & 6;
break;
}
}
return flag;
}
int FindBP(int d)
{
int x, y;
x =

CurrentPixel.x;

y =

CurrentPixel.y;

NextXY(&x, &y, d);


if (BorderValue == getpixel(x, y))
{
AddBPlist(d);
CurrentPixel.x = x;
CurrentPixel.y = y;
return True;
}
else
return False;
}
void NextXY(int *x, int *y, int Direction)
{
switch (Direction)
{
case 1:
case 2:
case 3:
*y -= 1;
break;
case 5:
case 6:
139

case 7:
*y += 1;
break;
}
switch (Direction)
{
case 3:
case 4:
case 5:
*x -= 1;
break;
case 1:
case 0:
case 7:
*x += 1;
break;
}
}
void AddBPlist(int d)
{
if (d == PrevD) SameDirection();
else
{
DifferentDirection(d);
PrevV = PrevD;
PrevD = d;
}
}
void SameDirection()
{
if (PrevD == 0)

BP[BPend - 1].flag = BLOCKED;

else
if (PrevD <= 3) AppendBPlist(CurrentPixel.x, CurrentPixel.y, UNBLOCKED);
else AppendBPlist(CurrentPixel.x, CurrentPixel.y, BLOCKED);
140

}
void DifferentDirection(int d)
{
if (PrevD == 4)
{
if (PrevV == 5) BP[BPend - 1].flag = BLOCKED;
AppendBPlist(CurrentPixel.x, CurrentPixel.y, BLOCKED);
}
else if (PrevD == 0)
{
BP[BPend - 1].flag = BLOCKED;
if (d == 7) AppendBPlist(CurrentPixel.x, CurrentPixel.y, BLOCKED);
else
AppendBPlist(CurrentPixel.x, CurrentPixel.y, UNBLOCKED);
}
else
{
AppendBPlist(CurrentPixel.x, CurrentPixel.y, UNBLOCKED);
if (((d >= 1) && (d <= 3) && (PrevD >= 5) && (PrevD <= 7)) ||
((d >= 5) && (d <= 7) && (PrevD >= 1) && (PrevD <= 3)))
AppendBPlist(CurrentPixel.x, CurrentPixel.y, UNBLOCKED);
}
}
void AppendBPlist(int p, int q, int f)
{
BP[BPend].x = p;
BP[BPend].y = q;
BP[BPend].flag = f;
++BPend;
}

141

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

H`nh 4.3: Cac hu.o.ng di chuyen v`a ma tu.o.ng u


.ng.
int ScanRight(int x, int y)
{
while (getpixel(x, y) != BorderValue)
{
x++;
if (x == getmaxx())
break;
}
return x;
}

Thu tu.c TraceBoundary() ta.o mo.t mang BP[] ch


u.a d.ia ch cac pixel na` m tren bien
`an cua tung do. y,
cua v`
ung. Thu tu.c SortBP() sap xep la.i mang BP[] theo th
u. tu.. tang d
.
sau do ho`anh do. x v`a cuoi c`
ung l`a c`o flag. Thu tu.c ScanRegion() kiem tra cac doa.n thang
l na` m trong v`
ung gi
u.a moi ca.p pixel bien trong bang BP[]. Neu phat hie.n ra mo.t pixel bien
`e to.a do.
tren l, thu tu.c ScanRegion() se gia su. co mo.t lo thung trong v`
ung v`a do do se tra v
cua pixel bien (x, y); tren co. so. do, cac thu tu.c TraceBoundary() v`a SortBP() se ca.p nha.t
mang BP[] doi vo.i cac pixel na` m tren bien cua lo thung. Tien tr`nh n`ay tiep tu.c cho den
`an trong v`
khi to`an bo. ph
ung du.o..c duye.t. Cuoi c`
ung, thu tu.c FillRegion() su. du.ng danh
sach da sap xep cua cac pixel bien de to v`
ung b`a ng cac doa.n thang na` m ngang gi
u.a moi
ca.p pixel trong mang BP[].
Mo.t trong nh
u.ng tien tr`nh kho nhat cua thua.t toan to m`au theo bien l`a thu tu.c
142

tu.o.ng cua thua.t toan t`m bien nhu. sau. Xuat phat t`
TraceBoundary(). Y
u. ha.t giong s n`a m
`an theo chi
`eu kim d`ong h
`o t`
tren bien pha ben phai cua v`
ung. Ta se l
u. pixel n`ay den pixel
`eu kim d`ong h
`o nen ph
`an trong cua v`
khac tren bien. Do t`m kiem theo chi
ung luon luon
`e vo.i ph
`an trong, ta se khong
o. ben tay phai cua hu.o.ng di chuyen. Neu mo.t pixel khong k
- e bao dam cac pixel bien du.o..c phat hie.n l`a k
`e vo.i ph
`an trong cua
xem do l`a pixel bien. D
v`
ung ch
ung ta luon luon kiem tra pixel pha ben phai cua hu.o.ng t`m kiem d`au tien.
Thua.t toan d`ong nhat hu.o.ng t`m kiem vo.i mo.t trong tam ma trong H`nh 4.3 (xem
[15]).
Thu tu.c TraceBoundary() c
ung thu..c hie.n mo.t tien tr`nh khac trong vie.c nha.n da.ng
.ng vo.i mo.t diem cuoi ben trai hay phai cua
pixel bien: no cho biet moi pixel bien tu.o.ng u
mo.t doa.n thang n`a m ngang ben trong v`
ung. (V` thu tu.c FillRegion() ve cac doa.n thang
n`a m ngang t`
u. trai sang phai nen thu tu.c TraceBoundary() su. du.ng c`o. flag de danh dau cac
pixel bien ben trai hoa.c phai). V` va.y moi pixel bien, chang ha.n p = (x, y), se co cau tr
uc
struct BPstruct
{
int x, y;
int flag;
}
trong do tru.`o.ng x v`a y l`a ho`anh do. v`a tung do. cua pixel p; v`a tru.`o.ng flag = UNBLOKED
neu p l`a pixel bien ben trai cua v`
ung v`a flag = BLOKED neu p l`a pixel bien ben phai cua
v`
ung.
Ngo`ai ra, neu mo.t pixel du.o..c xem d`ong th`o.i l`a pixel bien ben trai v`a phai (t
u.c l`a
`an. Cac thu
nh
u.ng pixel cu..c tri.), thu tu.c TraceBoundary() se them no v`ao mang BP[] hai l
.
tu.c SameDirection() v`a DifferentDirection() thu. c hie.n cac tien tr`nh n`ay.
Ma.c d`
u thu tu.c TraceBoundary() ph
u.c ta.p, nhu.ng day l`a tien tr`nh du.o..c thu..c hie.n
tu.o.ng doi nhanh. Bu.o.c cha.m nhat trong BoundaryFill() l`a SortBP() nha` m sap xep la.i v`
ung
v`a ScanRegion() thu..c hie.n t`m kiem cac pixel bien pha trong v`
ung: ch
ung du.o..c thu..c hie.n
doi vo.i moi lo hong trong v`
ung.
Ch
ung ta co the cai thie.n toc do. thu..c hie.n cua thu tu.c BoundaryFill() ba` ng cach su.a
la.i thu tu.c TraceBoundary() xay du..ng danh sach cac pixel bien mo.t cach thch ho..p tranh
vie.c sap xep la.i to`an bo. danh sach. Co the su. du.ng cac cau tr
uc d
u. lie.u khac nhau, chang
ha.n danh sach lien ket, heap hay mo.t mang kch thu.o.c co d.inh de xay du..ng danh sach cac
143

pixel bien co th
u. tu.. mo.t cach hie.u qua. Vo.i nh
u.ng v`
ung ch
u.a t nhat mo.t lo thung, cac cai
`eu. Thay cho vie.c sap xep
bien n`ay cho phep thua.t toan to m`au v`
ung hie.u qua ho.n rat nhi
la.i danh sach moi khi phat hie.n ra lo hong, thua.t toan cai bien ch vie.c ch`en cac pixel bien
tu.o.ng u
.ng lo hong v`ao danh sach.
Viet thu tu.c ScanRegion() trong ngon ng
u. cap cao rat de d`ang. Tuy nhien do thu tu.c
`e gia
n`ay kiem tra tat ca cac pixel ben trong v`
ung, da. c bie.t su. du.ng h`am getpixel(x, y) tra v
`eu th`o.i gian. Nen thay v`ao do ta co the su.
tri. m`au cua pixel (x, y)l`a mo.t thu tu.c mat nhi
du.ng ngon ng
u. Assemble viet la.i thu tu.c ScanRegion() de tang toc do. xu. l
y. Ngo`ai ra, su.
`an c
`eu khien
u.ng tie.n lo..i nhat d.inh v` ph
u.ng di
du.ng ngon ng
u. Assemble tren SVGA co nh
thiet bi. d`o ho.a tren card SVGA co the kiem tra tam pixel ta.i c`
ung mo.t th`o.i diem khi doi
sanh vo.i gia tri. bien.
Bu.o.c nhanh nhat trong BoundaryFill() l`a thu tu.c to m`au FillRegion() v` cac d`ong
`an to la.i v`
u.ng tru.`o.ng ho..p c
ung (vo.i
quet n`a m ngang du.o..c ve rat nhanh. V` va.y, trong nh
`an lu.u la.i danh sach cac pixel bien du.o..c
m`au khac) hoa.c hien thi. v`
ung ta.i no.i khac ta ch c
- i
`an d`au tien khi thu..c hie.n thu tu.c BoundaryFill(). D
`eu n`ay se tang toc do. thi h`anh
ta.o ra l
`eu trong qua tr`nh to m`au do khong phai xay du..ng la.i du.`o.ng bien v`a sap xep mang.
rat nhi

4.5

So s
anh c
ac thu
a.t to
an

`au loang, to m`au theo


To m`au v`
ung bat k`
y co the su. du.ng ba thua.t toan: to m`au theo vet d
.
.
con cha.y v`a to m`au theo bien. Moi thua.t toan co nh
u ng thua.n lo. i c
ung nhu. nhu.o..c diem.
`eu cach de so sanh ch
u.ng tieu chuan sau: tnh do.n
Co nhi
ung, chang ha.n co the su. du.ng nh
gian cua thua.t toan, toc do. thu..c hie.n cua ma da bien di.ch v`a tnh ph`
u ho..p cua thua.t toan
`an to.
u.ng v`
ung c
doi vo.i nh
`au loang, thu tu.c FloodFill(), l`a do.n gian nhat. Ma
Thua.t toan to m`au theo vet d
`on ngan v`a de d`ang the hie.n trong ngon ng
ngu
u. Assemble c
ung nhu. ngon ng
u. cap cao. Tuy
`eu l`o.i go.i de. qui v`a do do co the gay ra
nhien thua.t toan n`ay khong hie.u qua do co rat nhi
tr`an stack neu v`
ung to co kch thu.o.c khong lo.n lam.
Thua.t toan to m`au theo con cha.y, thu tu.c RunFill(), ph
u.c ta.p ho.n thua.t toan to m`au
`au loang. Tuy nhien, RunFill() l`a mo.t cai tien cua FloodFill() v` no kiem tra
theo vet d
mo.t nhom cac pixel thay v` t`
u.ng pixel mo.t. Thu tu.c RunFill() c
ung cha.y nhanh ho.n khi no
du.o..c viet de truy ca.p tru..c tiep bo. de.m video vo.i bu.o.c tang t`
u.ng byte mo.t thay v` bu.o.c
tang t`
u.ng pixel. Thu tu.c RunFill() co the viet da.ng khu. de. qui hoa.c de. qui [20]. Trong
144

tru.`o.ng ho..p sau co t l`o.i go.i de. qui ho.n thu tu.c FloodFill() nen do`i hoi bo. nho. t ho.n rat
`eu.
nhi
`an
Thua.t toan to m`au theo bien, thu tu.c BoundaryFill() ph
u.c ta.p ho.n ca v`a co ph
cha.y cha.m ho.n hai thua.t toan tren. Lo..i the cua thu tu.c BoundaryFill() l`a tnh tong quat
`an to. Tien tr`nh
cua no. Cac modul cua no co the su.a doi nhanh chong theo mau v`
ung c
to m`au theo bien phu. thuo.c v`ao so cac lo hong trong v`
ung. Vo.i nh
u.ng v`
ung khong co lo
hong th` toc do. thu..c hie.n thua.t toan n`ay ba` ng toc do. thu..c hie.n thua.t toan con cha.y. Tuy
nhien khi v`
ung du.o..c to co lo hong, thu tu.c BoundaryFill() se cha.y cha.m di do no ca.p nha.t
.ng lo hong.
danh sach co th
u. tu.. cac pixel bien tu.o.ng u
u.c nang m`a cac thua.t
Ma.t khac, thu tu.c BoundaryFill() co the thu..c hie.n mo.t so ch
`an theo bien v`a sap xep la.i th
toan khac khong the l`am v` tien tr`nh l
u. tu.. sinh ra mo.t danh
`eu.
sach ch
u.a thong tin cac pixel bien. Danh sach n`ay ho`an to`an xac di.nh mo.t v`
ung hai chi
ung ba` ng cach ap du.ng nh
u.ng
Ch
ung ta co the ti.nh tien hoa.c thay doi kch thu.o.c cua v`
`an gi
phep toan thch ho..p len danh sach cac pixel bien: Ch c
u. la.i th
u. tu.. cac pixel bien trong
ung
danh sach v`a sau do su. du.ng thu tu.c FillRegion() trong BoundaryFill() de to m`au v`
.ng danh sach xac d.inh no. V` l
y do n`ay thua.t toan to m`au theo bien rat ph`
u ho..p
tu.o.ng u
vo.i nh
u.ng u
.ng du.ng do`i hoi sao chep mo.t v`
ung, thay doi kch thu.o.c cua no hoa.c ve la.i.
Ngo`ai ra, ba` ng cach su.a doi la.i phu.o.ng phap to theo d`ong ngang trong BoundaryFill(),
ch
ung ta co the de d`ang to m`au v`
ung vo.i mo.t mau tu`
yy
hoa.c ket ho..p vo.i cac ch
u.c nang
`au
AND, OR v`a XOR. Ma.c d`
u, theo cach n`ay, co the su.a la.i thua.t toan to m`au theo vet d
.
.
.
.
`on tro nen rat ph
loang v`a con cha.y, nhu ng khi do ma ngu
u c ta.p v` nh
u ng thua.t toan n`ay
kiem tra cac pixel de xac d.inh ch
ung co du.o..c to hay khong.
Vie.c can ba` ng gi
u.a do. ph
u.c ta.p v`a su.. thu..c hie.n trong cac thua.t toan n`ay tu`
y thuo.c
v`ao phong cach la.p tr`nh cua moi ngu.`o.i. Khong co thua.t toan to m`au v`
ung tot nhat trong
.
.
.
`an
tat ca cac u
ng du.ng d`o ho.a. Vo i moi u
ng du.ng cu. the, tu`
y thuo.c v`ao kha nang cua ph
c
u.ng, ch
ung ta se cho.n mo.t thua.t toan thch ho..p.

4.6

a.t
T
o m`
au c
ac h`nh ch
u. nh

`an: xac di.nh nh


u.ng diem ve n`ao
Tien tr`nh to m`au cac doi tu.o..ng co the chia l`am hai ph
`eu n`ay phu. thuo.c v`ao h`nh da.ng cua cac doi tu.o..ng), v`a de d`ang ho.n, gia tri.
se du.o..c to (di
ung ta xet b`ai toan to m`au cac doi tu.o..ng vo.i m`au da. c; to
n`ao de to ch
ung. Tru.o.c het ch
`an 4.8. Noi chung, qua tr`nh xac di.nh cac
m`au vo.i mau to cho tru.o.c se du.o..c xet trong Ph
145

`om duye.t mo.t day cac d`ong quet lien tiep co giao vo.i doi tu.o..ng khac
diem ve du.o..c to bao g
`e nhau m`a n`a m ho`an to`an trong doi tu.o..ng t`
trong v`a sau do to m`au cac diem ve k
u. trai
sang phai.
- e to m`au h`nh ch
D
u. nha.t vo.i m`au da.c, ch
ung ta da.t cac diem ve na` m tren d`ong quet
t`
u. ca.nh ben trai den ca.nh ben phai vo.i c`
ung mo.t gia tri.; t
u.c l`a to moi doa.n t`
u. xmin den
- e to cac doa.n, ta lo..i du.ng tnh chat lien ket khong gian cua doi tu.o..ng nguyen so.:
xmax . D
vo.i cac nguyen so., thu.`o.ng khong co su.. thay doi gi
u.a cac pixel trong mo.t doa.n hoa.c t`
u.
`an quan tam
d`ong quet n`ay den d`ong quet khac. Tnh chat lien ket n`ay cho phep ta ch c
den nh
u.ng diem ve xuat hie.n su.. thay doi. Vo.i nguyen so. du.o..c to da. c, tat ca cac pixel
tren mo.t doa.n du.o..c da.t c`
ung mo.t gia tri.: ch
ung co tnh lien ket doa.n. Vo.i h`nh ch
u. nha.t,
ta c`on co tnh lien ket d`ong theo ngha cac d`ong quet lien tiep giao vo.i h`nh ch
u. nha.t khac
trong co c`
ung ho`anh do. giao diem; du.o.i day ta c`on su. du.ng tnh lien ket ca.nh vo.i cac ca.nh
cua da giac bat k`
y.
Vie.c xem cac pixel tren mo.t doa.n l`a nhu. nhau cho phep ch
ung ta viet len bo. de.m mo.t
`an truy ca.p bo. nho.. Do do, vo.i thiet bi. hien thi. hai
t`
u. ta.i mo.t th`o.i diem de cu..c tieu so l
ung ta viet 16 hoa.c 32 diem ve ta.i mo.t th`o.i diem; neu cac doa.n co do. d`ai khong l`a
m
u.c, ch
`an da.t cac ma.t na. thch ho..p.
bo.i nguyen cua mo.t t`
u., thua.t toan c
Vo.i nh
u.ng thao lua.n tren, tien tr`nh to m`au h`nh ch
u. nha.t do.n gian l`a hai v`ong la.p
`ong nhau:
l
for (y = y_min; y <= y_max; y++)
for (x = x_min; x <= x_max; x++)
putpixel(x, y, Value);
Mo.t van d`e dang quan tam nay sinh trong l`o.i giai n`ay, tu.o.ng tu.. trong tru.`o.ng ho..p to m`au
y vo.i nh
cac da giac, l`a xu. l
u.ng doa.n thang chung cua cac da giac nhu. the n`ao? Xet hai
h`nh ch
u. nha.t co mo.t ca.nh chung. Neu ta ap du.ng phu.o.ng phap to m`au cho moi h`nh ch
u.
`an. Su.. tr`
ung la.p n`ay l`a
nha.t rieng bie.t, ch
ung ta se viet cac diem ve tren ca.nh chung hai l
.
.
.
mo.t van d`e cua nh
u ng v`
ung di.nh ngha bo i nguyen so : xac d.inh diem ve n`ao thuo.c nguyen
`e ma.t toan ho.c, nh
u.ng diem ve n`a m ben
so. v`a diem ve n`ao khong thuo.c? Hien nhien, v
`e nguyen so.. Nhu.ng vo.i nh
trong v`
ung di.nh ngha bo.i nguyen so. se thuo.c v
u.ng diem ve
`om
n`a m tren bien th` sao? Neu ch qua tam den mo.t h`nh ch
u. nha.t, ch
ung ta co the bao g
.
`om cac pixel bien. Nhu ng do muon tranh vie.c to hai l
`an tren ca.nh chung cua hai
v`
ung g
`an d.inh ngha mo.t v`ai nguyen tac de gan cac diem ve tren bien
h`nh ch
u. nha.t, ch
ung ta c
mo.t cach duy nhat.
146

Nguyen tac do.n gian nhat l`a xem diem ve bien-t


u.c l`a n`a m tren ca.nh e n`ao do-khong
u.a nguyen so. n`a m pha du.o.i
thuo.c nguyen so. neu nu.a ma.t phang xac d.inh bo.i ca.nh e v`a ch
u. nha.t, cac pixel ben trai v`a pha du.o.i se du.o..c
hoa.c ben trai cua ca.nh. Do do vo.i h`nh ch
ve, trong khi cac pixel ben phai v`a pha tren khong du.o..c ve. Suy ra ca.nh du
.ng chung cua
hai h`nh ch
u. nha.t se thuo.c v`ao h`nh ch
u. nha.t pha ben phai. Ket qua l`a, cac doa.n ben
trong h`nh ch
u. nha.t bieu dien mo.t khoang dong pha ben trai v`a mo. pha ben phai.
`an lu.u y
Mo.t so diem c
vo.i nguyen tac tren. Th
u. nhat, no ap du.ng vo.i da giac tu`
yy

c
ung nhu. vo.i cac h`nh ch
u. nha.t. Th
u. hai, dnh pha du.o.i ben trai cua h`nh ch
u. nha.t van
`an-ch
`an nguyen tac khac, xem ph
`an du.o.i day, giai quyet tru.`o.ng ho..p
ung ta c
du.o..c ve hai l
n`ay. Th
u. ba, ch
ung ta co the ap du.ng nguyen tac cho cac h`nh ch
u. nha.t khong du.o..c to
m`au v`a cac da giac. Th
u. tu., nguyen tac khien cho cac d`ong quet mat di diem ve ben trai
nhat v`a moi h`nh ch
u. nha.t mat di h`ang tren c`
ung cua no. Nh
u.ng van d`e n`ay minh ho.a mo.t
`an ta.i cac ca.nh chung.
su.. kie.n ra` ng khong co l`o.i giai ho`an hao cho b`ai toan ch ve mo.t l

4.7

Thu
a.t to
an t
o m`
au d
a gi
ac

`an d`au chu.o.ng c


`an thiet phai do.c cac gia tri. m`au cua cac
Cac thua.t toan to m`au trong ph
`en du.o..c d.inh ngha bo.i da giac ch
y. Trong tru.`o.ng ho..p mi
ung ta
pixel t`
u. bo. de.m de xu. l
.
.
.
.
co the d`
ung thua.t toan tr`an sau day mo.t cach hie.u qua ho n. Phu o ng phap n`ay xu l
y cho
1
.
.
`oi, lom, tha.m ch l`a da giac khong do n v`a co ca lo hong trong do. Thua.t
lo p cac da giac l
.
toan thu. c hie.n ba` ng cach tnh cac giao diem cua d`ong quet na` m gi
u.a cac ca.nh ben trai v`a
phai cua da giac. Cac diem bien du.o..c tnh b`a ng phep toan so gia: giao cua mo.t ca.nh da
giac vo.i d`ong quet hie.n h`anh xac d.inh bo.i giao cua d`ong quet tru.o.c. H`nh 4.4 minh ho.a
y cua thua.t toan tr`an. Giao cua d`ong quet y = 8 vo.i cac ca.nh F A v`a
mo.t tien tr`nh xu. l
CD ta.i cac to.a do. nguyen; trai la.i vo.i cac ca.nh EF v`a DE ta.i cac to.a do. khong nguyen;
u. a den d.
cac giao diem du.o..c gan nhan t`
`an xac di.nh nh
Ch
ung ta c
u.ng pixel n`ao tren moi d`ong quet na` m trong da giac v`a sau
do da.t cac pixel tu.o.ng u
u. x = 2 den 4 v`a t`
.ng (trong tru.`o.ng ho..p n`ay, d`ong quet t`
u. 9 den
13) vo.i gia tri. m`au thch ho..p. La.p la.i tien tr`nh n`ay vo.i mo.i d`ong quet co giao vo.i da giac
khac trong.
Mo.t cach de d`ang de xac d.inh cac diem bien l`a su. du.ng thua.t toan diem gi
u.a ve doa.n
thang tren moi ca.nh v`a lu.u gi
u. cac diem bien trong mo.t danh sach vo.i moi d`ong quet v`a
ung.
Da giac du.o..c go.i l`a do.n neu hai ca.nh ch co the giao nhau ta.i dnh cua ch

1-

147

12
10
8
6
4
2

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

yyy
|

| yyyyi
c
d
E
C

A
2

8 10 12 14

- a giac v`a d`ong quet y = 8.


H`nh 4.4: D
`an tu. cua danh sach mo.t cach thch ho..p. Ch
ca.p nha.t cac ph
uy
r`a ng tien tr`nh n`ay sinh ra
`an
mo.t so diem bien n`a m ngo`ai da giac. Ch
ung du.o..c cho.n theo thua.t toan tr`an v` na` m g
`an trong hay ngo`ai da giac-thua.t
uy
den ranh gio.i xac d.inh ph
vo.i ca.nh nhat m`a khong ch
`eu n`ay. V` va.y, ta ch ve cac pixel na` m ho`an
toan ve doa.n thang khong quan tam den di
`an vo.i ca.nh ho.n.
to`an ben trong v`
ung cho d`
u co pixel ben ngo`ai g
Nhu. thua.t toan diem gi
u.a ve doa.n thang ta su. du.ng thua.t toan so gia de xac d.inh
cac diem bien cua d`ong quet t`
u. cac diem thuo.c d`ong quet tru.o.c. Chang ha.n, d`ong quet
y = 8 trong H`nh 4.4 co hai doa.n (a, b) v`a (c, d) ben trong v`
ung. Cac d`ong quet co the to
theo ba bu.o.c la.p:
1. T`m cac giao diem cua d`ong quet y = c, ymin c ymax , vo.i tat ca cac ca.nh cua da
.ng cua cac
giac, trong do ymin v`a ymax l`a cac tung do. nho nhat v`a lo.n nhat tu.o.ng u
dnh cua da giac.
`eu tang d
`an cua ho`anh do. x.
2. Sap xep cac giao diem theo chi
3. To m`au cac doa.n thang theo ca.p to.a do. giao diem na` m trong da giac, su. du.ng bit
kiem tra chan-le de xac di.nh mo.t diem n`a m trong da giac: Kho.i ta.o bit l`a chan v`a
moi khi ga.p giao diem ta dao tnh chan-le cua bit; neu bit l`a le th` ve; nguo..c la.i khong.
Hai bu.o.c d`au tien cua thua.t toan, t`m giao diem v`a sap xep, se du.o..c d`e ca.p trong
`an tiep theo. Bay gi`o. ta xet tien tr`nh to m`au. Danh sach sau khi sap xep cua x (d`ong
ph
`an nghien c
u.u
quet y = 8) trong H`nh 4.4 l`a (2, 4, 5, 8.5, 13). Bu.o.c 3 co bon tru.`o.ng ho..p c
them:
148

`an xac d.inh pixel ben trai


3.1. Vo.i mo.t giao diem tu`
yy
, ho`anh do. x l`a h
u.u t, ch
ung ta c
`an trong.
hay ben phai cua giao diem n`ay thuo.c ph
y nhu. the n`ao vo.i cac giao diem nguyen?
3.2. Xu. l
3.3. Xu. l
y nhu. the n`ao vo.i cac giao diem nguyen ta.i cac dnh chung cua hai ca.nh?
y nhu. the n`ao vo.i cac giao diem nguyen ta.i cac dnh cua ca.nh n`a m ngang?
3.4. Xu. l
- e xu. l
y Tru.`o.ng ho..p 3.1, ch
D
ung ta noi r`a ng: neu tien theo ben phai v`a ben trong v`
ung
den diem giao th` ta l`am tr`on xuong ho`anh do. giao de xac d.inh pixel ben trong; neu tien
theo ben phai v`a ben ngo`ai v`
ung th` ta l`am tr`on len de xac di.nh pixel ben trong. Ch
ung
ta xu. l
y Tru.`o.ng ho..p 3.2 b`a ng cach ap du.ng tieu chuan thu.`o.ng du.o..c d`
ung de tranh su..
mau thuan ta.i cac ca.nh chung cua cac h`nh ch
u. nha.t: neu pixel ben trai nhat co ho`anh do.
nguyen, ta xem no l`a ben trong v`
ung; neu pixel ben phai nhat co ho`anh do. nguyen, ta xem
no ben ngo`ai v`
ung. Vo.i Tru.`o.ng ho..p 3.3 ch
ung ta dem dnh ymin cua mo.t ca.nh theo phep
kiem tra chan le nhu.ng khong dem dnh ymax ; do do dnh ymax ch du.o..c ve khi no l`a dnh
`e n`ao do. Chang ha.n, dnh A trong H`nh 4.4 du.o..c dem mo.t l
`an theo tieu
ymin cua ca.nh k
chuan chan le v` no l`a dnh ymin cua ca.nh AF nhu.ng l`a dnh ymax cua ca.nh AB. Do do cac
ca.nh v`a cac d`ong quet du.o..c xem nhu. cac khoang dong ta.i gia tri. cu..c tieu v`a mo. ta.i gia tri.
cu..c da.i cua ch
ung. Hien nhien, ta co the dao la.i nguyen tac tren, nhu.ng se tu.. nhien ho.n
neu ta xem diem bien tu.o.ng u
.ng gia tri. cu..c tieu l`a diem v`ao v`a diem bien tu.o.ng u
.ng gia
tri. cu..c da.i l`a diem ra. Vo.i cac ca.nh n`a m ngang (Tru.`o.ng ho..p 3.4), tu.o.ng tu.. nhu. vo.i h`nh
ung ta se ch ra
ch
u. nha.t, cac ca.nh du.o.i du.o..c ve nhu.ng cac ca.nh tren khong du.o..c ve. Ch
`an sau ra` ng di
`eu n`ay xay ra tu.. do.ng neu ta khong dem cac dnh cua nh
trong ph
u.ng ca.nh
nhu. va.y do ch
ung khong phai ymin c
ung nhu. ymax .
Ch
ung ta ap du.ng cac nguyen tac tren vo.i d`ong quet y = 8 trong H`nh 4.4. Ta to cac
pixel t`
u. diem a = (2, 8) den pixel d`au tien ben trai cua diem b = (5, 8) l`a pixel (4, 8) v`a t`
u.
pixel d`au tien ben phai cua diem c, pixel (9, 8), den pixel ben trai cua diem d, pixel (12, 8).
`an v` no l`a dnh ymin cua ca.nh AF nhu.ng l`a
Vo.i d`ong quet y = 3 dnh A du.o..c dem mo.t l
dnh y
cua dnh AB; theo tieu chuan kiem tra chan le, ch
ung ta ve t`
u. A den pixel ben
max

trai cua diem giao cua d`ong quet vo.i ca.nh BC, sau do dao bt l`a chan v`a d`ong quet ket
th
uc ta.i day. D`ong quet y = 1 ga.p dnh B; cac ca.nh AB v`a BC co c`
ung dnh ymin l`a B nen
.
.
.
.
- nh n`ay ta.o ra mo.t d`ong quet rong-v`ao dnh
`an v`a do do du o. c da.t l`a chan. D
du o. c dem hai l
B, ve pixel ta.i do v`a thoat ra. Ma.c d`
u ta ve cac dnh cu..c tieu d.ia phu.o.ng nhu.ng se khong
ve cac dnh cu..c da.i d.ia phu.o.ng. Chang ha.n, giao cua d`ong quet y = 9 ta.i dnh F l`a dnh
chung cua cac ca.nh AF v`a EF. Ca hai l`a cac dnh ymax v`a do do khong anh hu.o.ng den tieu
chuan chan le (o. day l`a chan).
149

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

H`nh 4.5: Cac ca.nh n`a m ngang trong da giac.

4.7.1

C
ac d`
ong qu
et ngang

- e minh ho.a, xet da


Vo.i cac ca.nh na` m ngang ch
ung ta khong dem cac dnh cua ch
ung. D
giac trong H`nh 4.5. Xet ca.nh AB. dnh A l`a dnh ymin cua ca.nh JA v`a ca.nh AB song song
vo.i tru.c ho`anh nen khong xet. Do do bit kiem tra gan l`a le v`a doa.n AB du.o..c ve. Ca.nh
BC co ymin ta.i B nhu.ng AB khong xet nen bit kiem tra gan tri. chan v`a ket th
uc doa.n ve.
J l`a dnh ymin cua ca.nh IJ nhu.ng l`a ymax cua JA nen bit kiem tra l`a le v`a doa.n du.o..c ve
den ca.nh BC. Do C l`a dnh ymax cua ca.nh BC nen d`ong quet y = yC se du.o..c ve t`
u. ca.nh
IJ den het ca.nh CD. Do D l`a dnh ymin cua ca.nh DE nen bit kiem tra da.t l`a chan v`a d`ong
quet ket th
uc ta.i day. Ta.i I, ca.nh IJ co ymax ta.i I v`a ca.nh IH khong xet nen bit kiem tra
l`a chan v`a ca.nh IH khong du.o..c ve. Tuy nhien dnh H l`a ymin cua ca.nh GH nen bit kiem
u. H den diem ve ben trai cua giao diem ca.nh EF. Cuoi
tra l`a le v`a d`ong quet du.o..c ve t`
c`
ung, khong co ymin ta.i G v`a F nen ca.nh GF khong du.o..c ve.
Thua.t toan tren l`am vie.c vo.i cac dnh chung trong mo.t da giac, vo.i cac ca.nh chung
`e nhau v`a vo.i cac ca.nh n`a m ngang. Ngo`ai ra ta c
cua hai da giac k
ung co the ap du.ng cho
.
.
.
.
cac da giac tu. cat. Nhu da d`e ca.p tru o c day, thua.t toan khong thu..c hie.n ho`an hao do no
`eu l
`an: Xet cac ca.nh chung cua
bo sot mo.t so diem ve. Ho.n n
u.a no co the ve mo.t diem nhi
.
ba da giac hoa.c dnh ymin chung cua hai tam giac r`o i nhau.
150

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

y y
y y
y
y y
y
y
y

y
y

(0, 0)
- a giac l`a mo.t manh.
H`nh 4.6: D

4.7.2

C
ac ma nh vu.n

`an nhau ta.o th`anh


Mo.t van d`e khac vo.i thua.t toan tr`an l`a cac da giac vo.i cac ca.nh n`a m g
`an trong cua no khong ch
mo.t manh nho-v`
ung da giac rat he.p v`a ph
u.a mo.t doa.n thu..c su..
tren mo.i d`ong quet. Chang ha.n, xet tam giac co cac dnh (0, 0), (3, 12) v`a (5, 12) nhu. trong
`an trong, thuo.c ca.nh ben trai
H`nh 4.6. Do nguyen tac ch nh
u.ng diem ve n`a m thuo.c ph
`eu d`ong quet g
`om mo.t diem ve hoa.c khong co diem
hoa.c ca.nh ben du.o.i mo.i du.o..c ve nen nhi
ve n`ao. Van d`e bo sot cac diem ve l`a mo.t v du. khac cua k
y thua.t aliasing; t
u.c l`a, bieu
`eu bit tu.o.ng u
ung ta co nhi
.ng mo.t
dien tn hie.u lien tu.c b`a ng mo.t xap x r`o.i ra.c. Neu ch
y thua.t antialiasing (xem [9], [11]). K
y thua.t antialiasing
diem ve, ch
ung ta co the su. du.ng k
.
`em hoa nguyen tac ch ve nh
`an trong, thuo.c ca.nh
lien quan den vie.c m
u ng pixel thuo.c ph
ben trai hoa.c ca.nh ben du.o.i de cho phep cac pixel bien hay tha.m ch cac pixel ben ngo`ai
du.o..c ve vo.i cac gia tri. cu.`o.ng do. phu. thuo.c v`ao h`am khoang cach gi
u.a pixel v`a nguyen so.;
`eu nguyen so. se gop ph
`an v`ao gia tri. cuoi c`
sau do nhi
ung cua pixel.

4.7.3

Li
en k
et ca.nh v`
a thu
a.t to
an tr`
an

`an thu..c hie.n mo.t cach thong


Bu.o.c 1 trong thua.t toan cua ch
ung ta-xac d.inh giao diem-c
`an tranh tnh toan tru..c tiep de xac d.inh cac giao
minh de tang toc do.. Trong thu..c te, ta c
diem cua d`ong quet vo.i cac ca.nh cua da giac. Thong thu.`o.ng ch co mo.t so ca.nh co giao vo.i
151

`eu ca.nh giao vo.i d`ong quet y = c c


mo.t d`ong quet. Ho.n n
u.a, co nhi
ung giao vo.i d`ong quet
`eu
y = c + 1. Su.. lien ket n`ay xuat hie.n c`
ung vo.i mo.t ca.nh trong suot qua tr`nh giao cua nhi
d`ong quet. Khi di chuyen t`
u. d`ong quet hie.n h`anh den d`ong quet ke tiep, ta co the tnh
ho`anh do. giao diem mo.i du..a tren ho`anh do. giao c
u (tu.o.ng tu.. khi trong thua.t toan diem
gi
u.a, pixel ke tiep xac d.inh t`
u. pixel hie.n h`anh) ba` ng cach ap du.ng:

xc+1 = xc + 1/m,

trong do m l`a he. so goc cua ca.nh dang xet. Trong thua.t toan diem gi
u.a ve du.`o.ng thang, ta
tranh tnh toan vo.i phan so b`a ng cach su. du.ng bien quyet d.inh v`a kiem tra dau cua no de
`an nhat vo.i du.`o.ng thang; o. day ta se su. du.ng phep toan tren so nguyen trong
cho.n pixel g
`an nhat.
qua tr`nh l`am tr`on de xac d.inh pixel ben trong g
Xet du.`o.ng thang co he. so goc lo.n ho.n +1 v`a l`a ca.nh ben trai; cac ca.nh ben phai, cac
y tu.o.ng tu.. vo.i mo.t ch
he. so goc khac v`a nh
u.ng ca.nh song song vo.i tru.c tung se du.o..c xu. l
ut
y tu.. do.ng theo nguyen tac d`ong quet nhu. se thay
su.a doi. (Cac ca.nh n`a m ngang du.o..c xu. l
`an ve mo.t pixel. Khi y tang mo.t do.n vi., ho`anh
sau). Ta.i diem thap ho.n (xmin , ymin ) ta c
do. giao diem x se tang 1/m, trong do m = (ymax ymin )/(xmax xmin ) l`a he. so goc cua
`an phan cua x co mau so l`a (y
y,
y ). Trong qua tr`nh xu. l
du.`o.ng thang. Suy ra ph
max

min

`an phan tr`an th` ph


`an nguyen se tang len mo.t do.n vi.. Chang ha.n, neu he. so goc l`a
khi ph
5
`an phan cua
v`a xmin = 3 th` day cac gia tri. x se l`a 3, 3 25 , 3 45 , 3 56 = 4 15 , v`a van van. Khi ph
2
x b`a ng khong, ch
ung ta co the ve pixel (x, y) m`a trong tru.`o.ng ho..p n`ay n`a m tren du.`o.ng
`an phan cua x khac khong, ta c
`an l`am tr`on de co pixel na` m ben trong
thang. Nhu.ng khi ph
da giac (t
u.c ben pha tay phai khi di chuyen t`
u. du.o.i len tren do.c theo du.`o.ng thang). Khi
`an phan cua x lo.n ho.n 1, ta tang x mo.t do.n vi. v`a tr`
`an phan; ngo`ai ra ta
ph
u. 1 trong ph
`an di chuyen mo.t pixel sang phai.
c
ung c
`an phan lo.n ho.n 1 khi tu. so lo.n ho.n mau so. Do do ta co the tranh
Nha.n xet r`a ng, ph
thao tac tren phan so (thu..c) b`a ng cach su. du.ng hai bien tu.o.ng u
.ng mau so v`a tu. so.

V du. 4.7.1 Gia su. A := (xmin = 1, ymin = 0), B := (xmax = 8, ymax = 9). Khi do du.`o.ng
thang qua hai diem A v`a B co nghi.ch dao he. so goc m = 97 . Suy ra tu. so n = 7, mau so
du.ng thua.t toan tren ta du.o..c day cac gia tri. nhu.
d = 9. Bien tang i kho.i do. ng ba` ng 0. Ap
152

trong bang du.o.i:

Bu.o.c xi

yi

0/0

7/7

14/5

12/3

10/1

8/8

15/6

13/4

11/2

9/0

Trong bang, k
y hie.u a/b tren co.t i co ngha tru.o.c v`a sau khi xu. l
y:
`an phan chu.a tr`an nen x khong doi;
1. neu a = b th` ph
`an phan tr`an nen tang x mo.t do.n vi. v`a giam ph
`an phan
2. neu a > b th` ph

ad
d

Thu tu.c sau minh ho.a y


tu.o.ng tr`nh b`ay tren:
void LeftEdgeScan(int xmin, int xmax, int ymin, int ymax, int value)
{
int x, y, num, denom, inc;
x = xmin;
num = xmax - xmin;
denom = ymax - ymin;
inc = 0;
for (y = ymin; y <= ymax; y++)
{
putpixel(x, y, Value);
inc += num;
if (inc >= denom)
{
x++;
inc -= denom;
153

= db .

Con tro
AEL
................................. 9

FA
..
...
..
...
....
.

yupper x

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

DE

EF

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

................................. 9

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

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

5
2

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

1
m

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

................................. 11 10

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

6
4

CD
..
...
..
...
....
.

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

................................. 11 13

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

................................NULL

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

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

.................................NULL

(a)

Con tro
AEL

DE
....
...
..
...
..

................................. 11 12

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

6
4

CD
....
...
..
...
..

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

................................ 11 13

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

(b)
H`nh 4.7: Danh sach ca.nh tch cu..c cua da giac trong H`nh 4.4. (a) D`ong quet y = 9. (b)
D`ong quet y = 10. (Ch
uy
ho`anh do. x cua ca.nh DE trong (b) da du.o..c l`am tr`on len doi vo.i
ca.nh ben trai).
}
}
}
Ke tiep, trong thua.t toan tr`an, ch
ung ta ap du.ng lien ket ca.nh v`a vo.i moi ca.nh, lu.u
gi
u. thong tin cua ta.p cac ca.nh co giao vo.i d`ong quet hie.n h`anh trong danh sach ca.nh tch
y, day cac pixel du.o..c cho.n mo.t cach
cu..c AEL (active edge list). Trong suot qua tr`nh xu. l
thch ho..p do.c theo moi d`ong quet du..a tren danh sach AEL. Danh sach n`ay ch
u.a cac ho`anh
do. giao diem cua tat ca cac ca.nh co giao vo.i d`ong quet hie.n h`anh. Cac gia tri. x du.o..c
`an sao cho theo nguyen tac chan le, hai gia tri. x d`au tien tu.o.ng
lu.u tr
u. theo th
u. tu.. tang d
u
.ng doa.n ve th
u. nhat; hai gia tri. tiep theo xac d.inh doa.n ve ke tiep v`a van van. Danh sach
`e moi ca.nh giao hie.n h`anh de co the ca.p nha.t nhanh chong cho
AEL c
ung ch
u.a thong tin v
d`ong quet ke tiep. H`nh 4.7 minh ho.a danh sach AEL cua cac d`ong quet y = 9 v`a y = 10
`an them mo.t c`o. danh dau ca.nh
cua da giac trong H`nh 4.4. (Trong chu.o.ng tr`nh, ch
ung ta c
ben trai hay ben phai). Co ba thong tin du.o..c lu.u tr
u. vo.i moi ca.nh co giao vo.i d`ong quet
y l`a:
1. Tung do. yupper cua diem cao ho.n trong ca.nh (sau khi da l`am ngan).
2. Ho`anh do. giao diem xint vo.i d`ong quet hie.n h`anh.
154

3. Nghi.ch dao he. so goc 1/m cua ca.nh.


Cac thong tin n`ay du.o..c lu.u tr
u. trong mo.t danh sach lien ket sau:
typedef struct Edge_Info *Edge_Ptr;
struct Edge_Info
{
int y_upper;
float x_int;
float Recip_Slope;
Edge_Ptr Next;
}
Van d`e c`on la.i l`a ca.p nha.t danh sach AEL nhu. the n`ao khi di chuyen len d`ong ke
tiep? Gia su. ch
ung ta da xu. l
y vo.i d`ong quet y. Co bon tru.`o.ng ho..p xay ra khi ca.p nha.t
AEL vo.i d`ong quet (y + 1) :
1. Nh
u.ng ca.nh trong AEL nhu.ng khong giao vo.i d`ong quet ke tiep (nh
u.ng ca.nh n`ay
.ng yupper = y) se bi. loa.i bo.
tu.o.ng u
2. Ho`anh do. giao diem xint du.o..c tnh la.i du..a v`ao thua.t toan tang ca.nh du.o..c d`e ca.p o.
`an tren.
ph
3. Nh
u.ng ca.nh mo.i co giao vo.i d`ong quet ke tiep (nh
u.ng ca.nh co tung do. diem thap
ho.n b`a ng y + 1) du.o..c them v`ao danh sach AEL.
4. Cac gia tri. ho`anh do. giao diem xint co the bi. dao la.i neu hai ca.nh cua da giac giao
`an phai sap xep la.i danh
nhau (da giac khong do.n). Trong tru.`o.ng ho..p n`ay, ch
ung ta c
sach AEL.
- e ch`en nh
D
u.ng ca.nh mo.i v`ao d`anh sach AEL trong d`ong quet ke tiep mo.t cach hie.u
qua, ch
ung ta xay du..ng mo.t bang cac ca.nh tch cu..c ET (Edge Table).
X
ay du..ng ba ng ET
Bang ET du.o..c thiet la.p trong qua tr`nh duye.t da giac. Moi ca.nh du.o..c da. c tru.ng bo.i mau
`an tu. trong ET tu.o.ng u
tin c`
ung kieu Edge Info. Moi ph
.ng vo.i moi ca.nh (khong song song
155

11
10
9
8
7
6
5
4
3
2
1
0

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

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

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

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

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

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

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

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

................................... 3

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

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

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

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

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

5
2

CD

11 13

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

EF

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

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

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

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

FA
2

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

AB
7

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

5
2

DE

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

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

.................................NULL

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

..................................NULL

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

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

11

.................................. 5

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

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

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

6
4

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

.................................NULL

6
4

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

..................................NULL

BC
7

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

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

= .................................NULL
H`nh 4.8: Bang ET da. c tru.ng cho da giac trong H`nh 4.4.
vo.i tru.c ho`anh) ch
u.a tung do. cua diem cao ho.n, ho`anh do. cua diem thap ho.n v`a nghi.ch
dao he. so goc. Bang ET l`a mang cac danh sach Edge Table co kieu Edge Ptr. H`nh 4.8
minh ho.a bang cac ca.nh u
.ng vo.i da giac trong H`nh 4.4.
Sau khi ET da du.o..c xay du..ng, cac bu.o.c xu. l
y trong thua.t toan tr`an nhu. sau:
- a.t y l`a tung do. nho nhat sao cho Edge Table[y] khac NULL;
1. D
2. Kho.i ta.o AEL b`a ng NULL
3. La.p la.i cho den khi AEL v`a ET ba` ng NULL:
`an
3.1 Chuyen t`
u. Edge Table[y] sang AEL; sau do sap xep AEL theo th
u. tu.. tang d
`eu n`ay de d`ang thu..c hie.n v` ET da du.o..c sap xep).
cua ho`anh do. giao diem (di
3.2 Ve cac pixel tren d`ong quet y su. du.ng cac ca.p to.a do. trong AEL.
ut trong AEL co y = yupper (nh
u.ng ca.nh khong lien quan trong d`ong
3.3 Loa.i bo cac n
quet ke tiep).
3.4 Vo.i moi ca.nh khong song song vo.i tru.c tung ca.p nha.t tru.`o.ng ho`anh do. trong
AEL.
3.5 Tang y mo.t do.n vi. (d`ong quet ke tiep).
156

Thua.t toan n`ay su. du.ng lien ket ca.nh de xac d.inh ho`anh do. giao diem v`a liee n ket
d`ong (c`
ung vo.i sap xep) de xac d.inh cac doa.n du.o..c ve. V` sap xep ch thu..c hie.n vo.i mo.t
so t cac ca.nh v`a do sap xep la.i trong Bu.o.c 3 ch thao tac tren mo.t danh sach da du.o..c sap
`au het hoa.c ho`an to`an nen trong tru.`o.ng ho..p n`ay co the su. du.ng cac phu.o.ng phap
xep h
`an ke tiep ch
sap xep ch`en hoa.c sap xep noi bo.t. Trong ph
ung ta se mo. ro.ng thua.t toan n`ay
`eu da giac c`
cho tru.`o.ng ho..p to m`au nhi
ung mo.t l
uc.
Nha.n xet r`a ng vo.i cac tam giac v`a h`nh thang, l`a nh
u.ng tru.`o.ng ho..p da. c bie.t cua da
giac, ch co hai ca.nh giao vo.i moi d`ong quet. Ma.t khac, mo.t da giac luon luon co the tam
ung ta co the to m`au da giac b`a ng cach tru.o.c het phan ra da
giac phan du.o..c. Do va.y, ch
giac do th`anh cac tam giac v`a sau do ap du.ng thua.t toan tr`an to m`au cac tam giac n`ay.
Tam giac phan l`a mo.t b`ai toan co dien trong h`nh ho.c tnh toan [19] v`a de d`ang thu..c hie.n
`oi; tuy nhien rat kho vo.i da giac bat k`
vo.i lo.p cac da giac l
y.
y. T
u.c l`a, khi
Ch
uy
ra` ng xac d.inh cac doa.n to du.o..c thu..c hie.n theo tien tr`nh tch lu
bu.o.c la.p hie.n h`anh cua thua.t toan tr`an trong Bu.o.c 3.5 ta.o ra nh
u.ng pixel bo.i n`a m tren
`an du.o..c ca.p nha.t mo.t cach thch
c`
ung mo.t d`ong quet, cac pixel d`au cuoi cua mo.t doa.n c
u.ng ca.nh cat nhau v`a cac manh vo.). Ch
ung ta co the xac d.inh cac
ho..p. (Chang ha.n vo.i nh
`an duye.t th
`an th
doa.n trong l
u. nhat v`a sau do duye.t l
u. hai de to m`au, hoa.c xac di.nh doa.n
v`a to ngay sau do. Mo.t lo..i diem khac khi su. du.ng cac doa.n, chang ha.n trong b`ai toan to
`an chung cua da giac v`a h`nh ch
m`au ph
u. nha.t, ta co the thu..c hie.n tien tr`nh cat xen v`a
phep toan so ho.c tren doa.n c`
ung mo.t l
uc: Cac doa.n co the du.o..c cat mo.t cach do.c la.p vo.i
cac ca.nh ben trai v`a ben phai cua h`nh ch
u. nha.t.
`an tru.o.c, trong thua.t toan to m`au da giac,
Nh
a.n x
et 4.7.2 (i) Nhu. da phan tch o. ph
`an su. du.ng mo.t c`o. de danh dau diem xuat phat hay ket th
ch
ung ta c
uc cua mo.t doa.n ve.
.
.
.
.
- e do.n gian hoa tien
Vie.c ca.p nha.t gia tri. n`ay tu o ng doi ph
u c ta.p ta.i nh
u ng dnh chung. D
tr`nh n`ay, ch
ung ta xet mo.t cach tiep ca.n khac nhu. sau (xem [11]). Tru.o.c het, loa.i bo tat ca
cac ca.nh song song tru.c ho`anh. Ke tiep, thay tat ca cac ca.nh c`on la.i b`a ng phep l`am ngan
uy
ra` ng, l`am ngan ca.nh keo theo su.. thay doi he. so goc cua
ca.nh nhu. trong H`nh 4.9. Ch
doa.n thang. V` va.y, de khong anh hu.o.ng den tnh chnh xac cua tien tr`nh xu. l
y ch
ung ta
l
u.u tr
u. tru.`o.ng 1/m cua ca.nh tru.o.c khi su.a. De d`ang thay r`a ng, vo.i cach n`ay, so giao diem
cua d`ong quet bat k`
y vo.i cac ca.nh cua da giac (da su.a ca.nh) luon luon l`a mo.t so chan. Xet
v du. da giac trong H`nh 4.4 sau khi su.a ca.nh se co da.ng nhu. trong H`nh 4.10.
`an b`
(ii) Phu.o.ng phap khac, to m`au theo r`ao chan (Fence-Fill), su. du.ng khai nie.m ph
u
.
.
hay phu d.inh gia tri. cac pixel trong anh. Vo i m`an h`nh d`o ho.a hai m
u c, pixel co gia tri.
.
.
.
.
`an b`
u l`a thu..c
1 (trang) du o. c da. t l`a 0 (den) v`a ngu o. c la.i. Mo.t tnh chat cua phep toan ph
157

10
9
8
7
6
5
4
3
2
1

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

B
Bnew

1 2 3 4 5 6 7 8 9 10
H`nh 4.9: L`am ngan ca.nh AB th`anh ABnew .
12
10
8
6
4
2

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

8 10 12 14

H`nh 4.10: Cac ca.nh cua da giac trong H`nh 4.4 sau khi su.a.
`an se phu.c h
`oi gia tri. c
hie.n no hai l
u. Du..ng mo.t r`ao chan thang du
.ng-co the di qua cac
- a.t tat ca cac pixel co gia tri. 0. Vo.i moi ca.nh cua da giac khong song
dnh cua da giac. D
`an b`
song vo.i tru.c ho`anh thu..c hie.n: lay ph
u tat ca cac pixel t`
u. mo.i diem tren ca.nh den r`ao
`an b`
u mo.t so chan
chan. Cac pixel do.c theo mo.t d`ong quet n`a m ngo`ai da giac du.o..c lay ph
`an v`a do do co gia tri. ba` ng 0. Ngu.o..c la.i, cac pixel n`a m trong da giac du.o..c lay ph
`an b`
l
u
`an v`a do do co gia tri. b`a ng 1. Ket qua khong phu. thuo.c v`ao vi. tr cua r`ao chan.
mo.t so le l

4.7.4

`ong nhau
T
o m`
au c
ac d
a gi
ac ch

`au het cac h`nh anh khong ch co mo.t da giac m`a co the co nhi
`eu da giac c
`an du.o..c to
H
`an to. Khi cac
m`au. Moi da giac du.o..c xac d.inh bo.i mo.t danh sach cac dnh v`a m`au sac c
.
`an them do. u u tien cho moi da giac sao cho da giac co
da giac n`ay phu len nhau, ch
ung ta c
158

do. u.u tien cao ho.n se du.o..c to phu len cac da giac co do. u.u tien thap ho.n. Gia thiet r`a ng
tr`nh u
.ng du.ng da cho tru.o.c cac do. u.u tien khac nhau vo.i moi da giac2 .
`en xu. l
Tru.o.c khi ve h`nh, cac da giac da qua bu.o.c ti
y v`a cac ca.nh cua ch
ung du.o..c
`an tru.o.c
lu.u trong c`
ung mo.t bang cac ca.nh tch cu..c ET. Kieu d
u. lie.u Edge Info trong ph
du.o..c mo. ro.ng de bao h`am them hai tru.`o.ng m`au v`a do. u.u tien cua da giac:
typedef struct EdgeNode2D *EdgePtr2D
struct EdgePtr2D
{
int y_upper;
float x_int;
float Recip_Slope;
int Priority;
int Color;
EdgePtr2D Next;
};
`ong nhau: A, B v`a C vo.i m`au v`a do. u.u tien tu.o.ng
H`nh 4.11 minh ho.a ba da giac ch
u
.ng l`a (GRAY, 6), (WHITE, 3) v`a (BLUE, 2). Danh sach d
u. lie.u cua d`ong quet y = c lu.u
`om thong tin cua nh
trong AEL. Danh sach n`ay g
u.ng ca.nh co giao vo.i d`ong quet y = c v`a da
`an: x1 x2 . . . x8 . Cac mau tin trong AEL tu.o.ng
du.o..c sap xep theo ho`anh do. tang d
- e do.n gian,
u
.ng mo.t giao diem v`a ch
u.a m`au v`a do. u.u tien cua da giac co ca.nh giao. (D
`an yupper v`a 1/m). Ngo`ai ra, mang Covers[] co kieu Boolean
ch
ung ta bo qua cac th`anh ph
`an tu. cua mang tu.o.ng u
y tien tr`nh to m`au, trong do moi ph
.ng
du.o..c su. du.ng de quan l
vo.i mo.t da giac. Khi xet d`ong quet y = c, mang n`ay cho biet thong tin cua nh
u.ng da giac
ch
u.a pixel hie.n h`anh: Chang ha.n, Covers[A] b`a ng True neu ho`anh do. x thuo.c da giac A v`a
b`a ng False neu ngu.o..c la.i. Bien N umCovers cho biet so cac da giac ch
u.a pixel hie.n h`anh
v`a bien V isP oly ch den da giac co do. u.u tien cao nhat ch
u.a pixel hie.n h`anh.
Ch
ung ta tr`nh b`ay thua.t toan thong qua v du. n`ay. Vo.i d`ong quet y = c, kho.i ta.o
`an tu. cua mang Covers[] du.o..c gan ba` ng False. T`
`an
x = 0, N umCovers = 0 v`a cac ph
u. ph
- oa.n
tu. d`au tien trong AEL, ta co ho`anh do. giao cua d`ong quet y = c vo.i da giac n`ao do. D
`en. V` d`ong quet di v`ao da giac B ta.i x = x1 nen Covers[B] gan
[0, x1 ] du.o..c to ba` ng m`au n
b`a ng True, N umCovers b`a ng 1, v`a V isP oly ch den da giac B. Su. du.ng m`au cua da giac
Trong mo.t so tru.`o.ng ho..p, do. u.u tien cua da giac du.o..c xac d.inh tu.. do.ng. Neu, chang ha.n cac da giac
`eu th` do. u.u tien du.o..c da.t tu.o.ng thch vo.i khoang
l`a h`nh chieu cua cac da giac trong khong gian ba chi
cach t`
u. vi. tr mat quan sat den ch
ung-xem [11].
2

159

y
...
..........
..
.......
...
...
......... .....
... ......
...
........
...
... .......
.........
...
...
.....
...
........
.
.
.
.
.
.
...
...
.
.
.
.....
...
...
.........
.....
...
...
.........
.
.
...
.
.
.
.
.
.
.
...
.
.
.
.
.
...
.....
...
...
.
..........
.
.
...
.
..... ..
.
.
.
.
...
......
.....
...
.
..... .....
.
......
...
.
...
...
.
.
.
...
.....
.
.....
...
......
.
.
.
.
.
..
.
.
...
.
.
.
.
.
.
...
......
..... ..
...
... .....
......
..... ..
...
..
...
...
... ......
......
.......
..
...
........
...
...... ....
.....
..
.
.
...
.
.
.
.
.
.
.
.
...
.
.
.
.
.
...... ...
...
... ....
.
.. .........
.......
.
...
...
.
.
.
.
...
...
.....
.
...
..........
.
.
.
..
...
.
.
...
.
.
...
.....
... .........
...
..
.
.
..
.
.
...
.
...
.
.
.
.
.
.....
...
......
...
...
.
.
..
.
..
.
.
.
...
.
.
.
.
.
.
.
..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................
...
...
.
.........
.....
..
..
.
.
.
.
......
.
.
....
.....
...
...
..
.
..............
.
.
... ...
.
.
.
.. ....
.
.
.
.
.
...
...
.....
......
...
..
.
.....
.....
...
......
...
...
.
. ....
.....
...
.
.
.
.. ...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
......
...
..........
...
.
. ....
..
..
..
.......................
...
..
...
...
..
................................
.
.
.
.
.
...
.
...
.
.
.
...
......................
.
...
...... ......................
.....
...
...
...
...
...
.....................
......
...
...
...
...
...
.....................
......
...
.
.
...
..
.
..
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.....................
......
...
...
.
.
.
..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
...
.
.......
.........................................................................................................................................................................................................................
.
...
...
...
.
...
...
.
...
...
...
...
.
...
...
...
.
.
...
...
....
.
.
.....
...
...
...
...
...
....
....
...
...
.
.
...
...
...
...
...
...
..
...
...
....
.
.
...
...
....
.
..
...
....
....
.
.
.................... .......
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
....................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
.
.
.
.
.
....................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
....
.
.
....
.
.
.
...
.
................................
...
...
...............................
...
....
....
.........................................
.
.
...
..
...
....
....
...
...
...
...
.
.
...
..
.
.
....
....
....
...
..
..
..
................................................................................................................................................................................................................................................................................................................................................................................................................................................................

(C)

y=c

(B)

(A)

x1

| |

x2 x3x4

x5

x6

x7

x8

Con tro
AEL
................................. x1
NULL

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

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

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

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

x8

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

cB

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

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

................................. x2
cA

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

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

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

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

x7

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

cA

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

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

................................. x3
cC

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

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

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

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

x6

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

cB

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

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

................................. x4
cA

cA = GRAY, cB = WHITE, cC = BLUE.


`ong nhau.
H`nh 4.11: To m`au cac da giac ch

160

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

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

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

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

x5

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

cC

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

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

.......................................
cA

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

B (l`a WHITE) de to doa.n t`


u. x1 den giao diem ke tiep trong AEL. Ta thay ta.i x2 , d`ong
quet di v`ao da giac A nen Covers[A] gan b`a ng True, N umCovers ba` ng 2. Do da giac A
co do. u.u tien cao ho.n cua B nen ta thay doi m`au ve l`a GRAY (cua da giac A) v`a tat m`au
cua B. V` va.y doa.n [x1 , x2 ] se du.o..c to ba` ng m`au cua da giac B. Xet tiep danh sach AEL,
`eu n`ay ch ra ta.i x3
ta co giao diem x3 thuo.c da giac B v`a do Covers[B] b`a ng True nen di
ta ra khoi da giac B. Ca.p nha.t Covers[B] v`a N umCovers. Giao diem x4 l`a diem di v`ao
da giac C nhu.ng do. u.u tien cua no thap ho.n do. u.u tien du.o..c tro bo.i bien V isP oly (l`a
A) nen ch ca.p nha.t Covers[C] v`a N umCovers v`a tiep tu.c. Giao diem x5 danh dau diem
ra cua da giac A. Do do thu..c hie.n to m`au doa.n [x2 , x5 ] vo.i m`au cua A sau do ca.p nha.t
y tu.o.ng tu.. vo.i
la.i Covers[A], N umCovers v`a V isP oly (tro den da giac C). Ba.n do.c xu. l
`an c`on la.i cua d`ong quet.
nh
u.ng ph
Noi chung, thua.t toan xuat phat t`
u. d`au danh sach AEL v`a thong qua mo.t day cac
giao diem de ca.p nha.t mang Covers[] v`a bien N umCovers. Khi da giac co do. u.u tien lo.n
ho.n do. u.u tien cua da giac tro bo.i V isP oly, thu..c hie.n to m`au v`a da. t la.i bien V isP oly.
Khi di ra khoi da giac kha kien hie.n h`anh, d`
ung mang Covers[] de xac d.inh da giac co do.
u.u tien cao nhat phu pixel hie.n h`anh; doa.n hie.n h`anh du.o..c to m`au (vo.i m`au n`ao?); v`a ca.p
nha.t la.i N umCovers v`a Covers[].

4.8

u t
T
o m`
au theo m
a
o

`an tru.o.c, ch
Trong nh
u.ng ph
ung ta to m`au ben trong v`
ung di.nh ngha bo.i cac nguyen so.
vo.i cac m`au da. c (t
u.c cac pixel trong v`
ung co c`
ung m`au) ba` ng cach go.i thu tu.c putpixel()
.
.
.
vo i gia tri. m`au ve l`a V alue. Du o i day ch
ung ta khao sat to m`au vo.i mau to cho tru.o.c b`a ng
`eu khien trong cac thua.t toan to m`au. Vo.i cac he. thong d`o ho.a
cach them cac d`ong le.nh di
`eu bit tren mo.t pixel, tien tr`nh di
`eu khien da. t gia tri. m`au du.o..c lay mo.t cach thch
co nhi
ho..p trong mau to. Tu.o.ng tu.. nhu. kieu dang doa.n thang, de viet cac mau to bitmap de
d`ang, ch
ung ta go.i thu tu.c putpixel() vo.i m`au noi tu.o.ng u
.ng pixel co gia tri. mo.t trong mau
v`a khong go.i thu tu.c n`ay neu pixel co gia tri. 0. Ma.t khac, neu mau bitmap du.o..c ap du.ng
`en.
trong moi tru.`o.ng khong trong suot, ta cho.n 1 v`a 0 tu.o.ng u
.ng m`au noi v`a m`au n
Van d`e chnh trong to m`au theo mau l`a t`m moi tu.o.ng quan gi
u.a vi. tr cua mau v`a
`an xac di.nh vi. tr cua mau du.o..c neo de biet pixel n`ao
nguyen so.. Noi cach khac, ta c
trong mau se tu.o.ng u
.ng vo.i pixel hie.n h`anh trong nguyen so..
Phu.o.ng phap th
u. nhat l`a neo mau ta.i mo.t dnh cua mo.t da giac b`a ng cach da. t pixel
161

- i
`eu n`ay cho phep mau di chuyen
ben trai nhat xuat hie.n trong h`ang d`au tien cua mau. D
.
.
.
.
ng tru. c quan vo i nh
u.ng mau co cau tr
uc h`nh ho.c
theo cac nguyen so ta.o ra mo.t hie.u u
.
.
.
.
.
.
.
.
.
nhu cac du `o ng khac cheo song song thu `o ng du o. c su du.ng trong cac u
ng du.ng thiet ke. V`
khong co su.. phan bie.t gi
u.a cac diem tren da giac vo.i nh
u.ng mau n`ay c
ung nhu. tren cac
nguyen so. xac d.inh bo.i cac du.`o.ng bien tro.n nhu. du.`o.ng tr`on v`a ellipse. Do do ngu.`o.i la.p
`an xac di.nh diem neo n`a m tren hoa.c na` m trong nguyen so.. Trong mo.t v`ai he. thong,
tr`nh c
diem neo co the cua mo.t nhom cac nguyen so..
Trong phu.o.ng phap th
u. hai, ta xem to`an bo. m`an h`nh du.o..c lat vo.i mau to v`a coi
`om mo.t du.`o.ng bien hoa.c v`
ung du.o..c to vo.i nh
u.ng bit da. c tru.ng cho phep mau
nguyen so. g
to bang qua. Vi. tr chuan cua mo.t neo tuye.t doi l`a goc m`an h`nh. Cac pixel cua nguyen
so. sau do du.o..c xu. l
y b`a ng cach AND gia tri. 1 vo.i mau to. Theo cach n`ay, mau to khong
du.o..c gan dnh vo.i nguyen so. khi nguyen so. ho.i di chuyen. Thay v`ao do, nguyen so. di
`en vo.i mau co d.inh, v`a do do h`nh da.ng cua no co
chuyen nhu. the no du.o..c da. t tren mo.t n
uc h`nh ho.c ngu.`o.i su. du.ng
the bi. thay doi khi di chuyen; vo.i cac mau chnh quy t co cau tr
- e tnh toan hie.u qua, neo tuye.t doi cho phep
tha.m ch khong nha.n thay anh hu.o.ng n`ay. D
cac nguyen so. phu len nhau v`a tiep giap kho.p vo.i nhau.
- e ap du.ng mau to vo.i nguyen so., ch
D
ung ta danh ch so to.a do. pixel hie.n h`anh (x, y).
V` cac mau xac d.inh bo.i cac ma tra.n nho kch thu.o.c M N nen ta su. du.ng phep toan
modular de la.p la.i mau. Pixel co mau pattern[0, 0] xem nhu. tr`
ung vo.i goc m`an h`nh3 , v`a
ch
ung ta co the viet, chang ha.n, mo.t mau bitmap trong moi tru.`o.ng trong suot vo.i d`ong
le.nh
if pattern[x % M, y % N] putpixel(x, y, value);
Neu to m`au mo.t doa.n trong che do. thay the ch
ung ta co the sao chep to`an bo. h`ang
cua mau to ta.i mo.t th`o.i diem neu thu tu.c copypixel() da.t diem ve o. m
u.c thap cho phep
`eu pixel c`
viet nhi
ung mo.t l
uc. Chang ha.n, xet mau l`a ma tra.n 8 8. Do do no la.p moi doa.n
u.c l`a, neu ho`anh do. cua
8 pixel. Neu diem ben phai nhat cua mo.t doa.n l`a byte du.o..c gan-t
pixel d`au tien chia het 8-th` to`an bo. h`ang d`au tien cua mau co the du.o..c ve b`a ng thu tu.c
`eu l
`an de ve to`an bo. doa.n. Neu pixel
copypixel() viet 8 pixel; thu tu.c n`ay du.o..c go.i la.i nhi
.
.
`an du.o..c
cuoi c`
ung cua doa.n khong phai l`a byte du o. c gan th` cac pixel khong thuo.c doa.n c
- e thu..c hie.n hie.u qua trong nh
da.t ma.t na.. D
u.ng tru.`o.ng ho..p da. c bie.t cua cac thua.t toan
raster, ch
ung ta co the, chang ha.n kiem tra tru.o.c de khu. cac v`ong la.p ben trong v`a viet la.i
cac v`ong la.p n`ay b`a ng ngon ng
u. Assemble (xem [9]).
3

Trong cac he. thong cu.a so, mau to thu.`o.ng du.o..c neo ta.i goc cua he. to.a do. cu.a so.

162

Thu. vi
e.n graph2D.h
`an n`ay, ch
Trong ph
ung toi ta.p ho..p nh
u.ng kieu d
u. lie.u quan tro.ng v`a cac khai bao du.o..c su.
ung du.o..c du.a
du.ng trong giao tr`nh. Nh
u.ng thu tu.c v`a h`am thu.`o.ng xuyen du.o..c su. du.ng c
ra o. day.

#if !defined(_graph2D_h)
#define _graph2D_h
#define PI 3.141592654
#define TWOPI 6.283185308
#define MAXVVERTICES 50
#define MAXCOLUMS 639
#define MAXROWS 479
#define TILE_SIZE 16
#define TRUE 1
#define FALSE 0
#define CLIP_ON 1
#define CLIP_OFF 0
typedef unsigned char Byte;
typedef unsigned char Boolean;
typedef struct
{
float x, y;
} Point2D;
163

typedef struct
{
float dx, dy;
} Vector2D;
typedef struct
{
int x, y;
} Pixel;
typedef struct
{
Point2D

First, Second;

} Segment2D;
typedef struct
{
Vector2D Normal;
float D;
} Line2D;
typedef struct
{
float xmin, xmax, ymin, ymax;
} Rectangle2D;
typedef struct
{
Point2D Center;
float Rad;
} Circle2D;
typedef struct VertNode2D

*VertPtr2D;

struct VertNode2D
{
Point2D Vertex;
164

VertPtr2D Next;
};
typedef struct PolyLink *PolyPtr;
struct PolyLink
{
VertPtr2D Start;
PolyPtr Next;
};
typedef Point2D (*Function) (float);
int feoln(FILE *fp)
{
char c;
if ((c = fgetc(fp)) == 10)
{
fseek(fp, -2, 1);
return(True);
}
else
if (c == EOF) return(True);
else
{
fseek(fp, -1, 1);
return(False);
}
}
void freadln(FILE *fp)
{
char c;
while (((c = fgetc(fp)) != 10) && (c != EOF));
}

165

float min(float x, float y)


{
return((x > y) ? y : x);
}
float max(float x, float y)
{
return((x > y) ? x : y);
}

void PointToVector2D(Point2D P, Vector2D *p)


{
(*p).dx = P.x;
(*p).dy = P.y;
}
float Length2D(Vector2D v)
{
return(sqrt(v.dx*v.dx + v.dy*v.dy));
}
void Scale2D(Vector2D v, float r, Vector2D *Ans)
{
(*Ans).dx = r*v.dx;
(*Ans).dy = r*v.dy;
}
void Normalize(Vector2D v, Vector2D *Ans)
{
float Len;
Len = Length2D(v);
if (Len == 0.0)
printf("Zero vector in Normallize()");
else
{
166

(*Ans).dx = v.dx/Len;
(*Ans).dy = v.dy/Len;
}
}
float Dot2D(Vector2D a, Vector2D b)
{
return(a.dx*b.dx +

a.dy*b.dy);

}
void Build_nD(Vector2D *n, float *D, Point2D F, Point2D S)
{
(*n).dx

= S.y - F.y;

(*n).dy

= F.x - S.x;

(*D) = F.x*S.y - F.y*S.x;


}
void CreateVert2D(VertPtr2D *Vertices)
{
(*Vertices) = NULL;
}
Boolean EmptyVert2D(VertPtr2D Vertices)
{
return((Vertices == NULL) ? True : False );
}
void PushVert2D(VertPtr2D *Vertices, Point2D Vertex)
{
VertPtr2D Tempt;
Tempt = (VertPtr2D) malloc(sizeof(struct VertNode2D));
Tempt->Vertex = Vertex;
Tempt->Next = (*Vertices);
(*Vertices) = Tempt;
}
167

void PopVert2D(VertPtr2D *Vertices, Point2D *Vertex)


{
VertPtr2D Tempt;
if (EmptyVert2D(*Vertices))
{
printf(" Thao tac con tro khong hop le ");
return;
}
else
{
Tempt

= (*Vertices);

(*Vertex)

= Tempt->Vertex;

(*Vertices) = Tempt->Next;
free(Tempt);
}
}
void ReadVert2D(char *FileName, VertPtr2D *Vertices)
{
Point2D Vertex;
FILE *FileData;
if ((FileData = fopen(FileName, "rt")) == NULL)
{
printf("File khong tim thay");
return;
}
CreateVert2D(Vertices);
while (!feof(FileData))
{
fscanf(FileData, "%f %f", &Vertex.x, &Vertex.y);
PushVert2D(Vertices, Vertex);
}
fclose(FileData);
168

}
void FreeVertPtr2D(VertPtr2D *Vertices)
{
Point2D Vertex;
while (!EmptyVert2D(*Vertices)) PopVert2D(Vertices, &Vertex);
}
void DrawPoly(VertPtr2D Vertices)
{
VertPtr2D Tempt = Vertices;
if (Tempt == NULL) return;
moveto(Tempt->Vertex.x, Tempt->Vertex.y);
while ((Tempt = Tempt->Next) != NULL)
{
lineto(Tempt->Vertex.x, Tempt->Vertex.y);
}
}
void DrawCurve(float a, float b, int NumPoints, Function Func)
{
float Delta = (b - a)/ (float)NumPoints;
float t = a;
int i;
moveto(Func(t).x, Func(t).y);
for (i = 1; i <= NumPoints; i++)
{
t += Delta;
lineto(Func(t).x, Func(t).y);
}
}

169

#endif

170

T`
ai li
e.u tham khao
[1] R. H. Bartels, J. C. Beatty, B. A. Barsky, An introduction to splines for use in computer
graphics and geometry modeling, Los Altos, Calif.: Morgan Kaufman Publishers, Inc.
1987.
[2] J. E. Bresenham, Algorithm for computer control of digital plotter, IBM Syst., J. 4,
No. 1, 1965, 25-30.
[3] J. E. Bresenham, A linear algorithm incremental digital display of circular arcs, Comm.,
ACM 20, No. 2, 1977, 750-752.
[4] J. E. Bresenham, Incremental line compaction, Computer J. 25, No. 1, 1982, 116-120.
[5] M. Cyrus, J. Beck Generalized two- and three-dimensional clipping, Computers and
Graphics, Vol. 3 N. 1, 1978, 23-28.
[6] D. Da Silva, Raster algorithms for 2D primitives, Masters Thesis, Computer Science
Departement, Brown University, Providence, RI, 1989.
[7] G. Farin, Curves and surfaces for computer-aided geometric design, Orlando, Fla. Academic Press Inc., 1990.
[8] I. D. Faux, M. J. Pratt, Computational geometry for design and manufacture, NewYork,
Horwood/Wiley, 1979.
[9] J. D. Foley, A. Van Dam, S. K. Feiner, J. F. Hughes, Computer graphics: principles and
practice, Addison-Wesley, 1991.
[10] M. R. Kappel, An ellipse drawing algorithm for raster displays, in R. Earnshaw, ed.
Fundamental algorithms for computer graphics, NATO ASI Series, Springer-Verlag,
Berlin, 1985, 257-280.
[11] F. S. Hill Jr., Computer graphics, Macmillan Publishing Company, New York 1988.
171

[12] J. Y. McLeod, M. L. Baar, Geometry and interpolation of curvex and surfaces, Cambridge University, 1998.
[13] M. Levoy, Design for a real-time high-quanlity volume rendering workstation, Proceedings of the Volume Visualization Workshop, Dep. Computer Science, Univ. North Carolina at Chapel Hill, May 18-19, 1989, 85-90.
[14] T. M. Nicholl D. T. Lee, R. A. Nicholl, An efficient new algorithm for 2-D line clipping:
Its development and analysis, SIGGRAPH 1987, 253-262.
[15] T. Pavlidis, Contour filling in raster graphics, Computer graphics, 1981.
[16] M. Pitteway, Algorithm for drawing ellipse and hyperbolae with a digital plotter, Computer J. 25, Vol. 10, No. 3, 1967, 282-289.
[17] M. Pitteway, Algorithms of conic generation, in Fundamental algorithms for computer
graphics, Vol. 17, 1967, 219-237.
[18] V. Pratt, Techniques for conic splines, SIGGRAPH 1985, 151-159.
[19] F. P. Preparata, M. I. Shamos, Computational geometry: an introduction, SpringerVerlag, New York, 1985.
[20] W. Richard, Programmers guide to PC & PS/2 Video systems, Microsoft Publishing
Coproration 1987.
[21] R. T. Rockafellar, Convex analysis, Princeton University Press, 1970.
[22] U. Shani, Filling regions in binary raster images: a graph-theoretic a roach, SIGGRAPH
Proceedings 1980, 321-327.
[23] A. R. Smith, Tint fill, SIGGRAPH 1979, 276-283.
[24] I. E. Sutherland, R. F. Sproull, R. A. Schumacker, A characterization of ten hiddensurface algorithms, ACM Computing Serveys 6 (March), 1-55, 1974.
[25] I. E. Sutherland, G. W. Hodgman, Reentrant polygon clipping, CACM, 17 (1) January
1974, 32-42.
[26] J. Van Aken, An efficient ellipse-drawing algorithm, CG&A, Vol. 4, No. 9, 1984, 24-35.
[27] K. Weiler, P. Atherton, Hidden surface removal using polygon area sorting, SIGGRAPH
77, 214-222.
172

[28] X. Wu, J. G. Rokne, Double-step generation of ellipse, University of Calgary, 1989.


[29] X. Wu, J. G. Rokne, Double-step generation of line and circle, Computer Graphics and
Image Processing, Vol. 37, No. 4, 1987, 331-334.
[30] X. Wu, J. G. Rokne, On properties of discretized convex curves, IEEE Trans. on Pattern
Analysis and Machine Intelligence, Vol. 11, No. 2, 1989.

173

You might also like