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

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

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

ˆ HO
´ T´INH I
-`
D
O
. A MAY
Pha.m Tiˆe´n So.n
- `a La.t, 2005
D


2


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

7

o.ng cong trˆ
en thiˆ
e´t bi. raster
1 C´
ac thuˆ
a.t to´
an v˜
ed


¯u.`

9

1.1

1.2

1.3

- oa.n thˇa˙’ng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D

9

1.1.1

Thuˆa.t to´an sˆo´ gia . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

1.1.2

Thuˆa.t to´an d¯iˆe˙’m gi˜
u.a . . . . . . . . . . . . . . . . . . . . . . . . . .

13

1.1.3


Mˆo.t sˆo´ vˆa´n d¯`ˆe liˆen quan d¯ˆe´n thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng . . . . . . . .

18

1.1.4

C´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng . . . . . . . . . . . . . . . . . . . . .

21

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

22

1.2.1

- ˆo´i x´
D
u.ng t´am d¯iˆe˙’m . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

1.2.2

Thuˆa.t to´an d¯iˆe˙’m gi˜
u.a v˜e d¯u.`o.ng tr`on . . . . . . . . . . . . . . . . . .

23


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

28

1.3.1

Ellipse c´o da.ng ch´ınh tˇa´c . . . . . . . . . . . . . . . . . . . . . . . . .

29

1.3.2

Ellipse trong tru.`o.ng ho..p tˆo˙’ng qu´at . . . . . . . . . . . . . . . . . . .

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¯`aˆu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3

47
47



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

48

2.2.1

Thuˆa.t to´an de Casteljau . . . . . . . . . . . . . . . . . . . . . . . . .

48

2.2.2

- a th´
D
u.c Bernstein v`a d¯u.`o.ng cong Bezier . . . . . . . . . . . . . . . .

52

C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong Bezier . . . . . . . . . . . . . . . . . . . . . .

55

- iˆ
`eu khiˆe˙’n d¯.ia phu.o.ng . . . . . . . . . . . . . . . . . . . . . . . . . .
D

59


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

60

2.4.1

Su˙’. du.ng c´ac h`am spline nhu. c´ac h`am trˆo.n . . . . . . . . . . . . . . .

63

2.4.2

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

65

2.4.3

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

66

2.4.4


C´ac h`am B-spline co. so˙’. . . . . . . . . . . . . . . . . . . . . . . . . .

66

2.4.5

Su˙’. du.ng c´ac knot bˆo.i . . . . . . . . . . . . . . . . . . . . . . . . . . .

71

2.4.6

Vector knot chuˆa˙’n . . . . . . . . . . . . . . . . . . . . . . . . . . . .

73

2.5

C´ac t´ınh chˆa´t cu˙’a d¯u.`o.ng cong B-spline . . . . . . . . . . . . . . . . . . . . .

75

2.6

`eu khiˆe˙’n bˇ`a ng d¯u.`o.ng cong B-spline . . . . . . . . . . . .
Nˆo.i suy c´ac d¯iˆe˙’m d¯iˆ

77

2.7


Thiˆe´t kˆe´ c´ac mˇa.t Bezier v`a B-spline . . . . . . . . . . . . . . . . . . . . . . .

80

2.7.1

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

80

2.7.2

D´an c´ac 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
¯ˆ
o´i tu.o..ng

83

3.1

Mo˙’. d¯`aˆu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

83

3.2

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

83

3.2.1

84

Phˆan t´ıch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4


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

86


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

87

3.3.1

T`ım giao bˇ`a ng c´ach gia˙’i hˆe. c´ac phu.o.ng tr`ınh . . . . . . . . . . . . . .

89

3.3.2

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

89

3.3.3

Thuˆa.t to´an Cohen-Sutherland . . . . . . . . . . . . . . . . . . . . . .

93

3.3.4

Thuˆa.t to´an Liang-Barsky

97


3.2.2
3.3

3.4

3.5

3.6

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

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

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

3.4.2

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

Giao hai d¯a gi´ac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.5.1

Thuˆa.t to´an Sutherland-Hodgman . . . . . . . . . . . . . . . . . . . . 108

3.5.2


Thuˆa.t to´an Weiler-Atherton . . . . . . . . . . . . . . . . . . . . . . . 111

3.5.3

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

`eu: pha˙’n xa. trong buˆ
`ong k´ın . . . . . . . . . . . . . . . . 114
Ray tracing hai chiˆ
3.6.1

Vector pha˙’n xa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

3.6.2

Giao cu˙’a tia s´ang v`a d¯u.`o.ng thˇa˙’ng

3.6.3

Giao cu˙’a tia s´ang v´o.i d¯u.`o.ng tr`on . . . . . . . . . . . . . . . . . . . . 121

3.6.4

Xˆay du..ng v´ı du. ray tracing . . . . . . . . . . . . . . . . . . . . . . . 124

3.6.5

`ong k´ın l`a ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Buˆ


4 Tˆ
o m`
au v`
ung
4.1

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

127

C´ac d¯i.nh ngh˜ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.1.1

V`
ung d¯i.nh ngh˜ıa bo˙’.i pixel . . . . . . . . . . . . . . . . . . . . . . . . 127
5


4.1.2

V`
ung d¯i.nh ngh˜ıa bo˙’.i d¯a gi´ac . . . . . . . . . . . . . . . . . . . . . . . 129

4.2

`au loang . . . . . . . . . . . . . . . . . . . . . 129
Thuˆa.t to´an tˆo m`au theo vˆe´t dˆ

4.3


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

4.4

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

4.5

So s´anh c´ac thuˆa.t to´an . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

4.6

Tˆo m`au c´ac h`ınh ch˜
u. nhˆa.t . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145

4.7

Thuˆa.t to´an tˆo m`au d¯a gi´ac . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

4.8

4.7.1

C´ac d`ong qu´et ngang . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

4.7.2

C´ac ma˙’nh vu.n

4.7.3


Liˆen kˆe´t ca.nh v`a thuˆa.t to´an tr`an . . . . . . . . . . . . . . . . . . . . 151

4.7.4

`ong nhau . . . . . . . . . . . . . . . . . . . . . 158
Tˆo m`au c´ac d¯a gi´ac chˆ

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

Tˆo m`au theo mˆa˜u tˆo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

`an phu. lu.c: Thu. viˆ
Phˆ
e.n graph2D.h

163

T`
ai liˆ
e.u tham kha˙’ o

171

6


`au
L`
o.i n´

oi d
¯ˆ
- `ˆo ho.a m´ay t´ınh l`a mˆo.t l˜ınh vu..c hˆa´p dˆa˜n cu˙’a khoa ho.c m´ay t´ınh. Ch´
D
ung ta su˙’. du.ng d¯`ˆo ho.a
`eu l˜ınh vu..c kh´ac nhau, bao gˆ
`om
m´ay t´ınh nhu. mˆo.t cˆong cu. d¯ˆe˙’ quan s´at thˆong tin trong nhiˆ
.
.
.
.
khoa ho.c v`a cˆong nghˆe., ho´a ho.c, kiˆe´n tr´
uc v`a gia˙’i tr´ı. C´ac chu o ng tr`ınh d¯`oˆ ho.a tu o ng t´ac
cho ph´ep ngu.`o.i su˙’. du.ng l`am viˆe.c theo c´ach tu.. nhiˆen nhˆa´t: ngu.`o.i su˙’. du.ng cung cˆa´p thˆong
tin cho tr`ınh u
´.ng du.ng thˆong qua c´ac hoa.t d¯oˆ. ng bˆen ngo`ai cu˙’a ho. v`a s˜e nhˆa.n d¯u.o..c thˆong
- `ˆo ho.a m´ay t´ınh d¯ang gi´
`e quan niˆe.m v`a
tin tro˙’. la.i bˇ`a ng h`ınh a˙’nh. D
up con ngu.`o.i thay d¯ˆo˙’i vˆ
.
.
c´ach th´
u c su˙’ du.ng m´ay t´ınh.
- `ˆo ho.a m´ay t´ınh I cung cˆa´p mˆo.t sˆo´ k˜
Gi´ao tr`ınh D
y thuˆa.t co. ba˙’n cu˙’a d¯`ˆo ho.a m´ay t´ınh
- `ˆo ho.a m´ay t´ınh ba chiˆ
`eu. (D

`eu, mˆo.t phˆ
`an quan tro.ng khˆong thˆe˙’ thiˆe´u d¯u.o..c s˜e d¯u.o..c
hai chiˆ
- ˆe˙’ c´o mˆo.t khung ca˙’nh to`an diˆe.n v`a sˆau sˇa´c vˆ
`e nh˜
d¯`ˆe cˆa.p trong mˆo.t gi´ao tr`ınh kh´ac). D
u.ng
nguyˆen l´
y v`a thu..c h`anh cu˙’a d¯`ˆo ho.a m´ay t´ınh, xem c´ac t`ai liˆe.u dˆa˜n [9] v`a [11]. C´ac phu.o.ng
ph´ap phˆan t´ıch v`a thiˆe´t kˆe´ c´ac thuˆa.t to´an trong gi´ao tr`ınh cho ph´ep sinh viˆen c´o thˆe˙’ viˆe´t
dˆ˜e d`ang c´ac chu.o.ng tr`ınh minh ho.a. Gi´ao tr`ınh d¯u.o..c biˆen soa.n cho c´ac d¯ˆo´i tu.o..ng l`a sinh
viˆen To´an-Tin v`a Tin ho.c.
u. C d¯ˆe˙’ minh ho.a, tuy nhiˆen c´o thˆe˙’ dˆ˜e d`ang chuyˆe˙’n d¯oˆ˙’i
Gi´ao tr`ınh su˙’. du.ng ngˆon ng˜
`an c´o mˆo.t sˆo´ kiˆe´n th´
`e ngˆon ng˜
sang c´ac ngˆon ng˜
u. kh´ac; v`a do d¯o´, sinh viˆen cˆ
u.c vˆ
u. C. Ngo`ai
`au hˆe´t c´ac chu.o.ng tr`ınh thao t´ac trˆen cˆa´u tr´
uc d˜
u. liˆe.u nhu. danh s´ach liˆen kˆe´t, nˆen d¯o`i
ra, hˆ
ho˙’i sinh viˆen pha˙’i c´o nh˜
u.ng k˜
y nˇang lˆa.p tr`ınh tˆo´t.
`an c´o co. so˙’. to´an ho.c cu˙’a nh˜
`e d¯a.i sˆo´
Sinh viˆen c˜

ung cˆ
u.ng nˇam d¯`ˆau d¯a.i ho.c: hiˆe˙’u biˆe´t vˆ
tuyˆe´n t´ınh v`a h`ınh ho.c gia˙’i t´ıch, ph´ep t´ınh vi t´ıch phˆan.
Mu.c d¯´ıch cu˙’a gi´ao tr`ınh l`a, o˙’. m´
u.c d¯oˆ. n`ao d¯´o, cho thˆa´y c´ac tr`ınh u
´.ng du.ng d¯`ˆo ho.a
`an viˆe´t v`a cha.y thu˙’. c´ac chu.o.ng tr`ınh. Mˆo.t trong
d¯u.o..c ta.o ra nhu. thˆe´ n`ao: Ch´
ung ta cˆ
nh˜
u.ng mu.c d¯´ıch ch´ınh cu˙’a gi´ao tr`ınh l`a gi´
up sinh viˆen nˇa´m v˜
u.ng c´ac phu.o.ng ph´ap, tru.´o.c
hˆe´t to´an ho.c ho´a c´ac kh´ac niˆe.m h`ınh ho.c v`a sau d¯´o chuyˆe˙’n ta˙’i th`anh c´ac d¯oa.n m˜a chu.o.ng
tr`ınh.
7


`om bˆo´n chu.o.ng v`a mˆo.t phˆ
`an phu. lu.c v´o.i nh˜
Gi´ao tr`ınh bao gˆ
u.ng nˆo.i dung ch´ınh nhu.
sau:
• Chu.o.ng th´
u. nhˆa´t d¯`ˆe cˆa.p d¯ˆe´n c´ac phu.o.ng ph´ap v˜e c´ac “nguyˆen so.” cu˙’a d¯`oˆ ho.a m´ay
t´ınh: d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse.
`au hˆe´t c´ac
• Phˆan t´ıch v`a thiˆe´t kˆe´ bˇ`a ng h`ınh ho.c l`a nˆo.i dung ch´ınh cu˙’a Chu.o.ng 2. Hˆ
.
.

.
.
.
`an mˆ
`em d¯`ˆo ho.a d¯`ˆeu c´o nh˜
phˆ
u ng ch´
u c nˇang ta.o ra c´ac d¯u `o ng cong du. a trˆen c´ac d¯iˆe˙’m
m`a ngu.`o.i su˙’. du.ng lu..a cho.n. Chu.o.ng n`ay cung cˆa´p nh˜
u.ng nguyˆen l´
y v`a c´ach tiˆe´p cˆa.n
.
.
thu. c h`anh m`a c´ac tr`ınh u
´ ng du.ng d¯`oˆ ho.a ´ap du.ng.
• Chu.o.ng 3 gia˙’i quyˆe´t b`ai to´an x´ac d¯i.nh giao cu˙’a nh˜
u.ng nguyˆen so. d¯`ˆo ho.a: Giao hai
`oi (bao h`am c´ac h`ınh ch˜
d¯oa.n thˇa˙’ng, giao cu˙’a d¯oa.n thˇa˙’ng v`a d¯a gi´ac lˆ
u. nhˆa.t) v`a giao
`eu:
cu˙’a hai d¯a gi´ac. Cuˆo´i chu.o.ng l`a mˆo.t v´ı du. cu˙’a k˜
y thuˆa.t “ray tracing” hai chiˆ
`ong k´ın c´o ch´
Chuyˆe˙’n d¯oˆ. ng cu˙’a tia s´ang trong buˆ
u.a c´ac “chu.´o.ng nga.i vˆa.t”.
• Chu.o.ng 4 d¯`ˆe cˆa.p d¯ˆe´n nh˜
u.ng thuˆa.t to´an tˆo m`au v`
ung bˆa´t k`
y: V`

ung d¯i.nh ngh˜ıa bo˙’.i
`an trong, bo˙’.i d¯u.`o.ng biˆen v`a v`
phˆ
ung l`a d¯a gi´ac.
`an phu. lu.c l`a thu. viˆe.n c´ac cˆa´u tr´
`an thiˆe´t v`a thu.`o.ng xuyˆen
• Phˆ
uc d˜
u. liˆe.u v`a c´ac h`am cˆ
su˙’. du.ng trong gi´ao tr`ınh.
`an xuˆa´t ba˙’n th´
Trong lˆ
u. hai n`ay, ch´
ung tˆoi d¯u.a thˆem c´ac v´ı du. t´ınh to´an nhˇ`a m minh
`an l´
ho.a cho phˆ
y thuyˆe´t c˜
ung nhu. gi´
up sinh viˆen nˇa´m v˜
u.ng kiˆe´n th´
u.c d¯˜a ho.c. Ngo`ai ra, c´ac
`an tru.´o.c c˜
lˆo˜i trong xuˆa´t ba˙’n lˆ
ung d¯a˜ d¯u.o..c chı˙’nh l´
y; mˇa.c d`
u vˆa.y, t´ac gia˙’ vˆa˜n mong c´o nh˜
u.ng
d¯´ong g´op t`
u. ba.n d¯o.c.
`eu ngu.`o.i m`a khˆong thˆe˙’ liˆe.t kˆe

Tˆoi xin ca˙’m o.n nh˜
u.ng gi´
up d¯o˜. d¯˜a nhˆa.n d¯u.o..c t`
u. nhiˆ
hˆe´t, d¯aˇ. c biˆe.t l`a c´ac ba.n sinh viˆen, trong qu´a tr`ınh biˆen soa.n gi´ao tr`ınh n`ay.
- `a La.t, ng`ay 10 th´ang 1 nˇam 2005
D
.
PHA
. M Tiˆe´n So n

8


Chu.o.ng 1

ac thuˆ
a.t to´
an v˜
ed
¯u.`
o.ng cong trˆ
en
thiˆ
e´t bi. raster
Chu.o.ng n`ay tr`ınh b`ay c´ac thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng, d¯u.`o.ng tr`on v`a ellipse trˆen lattice
nguyˆen Z2 . C´ac thuˆa.t to´an chı˙’ thao t´ac trˆen nh˜
u.ng sˆo´ nguyˆen v`a trong c´ac v`ong lˇa.p chı˙’ su˙’.
du.ng ph´ep to´an cˆo.ng nˆen rˆa´t hiˆe.u qua˙’.


1.1

- oa.n thˇ
D
a˙’ ng

`an v´o.i d¯oa.n thˇa˙’ng
Thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng x´ac d¯.inh to.a d¯oˆ. cu˙’a c´ac pixel nˇa` m trˆen hoˇa.c gˆ
`e nguyˆen tˇa´c, ch´
`an v´o.i d¯oa.n thˇa˙’ng thu..c tˆe´
thu..c tˆe´ nhˆa´t. Vˆ
ung ta muˆo´n cho.n d˜ay c´ac pixel gˆ
`an c´o
nhˆa´t v`a thˇa˙’ng nhˆa´t. X´et d¯oa.n thˇa˙’ng thu..c tˆe´ d¯u.o..c xˆa´p xı˙’ v´o.i mˆa.t d¯oˆ. mˆo.t pixel; ta cˆ
nh˜
u.ng t´ınh chˆa´t g`ı? V´o.i c´ac d¯oa.n thˇa˙’ng c´o hˆe. sˆo´ g´oc thuˆo.c d¯oa.n [−1, 1], c´o d¯u
´ng mˆo.t pixel
.
.
.
d¯u o. c v˜e lˆen trˆen mˆo˜i cˆo.t; v´o i c´ac d¯oa.n thˇa˙’ng m`a hˆe. sˆo´ g´oc nˇ`a m ngo`ai d¯oa.n n`ay, c´o d¯u
´ng
mˆo.t pixel d¯u.o..c v˜e trˆen mˆo˜i h`ang. Tˆa´t ca˙’ c´ac d¯oa.n thˇa˙’ng d¯u.o..c v˜e v´o.i c`
ung mˆo.t d¯oˆ. s´ang,
.
.
.
.
khˆong phu. thuˆo.c v`ao d¯ˆo. d`ai v`a hu ´o ng, v`a nhanh nhˆa´t c´o thˆe˙’ d¯u o. c. Thuˆa.t to´an v˜e d¯oa.n
`an ch´

thˇa˙’ng c˜
ung cˆ
uy
´ d¯ˆe´n c´ac thuˆo.c t´ınh cu˙’a d¯oa.n thˇa˙’ng nhu. d¯ˆo. rˆo.ng, kiˆe˙’u v˜e... Thˆa.m ch´ı
u.c d¯oˆ. rˇang cu.a do tiˆe´n tr`ınh r`o.i ra.c ho´a d¯u.`o.ng thˇa˙’ng thu..c
ch´
ung ta muˆo´n cu..c tiˆe˙’u ho´a m´
tˆe´ nh`o. su˙’. du.ng k˜
y thuˆa.t antialiasing (xem [9], [11]) bˇa` ng c´ach ´ap du.ng kha˙’ nˇang d¯ˇa.t cu.`o.ng
`eu bit.
d¯ˆo. cu˙’a mˆo˜i pixel trˆen c´ac thiˆe´t bi. hiˆe˙’n thi. m`a mˆo.t pixel tu.o.ng u
´.ng nhiˆ
ung ta chı˙’ d¯`ˆe cˆa.p d¯ˆe´n c´ac d¯oa.n thˇa˙’ng d¯oˆ. rˆo.ng mˆo.t pixel v`a c´o d¯u
´ng mˆo.t
Tru.´o.c hˆe´t ch´
.
.
.
`an cuˆo´i chu o ng s˜e d¯`ˆe cˆa.p
pixel trˆen mˆo˜i cˆo.t (hoˇa.c h`ang d¯ˆo´i v´o i c´ac d¯oa.n thˇa˙’ng dˆo´c). Phˆ
9


d¯ˆe´n d¯oˆ. rˆo.ng c´ac nguyˆen so. v`a c´ac mˆa˜u v˜e.
Mˆo.t c´ach h`ınh ho.c, ch´
ung ta biˆe˙’u diˆ˜en mˆo.t pixel nhu. mˆo.t chˆa´m tr`on v´o.i tˆam ta.i vi.
tr´ı (x, y) cu˙’a pixel trˆen lu.´o.i c´ac to.a d¯oˆ. nguyˆen Z2 . Biˆe˙’u diˆ˜en n`ay l`a mˆo.t xˆa´p xı˙’ th´ıch ho..p
nh´at cˇa´t ngang trong mˆo.t chu k`
y cu˙’a ch`
um tia electron cu˙’a CRT; xˆa´p xı˙’ n`ay phu. thuˆo.c v`ao

khoa˙’ng c´ach (tu`
y thuˆo.c v`ao hˆe. thˆo´ng) gi˜
u.a c´ac vˆe´t trˆen m`an h`ınh hiˆe˙’n thi.. Trong mˆo.t sˆo´
`e nhau phu˙’ lˆa´p mˆo.t phˆ
`an lˆen nhau; v´o.i nh˜
hˆe. thˆo´ng, c´ac chˆa´m kˆ
u.ng hˆe. thˆo´ng kh´ac c´o nh˜
u.ng
`e nhau; trong hˆ
`au hˆe´t c´ac hˆe. thˆo´ng, khoa˙’ng c´ach theo
khoa˙’ng c´ach gi˜
u.a c´ac pixel d¯u
´.ng kˆ
`eu ngang nho˙’ ho.n theo chiˆ
`eu d¯u
chiˆ
´.ng. Mˆo.t kh´ac biˆe.t n˜
u.a tu`
y theo hˆe. thˆo´ng trong viˆe.c biˆe˙’u
u. nhˆa.t
diˆ˜en hˆe. to.a d¯oˆ. , chˇa˙’ng ha.n Macintosh xem c´ac pixel d¯u.o..c d¯aˇ. t ta.i tˆam cu˙’a h`ınh ch˜
`e nhau cu˙’a lu.´o.i d¯iˆ
`eu khiˆe˙’n thay cho nˇa` m trˆen c´ac d¯u.`o.ng thˇa˙’ng cu˙’a
gi˜
u.a c´ac d¯u.`o.ng thˇa˙’ng kˆ
`om c´ac pixel thuˆo.c phˆ
`an
lu.´o.i. Theo c´ach n`ay, c´ac h`ınh ch˜
u. nhˆa.t (x´ac d¯i.nh bo˙’.i hai g´oc) gˆ
- .inh ngh˜ıa n`ay cho ph´ep c´ac v`

trong cu˙’a n´o. D
ung d¯ˆo. rˆo.ng bˇ`a ng khˆong: H`ınh ch˜
u. nhˆa.t t`
u.
(x, y) d¯ˆe´n (x, y) khˆong ch´
u.a pixel n`ao, trong khi v´o.i nh˜
u.ng hˆe. thˆo´ng kh´ac, c´o d¯u
´ng mˆo.t
ung ta s˜e biˆe˙’u diˆ˜en c´ac pixel nhu. c´ac h`ınh tr`on r`o.i nhau c´o
pixel ta.i d¯iˆe˙’m n`ay. Du.´o.i d¯aˆy ch´
tˆam nˇ`a m trˆen lu.´o.i.
H`ınh 1.1 l`a ph´ong to cu˙’a d¯u.`o.ng thˇa˙’ng thu..c tˆe´ v`a xˆa´p xı˙’ d¯oˆ. rˆo.ng mˆo.t pixel cu˙’a n´o.
C´ac pixel d¯u.o..c v˜e tu.o.ng u
´.ng c´ac h`ınh tr`on m`au d¯en v`a c´ac pixel khˆong d¯u.o..c v˜e tu.o.ng u
´.ng
h`ınh tr`on khˆong tˆo. Trˆen m`an h`ınh thu..c tˆe´, d¯u.`o.ng k´ınh cu˙’a h`ınh tr`on biˆe˙’u diˆ˜en pixel l´o.n
`e nhau, bo˙’.i vˆa.y biˆe˙’u diˆ˜en bˇa` ng k´
y hiˆe.u cu˙’a ch´
ung ta l`a
ho.n khoa˙’ng c´ach gi˜
u.a c´ac pixel kˆ
mˆo.t ph´ong d¯a.i m´
u.c d¯oˆ. r`o.i ra.c cu˙’a c´ac pixel.
...
...
...
...
...
...
...

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

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

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

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

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

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

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

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

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
















































- oa.n thˇa˙’ng xˆa´p xı˙’ d¯u.o..c biˆe˙’u diˆ˜en bo˙’.i c´ac h`ınh tr`on d¯en.
H`ınh 1.1: D
`eu khiˆe˙’n nguyˆen nˆen
V`ı c´ac nguyˆen so. trong hˆe. thˆo´ng ch´
ung ta x´ac d¯i.nh trˆen lu.´o.i d¯iˆ
c´ac to.a d¯oˆ. d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng l`a nguyˆen. Thˆa.t ra, nˆe´u ch´
ung ta cˇa´t d¯oa.n thˇa˙’ng v´o.i
h`ınh ch˜
u. nhˆa.t tru.´o.c khi hiˆe˙’n thi. n´o th`ı to.a d¯ˆo. c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng c´o thˆe˙’
`an 1.1.3). Gia˙’
khˆong nguyˆen. (Ch´
ung ta s˜e tha˙’o luˆa.n c´ac giao d¯iˆe˙’m khˆong nguyˆen trong Phˆ
10


su˙’. d¯oa.n thˇa˙’ng c´o hˆe. sˆo´ g´oc |m| ≤ 1; c´ac tru.`o.ng ho..p kh´ac d¯u.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 c´ac d¯oa.n thˇa˙’ng ngang, d¯u
´.ng hoˇa.c c´o hˆe. sˆo´ g´oc ±1 l`a tˆ
d¯i qua c´ac pixel trˆen lu.´o.i.

1.1.1


Thuˆ
a.t to´
an sˆ
o´ gia

`an tu˙’. cu˙’a lattice nguyˆen Z2 ). Phu.o.ng
X´et hai pixel A = (xA , yA ) v`a B = (xB , yB ) (t´
uc c´ac phˆ
tr`ınh d¯u.`o.ng thˇa˙’ng AB c´o da.ng y = mx + t, trong d¯o´ hˆe. sˆo´ g´oc m = dy/dx v`a t = yA − mxA .
C´ach d¯o.n gia˙’n nhˆa´t d¯ˆe˙’ v˜e d¯oa.n thˇa˙’ng AB l`a:

1. T´ınh hˆe. sˆo´ g´oc m;
2. Tˇang x mˆo.t d¯o.n vi. (kho˙’.i d¯`ˆau t`
u. d¯iˆe˙’m bˆen tr´ai nhˆa´t), v´o.i mˆo˜i xi t´ınh yi = mxi + t v`a
sau d¯´o v˜e pixel ta.i (xi , yi + 0.5 )1 .
Theo c´ach n`ay ta cho.n pixel tˆo´t nhˆa´t, t´
u.c l`a pixel m`a khoa˙’ng c´ach d¯ˆe´n d¯u.`o.ng thˇa˙’ng thu..c
`an t´ınh mˆo.t ph´ep nhˆan,
tˆe´ nho˙’ nhˆa´t. Phu.o.ng ph´ap n`ay khˆong hiˆe.u qua˙’ do mˆo˜i bu.´o.c lˇa.p cˆ
.
uy
´ rˇ`a ng
mˆo.t ph´ep cˆo.ng v`a mˆo.t ph´ep to´an l`am tr`on. Ta c´o thˆe˙’ khu˙’ ph´ep nhˆan bˇ`a ng c´ach ch´
yi+1 = mxi+1 + t
= m(xi + ∆x) + t
= yi + m∆x,
v`a nˆe´u bu.´o.c tˇang ∆x = 1 th`ı yi+1 = yi + m.
Do d¯o´ nˆe´u x tˇang mˆo.t d¯o.n vi. th`ı y tˇang m d¯o.n vi.. V´o.i mo.i d¯iˆe˙’m (xi , yi ) trˆen d¯oa.n
thˇa˙’ng ta biˆe´t rˇ`a ng nˆe´u xi+1 = xi + 1 th`ı yi+1 = yi + m; t´

u.c l`a, c´ac gi´a tri. x v`a y d¯u.o..c t´ınh
- ˆay ch´ınh l`a “thuˆa.t to´an sˆo´ gia”: v´o.i mˆo˜i
theo c´ac gi´a tri. tru.´o.c d¯´o cu˙’a n´o (xem H`ınh 1.2). D
bu.´o.c lˇa.p ta thu..c hiˆe.n c´ac ph´ep to´an sˆo´ gia du..a trˆen bu.´o.c tru.´o.c.
Kho˙’.i ta.o ta g´an (x0 , y0 ) l`a to.a d¯oˆ. nguyˆen cu˙’a d¯iˆe˙’m xuˆa´t ph´at, chˇa˙’ng ha.n A. Ch´
uy
´
rˇ`a ng trong tru.`o.ng ho..p |m| > 1 nˆe´u x tˇang mˆo.t d¯o.n vi. th`ı y tˇang ho.n mˆo.t d¯o.n vi.. Do d¯´o
`an ho´an d¯oˆ˙’i vai tr`o cu˙’a x v`a y bˇ`a ng c´ach g´an bu.´o.c tˇang mˆo.t d¯o.n vi. cho y v`a tˇang x mˆo.t

lu.o..ng ∆x = ∆y
= m1 .
m
1

`an nguyˆen, l`am tr`on xuˆo´ng v`a l`am tr`on lˆen cu˙’a x.
´.ng l`a phˆ

y hiˆe.u [x], x v`a x tu.o.ng u

11


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



(xi + 1, yi + m )



(xi , yi )





(xi , yi )

(xi + 1, yi + m)

H`ınh 1.2: T´ınh to´an sˆo´ gia cu˙’a (xi , yi ).
V´ı du. 1.1.1 Gia˙’ su˙’. A(2, 0), B(9, 3). Khi d¯´o d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A v`a B c´o hˆe. sˆo´
´ du.ng thuˆa.t to´an sˆo´ gia ta d¯u.o..c d˜ay c´ac d¯iˆe˙’m v˜e tˆo´t nhˆa´t nhu. trong
g´oc m = 37 ∈ (0, 1). Ap
ba˙’ng du.´o.i:

i

xi

yi

yi + 0.5

0

2

0

0

1

3

0

2

4

3

5


4

6

5

7

6

8

7

9

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 d¯aˆy minh ho.a thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng t`
u. (x0 , y0 ) d¯ˆe´n (x1 , y1 )
- iˆe˙’m kho˙’.i d¯`ˆau l`a d¯iˆe˙’m bˆen tr´ai nhˆa´t. Ngo`ai ra ta chı˙’ x´et tru.`o.ng ho..p
v´o.i gi´a tri. m`au V alue. D
−1 ≤ m ≤ 1 v`ı c´ac tru.`o.ng ho..p kh´ac c´o thˆe˙’ thu..c hiˆe.n do t´ınh d¯oˆ´i x´
u.ng. Ho.n n˜
u.a, ch´
ung ta
.
.
.
.
.
.
´ ng, xiˆen

ung bo˙’ qua viˆe.c kiˆe˙’m tra c´ac tru `o ng ho. p d¯aˇ. c biˆe.t: d¯u `o ng thˇa˙’ng nˇ`a m ngang, d¯u
mˆo.t g´oc ±450 . Ch´
uy
´ rˇ`a ng, trong ngˆon ng˜
u. C, (int)y bˇ`a ng y + 0.5 .
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ˆ
e˙’m gi˜
u.a

Thu˙’ tu.c Line() thao t´ac trˆen c´ac sˆo´ thu..c y v`a m. Bresenham d¯˜a xˆay du..ng thuˆa.t to´an [2] v˜e
d¯oa.n thˇa˙’ng chı˙’ su˙’. du.ng c´ac ph´ep to´an trˆen sˆo´ nguyˆen do d¯´o tr´anh go.i h`am l`am tr`on v`a cho
ph´ep x´ac d¯.inh (xi+1 , yi+1 ) theo sˆo´ gia du..a trˆen nh˜

u.ng gi´a tri. o˙’. bu.´o.c tru.´o.c (xi , yi ). Thuˆa.t
to´an n`ay c´o thˆe˙’ mo˙’. rˆo.ng da.ng dˆa´u chˆa´m d¯ˆo.ng d¯oˆ´i v´o.i c´ac to.a d¯oˆ. thu..c. Ho.n n˜
u.a, phu.o.ng
u
ph´ap cu˙’a Bresenham c´o thˆe˙’ d¯u.o..c ´ap du.ng t´ınh to´an trˆen sˆo´ nguyˆen v˜e d¯u.`o.ng tr`on mˇa.c d`
.
.
.
.
.
.
yy
´. V`ı vˆa.y ch´
ung ta su˙’ du.ng phu o ng ph´ap tu o ng
n´o khˆong dˆ˜e d`ang mo˙’ rˆo.ng cho conic tu`
`an d¯`ˆau tiˆen bo˙’.i Pitteway [16], [17] v`a d¯u.o..c
d¯ˆo´i kh´ac, thuˆa.t to´an d¯iˆe˙’m gi˜
u.a, d¯u.o..c cˆong bˆo´ lˆ
ca˙’i tiˆe´n bo˙’.i Van Aken [26] v`a mˆo.t sˆo´ t´ac gia˙’ kh´ac [28], [29]. Van Aken d¯˜a chı˙’ ra [26] d¯ˆo´i v´o.i
c´ac d¯u.`o.ng thˇa˙’ng v`a d¯u.`o.ng tr`on v´o.i d˜
u. liˆe.u nguyˆen, cˆong th´
u.c d¯iˆe˙’m gi˜
u.a suy ra cˆong th´
u.c
cu˙’a Bresenham v`a do d¯´o sinh ra c`
ung d˜ay c´ac pixel.
Khˆong mˆa´t t´ınh tˆo˙’ng qu´at, gia˙’ su˙’. hˆe. sˆo´ g´oc m cu˙’a d¯u.`o.ng thˇa˙’ng thuˆo.c khoa˙’ng (0, 1)
(c´ac tru.`o.ng ho..p kh´ac c´o thˆe˙’ d¯u.o..c xu˙’. l´
y bo˙’.i c´ac ph´ep lˆa´y d¯oˆ´i x´
u.ng mˆo.t c´ach th´ıch ho..p qua

c´ac tru.c to.a d¯oˆ. ). Ta c˜
ung k´
y hiˆe.u d¯iˆe˙’m xuˆa´t ph´at l`a (xA , yA ) v`a d¯iˆe˙’m kˆe´t th´
uc l`a (xB , yB ).
.
.
.
.
- ˇa.t dy := yB − yA , dx = xB − xA . Phu o ng tr`ınh d¯u `o ng thˇa˙’ng l qua hai d¯iˆe˙’m A v`a B x´ac
D
d¯.inh bo˙’.i
y=

dy
x + t;
dx
13


D ✇
.....
.......
.......
.......
.
.
.
.
.
.............

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

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

(l− )

M





C

Q

R


(l+ )

l

H`ınh 1.3: Lu.´o.i c´ac pixel v`a vi. tr´ı d¯iˆe˙’m C, R, D, Q v`a M.
hay tu.o.ng d¯u.o.ng
f (x, y) := ax + by + c = 0,
trong d¯´o a = dy, b = −dx, v`a c = b × dx. K´
y hiˆe.u c´ac nu˙’.a mˇa.t phˇa˙’ng ngo`ai v`a nu˙’.a mˇa.t
phˇa˙’ng trong x´ac d¯.inh bo˙’.i l 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 cu˙’a thuˆa.t to´an d¯iˆe˙’m gi˜
Y
u.a l`a xˆay du..ng mˆo.t d˜ay c´ac d¯iˆe˙’m v˜e “tˆo´t nhˆa´t” (xi , yi )
u.ng d¯iˆe˙’m (xi , yi ) d¯u.o..c
bˇa´t d¯`ˆau t`
u. d¯iˆe˙’m (x0 , y0 ) = (xA , yA ). Kh´ai niˆe.m tˆo´t nhˆa´t o˙’. d¯ˆay l`a nh˜
`an v´o.i d¯u.`o.ng thˇa˙’ng thu..c tˆe´ (da.ng liˆen tu.c) nhˆa´t. Theo gia˙’ thiˆe´t, 0 < m < 1, nˆen khi
cho.n gˆ
x tˇang mˆo.t lu.o..ng ∆x th`ı y tˇang khˆong qu´a ∆y = m∆x d¯o.n vi..
V`ı vˆa.y nˆe´u bu.´o.c th´
u. i cho.n d¯u.o..c d¯iˆe˙’m v˜e tˆo´t nhˆa´t C := (xi , yi ) th`ı o˙’. bu.´o.c th´
u. i + 1
ta s˜e cho.n d¯iˆe˙’m v˜e (xi+1 , yi+1 ), trong d¯o´ xi+1 = xi + 1 v`a yi+1 = yi hoˇa.c yi+1 = yi + 1.
N´oi c´ach kh´ac, bu.´o.c th´
u. i + 1 ch´
ung ta s˜e cho.n mˆo.t trong hai pixel R := (xi + 1, yi ) hoˇa.c
D := (xi + 1, yi + 1) (xem H`ınh 1.3). K´

y hiˆe.u Q l`a giao d¯iˆe˙’m cu˙’a hai d¯u.`o.ng thˇa˙’ng l v`a
x = xi + 1. Theo Bresenham, dˆa´u cu˙’a biˆe˙’u th´
u.c x´ac d¯i.nh bo˙’.i hiˆe.u gi˜
u.a hai khoa˙’ng c´ach t`
u.
R v`a D d¯ˆe´n Q cho ph´ep x´ac d¯i.nh pixel tˆo´t nhˆa´t o˙’. bu.´o.c i + 1. Trong thuˆa.t to´an d¯iˆe˙’m gi˜
u.a,
ta quan s´at vi. tr´ı cu˙’a d¯iˆe˙’m gi˜
u.a M v`a c´ac nu˙’.a mˇa.t phˇa˙’ng x´ac d¯i.nh bo˙’.i d¯u.`o.ng thˇa˙’ng l. Dˆ˜e
`an v´o.i d¯u.`o.ng thˇa˙’ng l ho.n; nˆe´u M ∈ (l− ) th`ı
d`ang chı˙’ ra rˇa` ng, nˆe´u M ∈ (l+ ) th`ı pixel D gˆ
- u.`o.ng thˇa˙’ng l c´o thˆe˙’ d¯i ngang qua M ; hoˇa.c ca˙’ hai pixel nˇa` m vˆ
`an ho.n. D
`e c`
pixel R gˆ
ung
+

.
.
.
.
.
.
mˆo.t nu˙’ a mˇa.t phˇa˙’ng (l ) (hoˇa.c (l )) nhu ng trong bˆa´t c´
u tru `o ng ho. p n`ao, ta vˆa˜n cho.n d¯iˆe˙’m
`an v´o.i l nhˆa´t. Ho.n n˜

u.a, sai sˆo´-t´
u.c l`a khoa˙’ng c´ach gi˜

u.a pixel d¯u.o..c cho.n v`a d¯u.`o.ng thˇa˙’ng
thu..c tˆe´ l-luˆon luˆon nho˙’ ho.n hoˇa.c bˇ`a ng 1/2.
14


- ˆe˙’ ´ap du.ng thuˆa.t to´an d¯iˆe˙’m gi˜
`an t´ınh f (M ) = f (xi + 1, yi + 12 ) v`a kiˆe˙’m tra
D
u.a, chı˙’ cˆ
dˆa´u cu˙’a n´o. Do d¯´o ta d¯i.nh ngh˜ıa biˆe´n quyˆe´t d¯.inh
di := f (xi + 1, yi + 12 )
=

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

Khi d¯´o
1. Nˆe´u di > 0 cho.n pixel D;
2. Nˆe´u di < 0 cho.n pixel R;
3. Nˆe´u di = 0 cho.n mˆo.t trong hai pixel R hoˇa.c D, do d¯´o cho.n R.
`an x´ac d¯i.nh to.a d¯ˆo. d¯iˆe˙’m gi˜
Kˆe´ tiˆe´p ta cˆ
u.a M v`a do d¯o´ biˆe´n quyˆe´t d¯.inh di+1 o˙’. bu.´o.c i + 1;
`eu n`ay phu. thuˆo.c v`ao viˆe.c cho.n pixel R hoˇa.c D. Nˆe´u cho.n R th`ı ho`anh d¯oˆ. d¯iˆe˙’m
d˜ı nhiˆen d¯iˆ
M tˇang mˆo.t d¯o.n vi. v`a tung d¯oˆ. khˆong d¯oˆ˙’i. Do d¯o´
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.

y hiˆe.u sˆo´ gia d¯u.o..c cˆo.ng thˆem khi R d¯u.o..c cho.n l`a ∆R := a = dy. N´oi c´ach kh´ac, ta
c´o thˆe˙’ suy ra biˆe´n quyˆe´t d¯.inh o˙’. bu.´o.c kˆe´ tiˆe´p t`
u. biˆe´n quyˆe´t d¯.inh o˙’. bu.´o.c hiˆe.n h`anh bˇa` ng
`an pha˙’i t´ınh la.i gi´a tri. f (M ).
c´ach cˆo.ng thˆem sˆo´ gia ∆R m`a khˆong cˆ
Nˆe´u cho.n D th`ı ho`anh d¯oˆ. v`a tung d¯oˆ. d¯iˆe˙’m M c`
ung tˇang mˆo.t d¯o.n vi., nˆen
3
3
di+1 = f (xi + 2, yi + ) = a(xi + 2) + b(yi + ) + c.
2
2
V`a do d¯´o
di+1 = di + a + b.

y hiˆe.u sˆo´ gia d¯u.o..c cˆo.ng v`ao di+1 sau khi cho.n D l`a ∆D := a + b = dy − dx.
V`ı o˙’. bu.´o.c d¯`aˆu tiˆen, ta cho.n (x0 , y0 ) = (xA , yA ) nˆen c´o thˆe˙’ t´ınh tru..c tiˆe´p gi´a tri. kho˙’.i
ta.o d0 . Thˆa.t vˆa.y, d¯iˆe˙’m gi˜
u.a d¯`ˆau tiˆen c´o to.a d¯ˆo. (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 ) thuˆo.c d¯u.`o.ng thˇa˙’ng l nˆen f (x0 , y0 ) = 0; do d¯´o gi´a tri. kho˙’.i d¯`ˆau cu˙’a biˆe´n
u. hai, th´
u.
quyˆe´t d¯.inh l`a d0 = a + b/2 = dy − dx/2. Su˙’. du.ng d0 ta c´o thˆe˙’ cho.n pixel th´
- ˆe˙’ khu˙’. mˆa˜u sˆo´ trong d0 ta d¯.inh ngh˜ıa la.i h`am f bˇ`a ng c´ach nhˆan n´o cho 2; t´
ba, v.v. D
u.c l`a
f (x, y) = 2(ax + by + c). N´oi c´ach kh´ac, nhˆan 2 cho c´ac hˇa` ng sˆo´ a, b, c v`a biˆe´n quyˆe´t d¯i.nh;
`eu n`ay khˆong a˙’nh hu.o˙’.ng d¯ˆe´n dˆa´u cu˙’a biˆe´n quyˆe´t d¯.inh.
m`a d¯iˆ
Tˆo˙’ng qu´at ho´a thuˆa.t to´an d¯iˆe˙’m gi˜
u.a v˜e d¯oa.n thˇa˙’ng 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 c´o d¯iˆe˙’m v˜e tˆo´t nhˆa´t (xi , yi ) v`a biˆe´n quyˆe´t d¯.inh di .
2. Gia˙’ su˙’. o˙’. bu.´o.c th´
- ˇa.t d¯iˆe˙’m v˜e ta.i (xi , yi ).
3. [V˜e pixel hiˆe.n h`anh] D
4. [Cˆa.p nhˆa.t] Nˆe´u xi = xB , thuˆa.t to´an d`
u.ng; ngu.o..c la.i, d¯aˇ. t
xi+1 = xi + 1;
yi+1 =
di+1 =


nˆe´u di ≤ 0,
yi + 1 nˆe´u ngu.o..c la.i;
di + ∆R nˆe´u di ≤ 0,
di + ∆D nˆe´u ngu.o..c la.i.
yi

5. Thay i bˇ`a ng (i + 1) v`a lˇa.p la.i Bu.´o.c 3.

V´ı du. 1.1.2 Gia˙’ su˙’. A(2, 0), B(9, 3). Khi d¯´o d¯u.`o.ng thˇa˙’ng qua hai d¯iˆe˙’m A v`a B c´o hˆe. sˆo´
g´oc m = 37 ∈ (0, 1). Dˆ˜e d`ang kiˆe˙’m 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 thuˆa.t to´an d¯iˆe˙’m gi˜
Ap
u.a ta c´o d˜ay c´ac d¯iˆe˙’m v˜e tˆo´t nhˆa´t nhu. trong ba˙’ng du.´o.i:
i

xi

yi

di

0

2

0

−1


1

3

0

5

2

4

1

−3

3

5

1

3

4

6

2


−5

5

7

2

1

6

8

3

−7

7

9

3

−1

Hiˆe˙’n nhiˆen rˇ`a ng c´ac kˆe´t qua˙’ n`ay tr`
ung v´o.i kˆe´t qua˙’ khi su˙’. du.ng phu.o.ng ph´ap sˆo´ gia trong
V´ı du. 1.1.1.

`an thiˆe´t d¯oˆ´i v´o.i di+1 trong mˆo˜i bu.´o.c lˇa.p l`a ph´ep cˆo.ng v`a khˆong
Ch´
uy
´ rˇ`a ng, ph´ep t´ınh cˆ
c´o ph´ep nhˆan. Ho.n n˜
u.a, v`ong lˇa.p ho`an to`an d¯o.n gia˙’n nhu. trong thu˙’ tu.c MidPointLine()
du.´o.i d¯ˆay:

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ˆ

o.t sˆ
o´ vˆ
a´n d
¯ˆ
en quan d
¯ˆ
e´n thuˆ
a.t to´
an v˜
ed
¯oa.n thˇ
a˙’ ng

`au cuˆ
`an d¯`oi ho˙’i mˆo.t d¯oa.n thˇa˙’ng
Th´
u. tu.. cu˙’a c´
ac d
¯iˆ
e˙’m d
¯ˆ
o´i. Trong mˆo.t u
´.ng du.ng ta cˆ
u. A d¯ˆe´n B ch´

u.a c`
ung tˆa.p c´ac pixel nhu. d¯oa.n thˇa˙’ng d¯u.o..c v˜e t`
u. B d¯ˆe´n A; n´oi
d¯u.o..c v˜e t`
c´ach kh´ac, d¯oa.n thˇa˙’ng d¯u.o..c v˜e khˆong phu. thuˆo.c v`ao th´
u. tu.. c´ac d¯iˆe˙’m d¯`aˆu cuˆo´i. Su.. sai kh´ac
chı˙’ c´o thˆe˙’ xa˙’y ra ta.i nh˜
u.ng d¯iˆe˙’m v˜e m`a d¯u.`o.ng thˇa˙’ng d¯i qua d¯iˆe˙’m gi˜
u.a v`a biˆe´n quyˆe´t d¯i.nh
u. tr´ai sang pha˙’i ch´
ung ta cho.n d¯iˆe˙’m v˜e R. Do t´ınh
bˇ`a ng khˆong; trong tru.`o.ng ho..p n`ay, d¯i t`
d¯ˆo´i x´
u.ng, khi d¯i t`
u. pha˙’i sang tr´ai v`a d = 0 l˜e ra ta cho.n d¯iˆe˙’m v˜e R, nhu.ng cho.n lu..a n`ay s˜e
`an y v´o.i pixel d¯u.o..c cho.n khi d¯i t`
u. tr´ai sang pha˙’i. Do d¯´o
sai lˆe.ch mˆo.t d¯o.n vi. theo th`anh phˆ
`an cho.n pixel D khi d¯i t`
ch´
ung ta cˆ
u. pha˙’i sang tr´ai trong tru.`o.ng ho..p d = 0. L´
y luˆa.n tu.o.ng
tu.. d¯oˆ´i v´o.i c´ac d¯oa.n thˇa˙’ng c´o hˆe. sˆo´ g´oc bˆa´t k`
y.
Phu.o.ng ph´ap ho´an d¯oˆ˙’i c´ac d¯iˆe˙’m d¯`ˆau cuˆo´i cu˙’a d¯oa.n thˇa˙’ng d¯ˆe˙’ thuˆa.t to´an xu˙’. l´
y theo
c`
ung hu.´o.ng khˆong thu..c hiˆe.n ch´ınh x´ac khi ch´
ung ta v˜e c´ac d¯oa.n thˇa˙’ng theo mˆa˜u tˆo. C´ac

d¯oa.n thˇa˙’ng v˜e theo mˆa˜u thu.`o.ng “neo” nh˜
u.ng dˆa´u hiˆe.u ta.i d¯iˆe˙’m xuˆa´t ph´at, c´o thˆe˙’ l`a d¯iˆe˙’m
- ˇa.c biˆe.t, v´o.i mˆa˜u tˆo chˆa´m-ga.ch,
du.´o.i bˆen tr´ai, khˆong phu. thuˆo.c v`ao hu.´o.ng di chuyˆe˙’n. D
chˇa˙’ng ha.n 111100, ch´
ung ta muˆo´n v˜e mˆa˜u n`ay ta.i d¯iˆe˙’m xuˆa´t ph´at m`a khˆong tu.. d¯ˆo.ng d¯ˆo˙’i
th`anh d¯iˆe˙’m du.´o.i bˆen tr´ai. Ngo`ai ra, nˆe´u thuˆa.t to´an luˆon luˆon d¯aˇ. t la.i c´ac d¯iˆe˙’m d¯`aˆu cuˆo´i
`an di chuyˆe˙’n t`
theo th´
u. tu.. ch´ınh tˇa´c, ta cˆ
u. tr´ai sang pha˙’i v´o.i d¯oa.n thˇa˙’ng AB v`a t`
u. pha˙’i
`eu n`ay ta.o ra su.. gi´an d¯oa.n trong qu´a tr`ınh v˜e, chˇa˙’ng ha.n
sang tr´ai v´o.i d¯oa.n thˇa˙’ng BA; d¯iˆ
d¯a gi´ac, ta.i nh˜
u.ng d¯ı˙’nh chung.
- iˆ
`
´t. Mˆo.t vˆa´n d¯`ˆe kh´ac ch´
`an
D
e˙’m xuˆ
a´t ph´
at nˇ
a m trˆ
en ca.nh cu˙’ a d
¯a gi´
ac cˇ
a
ung ta cˆ

.
.
.
.
su˙’ a d¯ˆo˙’i thuˆa.t to´an d¯ˆe˙’ v˜e c´ac d¯oa.n thˇa˙’ng sau khi d¯u o. c cˇa´t bo˙’ i mˆo.t trong c´ac thuˆa.t to´an
`an 3.3. H`ınh 1.4(a) minh ho.a d¯oa.n thˇa˙’ng d¯u.o..c cˇa´t bo˙’.i ca.nh bˆen tr´ai, x = xmin ,
trong Phˆ
cu˙’a h`ınh ch˜
u. nhˆa.t. Giao d¯iˆe˙’m cu˙’a d¯oa.n thˇa˙’ng v`a ca.nh bˆen tr´ai c´o ho`anh d¯ˆo. x nguyˆen
nhu.ng tung d¯oˆ. y thu..c. Pixel (xmin , mxmin + t + 0.5 ) trˆen ca.nh x = xmin ch´ınh l`a pixel
d¯u.o..c v˜e ta.i ho`anh d¯oˆ. xmin cu˙’a d¯oa.n thˇa˙’ng tru.´o.c khi cˇa´t theo thuˆa.t to´an d¯iˆe˙’m gi˜
u.a2 . V´o.i
`an kho˙’.i ta.o biˆe´n quyˆe´t d¯.inh ta.i d¯iˆe˙’m gi˜
pixel kho˙’.i ta.o d¯a˜ biˆe´t, kˆe´ tiˆe´p ch´
ung ta cˆ
u.a d¯oa.n
`an ch´
RD trong cˆo.t kˆe´ bˆen. Cˆ
uy
´ rˇ`a ng, c´ach l`am n`ay ta.o ra d˜ay ch´ınh x´ac c´ac pixel, trong
- ˆay l`a hˆe. qua˙’
`a m gi˜
`e nhau, ch´
`an l`am tr`on xuˆo´ng. D
ung ta cˆ
Khi mxmin + t nˇ
u.a hai d¯u.`o.ng thˇa˙’ng ngang kˆ
cu˙’a viˆe.c cho.n pixel R khi d = 0.
2


18


x = xmin

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

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

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

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

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

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

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

D



M—

(xmin , mxmin + t + 0.5 )
(xmin , mxmin + t)






R



y = ymin

(a)
x = .xmin

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1
2

y = ymin −
y = ymin − 1







✐D ②

②C ②
















I•




















y = ymin

(b)
- iˆe˙’m xuˆa´t ph´at nˇ`a m trˆen biˆen h`ınh ch˜
H`ınh 1.4: D
u. nhˆa.t. (a) Giao v´o.i ca.nh d¯u
´.ng. (b) Giao
v´o.i ca.nh ngang.

19


khi cˇa´t d¯u.`o.ng thˇa˙’ng theo d¯u.`o.ng biˆen xmin v`a sau d¯´o thu..c hiˆe.n v˜e d¯oa.n thˇa˙’ng d¯u.o..c cˇa´t t`
u.
(xmin , mxmin + t + 0.5 ) d¯ˆe´n (xB , yB ) theo thuˆa.t to´an d¯iˆe˙’m gi˜
u.a s˜e cho d˜ay d¯iˆe˙’m v˜e khˆong
ch´ınh x´ac do d¯u.`o.ng thˇa˙’ng sau khi cˇa´t c´o hˆe. sˆo´ g´oc kh´ac m.
Tru.`o.ng ho..p ph´
u.c ta.p ho.n khi d¯u.`o.ng thˇa˙’ng AB giao v´o.i d¯u.`o.ng thˇa˙’ng nˇ`a m ngang nhu.
`eu pixel nˇa` m trˆen d`ong qu´et y = ymin
trong H`ınh 1.4(b). Khi hˆe. sˆo´ g´oc m rˆa´t nho˙’, c´o nhiˆ
tu.o.ng u
´.ng ca.nh bˆen du.´o.i cu˙’a h`ınh ch˜
u. nhˆa.t. Ch´
ung ta muˆo´n bao h`am c´ac pixel n`ay trong
h`ınh ch˜
u. nhˆa.t, nhu.ng do qu´a tr`ınh t´ınh to´an giao d¯iˆe˙’m v´o.i d`ong qu´et y = ymin v`a sau d¯´o
l`am tr`on ho`anh d¯oˆ. x ta d¯u.o..c pixel C khˆong pha˙’i pixel bˆen tr´ai nhˆa´t D trˆen d`ong n`ay. Du..a
trˆen h`ınh v˜e, ta thˆa´y rˇ`a ng pixel bˆen tr´ai nhˆa´t D l`a pixel trˆen bˆen pha˙’i giao d¯iˆe˙’m I cu˙’a d¯oa.n

`an t`ım I v`a l`am tr`on lˆen ho`anh d¯oˆ. ;
thˇa˙’ng AB v`a d¯u.`o.ng thˇa˙’ng y = ymin − 12 . Do d¯´o, ta chı˙’ cˆ
pixel d¯`ˆau tiˆen D ch´ınh l`a ( xI , ymin ).
Cuˆo´i c`
ung, thuˆa.t to´an d¯iˆe˙’m gi˜
u.a c˜
ung thu..c hiˆe.n tˆo´t trong tru.`o.ng ho..p c´ac d¯iˆe˙’m d¯`ˆau
cuˆo´i c´o to.a d¯ˆo. thu..c; kh´ac biˆe.t duy nhˆa´t l`a bu.´o.c tˇang v`a c´ac ph´ep to´an thao t´ac trˆen sˆo´
thu..c.
Thay d
¯ˆ
o˙’i cu.`
o.ng d
¯ˆ
o. s´
ang cu˙’a d
¯oa.n thˇ
a˙’ ng theo hˆ
e. sˆ
o´ g´
oc. X´et hai d¯oa.n thˇa˙’ng trong

- oa.n thˇa˙’ng l2 c´o hˆe. sˆo´ g´oc 1 v`a do d¯o´ c´o d¯oˆ. d`ai bˇa` ng 2 lˆ
`an d¯oˆ. d`ai cu˙’a l1 . Ch´
H`ınh 1.5. D
ung
.
.
.
ta d¯ˇa.t c`

ung sˆo´ (10) pixel trˆen mˆo˜i d¯oa.n thˇa˙’ng. Nˆe´u cu `o ng d¯ˆo. cu˙’a mˆo˜i pixel l`a I th`ı cu `o.ng

d¯ˆo. trˆen mˆo.t d¯o.n vi. d¯ˆo. d`ai cu˙’a d¯oa.n thˇa˙’ng l1 l`a I, trong khi cu˙’a l2 l`a I/ 2; su.. khˆong nhˆa´t
qu´an n`ay dˆ˜e d`ang ph´at hiˆe.n bo˙’.i ngu.`o.i quan s´at. Trˆen m`an h`ınh d¯o.n sˇa´c, khˆong c´o c´ach gia˙’i
quyˆe´t, nhu.ng trˆen hˆe. thˆo´ng n-bit trˆen pixel ch´
ung ta c´o thˆe˙’ ca˙’i thiˆe.n d¯u.o..c t`ınh tra.ng n`ay
bˇ`a ng c´ach d¯aˇ. t cu.`o.ng d¯ˆo. l`a mˆo.t h`am cu˙’a hˆe. sˆo´ g´oc. K˜
y thuˆa.t antialiasing cho kˆe´t qua˙’ tˆo´t
u. nhˆa.t c´o d¯oˆ. rˆo.ng he.p v`a t´ınh to´an th´ıch
ho.n bˇ`a ng c´ach xem d¯oa.n thˇa˙’ng nhu. mˆo.t h`ınh ch˜
`eu pixel trˆen mˆo˜i cˆo.t nˇ`a m trong hoˇa.c gˆ
`an h`ınh ch˜
ho..p c´ac cu.`o.ng d¯oˆ. v´o.i nhiˆ
u. nhˆa.t (xem [9],
[11]). Ngo`ai ra coi d¯oa.n thˇa˙’ng nhu. h`ınh ch˜
u. nhˆa.t c˜
ung cho ph´ep ta.o c´ac d¯oa.n thˇa˙’ng v´o.i d¯ˆo.
rˆo.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. V´o.i c´ach v˜e c´ac d¯oa.n thˇa˙’ng,
`an v˜e c´ac nguyˆen so. d¯u.o..c xˆay du..ng t`

u. c´ac d¯oa.n thˇa˙’ng nhu. thˆe´ n`ao? C´ac d¯u.`o.ng
ch´
ung ta cˆ
`e nhau. C´ac h`ınh ch˜
gˆa´p kh´
uc c´o thˆe˙’ d¯u.o..c v˜e bˇ`a ng c´ach xem n´o nhu. c´ac d¯oa.n thˇa˙’ng kˆ
u.
`eu n`ay
nhˆa.t v`a d¯a gi´ac l`a nh˜
u.ng nguyˆen so. v`
ung v`a c´o thˆe˙’ v˜e c´ac ca.nh liˆen tiˆe´p nhu.ng d¯iˆ
`an 4.6 v`a 4.7
dˆa˜n d¯ˆe´n mˆo.t sˆo´ pixel nˇ`a m ngo`ai v`
ung d¯i.nh ngh˜ıa bo˙’.i nguyˆen so.-xem c´ac Phˆ
.
.
`e nh˜
`an v˜e c´ac d¯ı˙’nh chung cu˙’a d¯u.`o.ng gˆa´p

u ng thuˆa.t to´an xu˙’ l´
y vˆa´n d¯`ˆe n`ay. Ch´
uy
´ rˇa` ng cˆ
`an do viˆe.c v˜e hai lˆ
`an c´o thˆe˙’ l`am thay d¯ˆo˙’i m`au hoˇa.c d¯aˇ. t m`au nˆ
`en khi viˆe´t trong
kh´
uc mˆo.t lˆ
.
.

chˆe´ d¯oˆ. XOR trˆen m`an h`ınh, hoˇa.c tˇang cu `o ng d¯ˆo. gˆa´p d¯ˆoi ta.i d¯o´. Thˆa.t ra c´o nh˜
u.ng pixel
`an nhau hoˇa.c cˇa´t nhau.
kh´ac l`a chung cu˙’a hai d¯oa.n thˇa˙’ng nˇ`a m gˆ

20


②D
- u.`o.ng thˇa˙’ng l2










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

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

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

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

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

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

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

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

②②②②②②②②②②D

- u.`o.ng thˇa˙’ng l1

H`ınh 1.5: Thay d¯ˆo˙’i cu.`o.ng d¯oˆ. cu˙’a c´ac d¯u.`o.ng thˇa˙’ng theo hˆe. sˆo´ g´oc.

1.1.4


ac thuˆ
o.c t´ınh cu˙’ a d
¯oa.n thˇ
a˙’ ng

Thuˆo.c t´ınh mˆa˜u tˆo d¯oa.n thˇa˙’ng c´o thˆe˙’ a˙’nh hu.o˙’.ng d¯ˆe´n nh˜
u.ng nguyˆen so. kh´ac. N´oi chung
`eu kiˆe.n logic d¯ˆe˙’ kiˆe˙’m tra c´o d¯aˇ. t d¯iˆe˙’m v˜e hay khˆong, chı˙’ d¯ˇa.t khi d¯iˆ
`eu kiˆe.n
`an su˙’. du.ng d¯iˆ
ta cˆ
.
.
.
.
.
d¯u
´ng (gi´a tri. 1). Ch´
ung ta lu u tr˜
u mˆa˜u v˜e nhu mˆo.t chuˆo˜i d¯ˆo. d`ai Tile Size (thu `o ng l`a l˜
uy
th`
u.a cu˙’a 2: N´oi chung Tile Size = 16) l`a mˆa˜u c´o kiˆe˙’u Bool (chˇa˙’ng ha.n, 16 bit nguyˆen);

`eu kiˆe.n
do d¯o´ mˆa˜u tˆo d¯u.o..c lˇa.p la.i sau khi v˜e 16 pixel. Ch´
ung ta thay d`ong lˆe.nh khˆong d¯iˆ
y tru.`o.ng ho..p n`ay; chˇa˙’ng ha.n,
putpixel() trong thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng d¯ˆe˙’ xu˙’. l´

if bitstring[i % 16] putpixel(x, y, value);
trong d¯´o chı˙’ sˆo´ i l`a mˆo.t biˆe´n tˇang m´o.i trong v`ong lˇa.p bˆen trong cu˙’a thuˆa.t to´an. Tuy nhiˆen,
`an lˇa.p v`a khˆong
c´ach l`am n`ay c´o mˆo.t ha.n chˆe´ l`a do mˆo˜i bit trong mˇa.t na. tu.o.ng u
´.ng mˆo.t lˆ
tu.o.ng u
´.ng d¯ˆo. d`ai d¯o.n vi. do.c theo d¯oa.n thˇa˙’ng nˆen d¯oˆ. d`ai cu˙’a n´et v˜e thay d¯oˆ˙’i theo hˆe. sˆo´
g´oc cu˙’a d¯oa.n thˇa˙’ng; n´et v˜e cu˙’a d¯oa.n thˇa˙’ng xiˆen s˜e d`ai ho.n n´et v˜e cu˙’a d¯oa.n thˇa˙’ng ngang
- iˆ
`eu n`ay l`a khˆong chˆa´p nhˆa.n d¯u.o..c v´o.i nh˜
hay d¯u
´.ng. D
u.ng u
´.ng du.ng mang t´ınh ch´ınh x´ac
`an t´ınh la.i sao cho phu.o.ng
cao, chˇa˙’ng ha.n trong thiˆe´t kˆe´ cˆong nghiˆe.p, v`a do d¯o´ c´ac n´et v˜e cˆ
- ˆo. rˆo.ng cu˙’a d¯oa.n thˇa˙’ng d¯u.o..c
ph´ap v˜e d¯oa.n thˇa˙’ng khˆong phu. thuˆo.c v`ao hˆe. sˆo´ g´oc cu˙’a n´o. D
xem nhu. mˆo.t d˜ay c´ac h`ınh ch˜
u. nhˆa.t d¯ˇa.c v`a trong suˆo´t d¯u.o..c d¯ˇa.t xen k˜e nhau m`a c´ac d¯ı˙’nh
cu˙’a n´o d¯u.o..c t´ınh ch´ınh x´ac theo h`am phu. thuˆo.c kiˆe˙’u v˜e d¯oa.n thˇa˙’ng. Sau d¯o´ thu..c hiˆe.n tˆo
m`au trˆen t`
u.ng h`ınh ch˜
u. nhˆa.t mˆo.t; v´o.i c´ac d¯oa.n thˇa˙’ng ngang hoˇa.c d¯u

´.ng, ta c´o thˆe˙’ d`
ung
lˆe.nh sao ch´ep c´ac h`ınh ch˜
u. nhˆa.t.
Kiˆe˙’u d¯oa.n thˇa˙’ng v`a kiˆe˙’u b´
ut v˜e c´o a˙’nh hu.o˙’.ng lˆa˜n nhau trong c´ac nguyˆen so. liˆen quan
d¯ˆe´n d¯oˆ. rˆo.ng d¯u.`o.ng biˆen. Kiˆe˙’u d¯oa.n thˇa˙’ng thu.`o.ng d¯u.o..c su˙’. du.ng d¯ˆe˙’ x´ac d¯.inh c´ac h`ınh ch˜
u.
nhˆa.t tu.o.ng u
´.ng c´ac n´et v˜e v`a mˆo˜i h`ınh ch˜
u. nhˆa.t d¯u.o..c tˆo m`au v´o.i mˆa˜u b´
ut d¯u.o..c cho.n.
21


- u.`
D
o.ng tr`
on

1.2

X´et d¯u.`o.ng tr`on f (x, y) := x2 + y 2 − R2 = 0. C´o mˆo.t v`ai c´ach d¯o.n gia˙’n v˜e d¯u.`o.ng tr`on nhu.ng
khˆong hiˆe.u qua˙’.
- ˆe˙’ v˜e mˆo.t phˆ
`an tu. d¯u.`o.ng tr`on trong g´oc phˆ
`an tu. th´
D
u. nhˆa´t
{(x, y) ∈ R2 | x ≥ 0, y ≥ 0}

(c´ac cung kh´ac d¯u.o..c v˜e do t´ınh d¯ˆo´i x´
u.ng) ta c´o thˆe˙’ tˇang x t`
u. 0 d¯ˆe´n R (mˆo˜i bu.´o.c mˆo.t d¯o.n

vi.) v`a gia˙’i y = R2 − x2 . Phu.o.ng ph´ap n`ay khˆong hiˆe.u qua˙’ do su˙’. du.ng ph´ep nhˆan v`a lˆa´y
`an v´o.i R v`ı tiˆe´p tuyˆe´n v´o.i d¯u.`o.ng tr`on
cˇan bˆa.c hai. Ngo`ai ra c´o nh˜
u.ng lˆo˜ hˆo˙’ng khi gi´a tri. x gˆ
ta.i nh˜
u.ng d¯iˆe˙’m tu.o.ng u
´.ng tiˆe´n d¯ˆe´n d¯u.`o.ng thˇa˙’ng song song v´o.i tru.c tung. Phu.o.ng ph´ap
kh´ac tu.o.ng tu.., c˜
ung khˆong hiˆe.u qua˙’, tr´anh nh˜
u.ng lˆo˜ hˆo˙’ng l`a v˜e c´ac d¯iˆe˙’m (R cos θ, R sin θ)
u. 0 d¯ˆe´n 900 .
v´o.i θ thay d¯ˆo˙’i t`

1.2.1


D
o´i x´
u.ng t´
am d
¯iˆ
e˙’m

Ch´
ung ta c´o thˆe˙’ gia˙’m b´o.t qu´a tr`ınh t´ınh to´an du..a trˆen t´ınh d¯ˆo´i x´
u.ng cu˙’a d¯u.`o.ng tr`on qua

`an x´et d¯u.`o.ng tr`on tˆam ta.i gˆo´c v`ı nˆe´u khˆong ta thu..c hiˆe.n ph´ep ti.nh
c´ac tru.c ch´ınh. Chı˙’ cˆ
`e gˆo´c to.a d¯oˆ. . Nˆe´u d¯iˆe˙’m (x, y) nˇ`a m trˆen d¯u.`o.ng tr`on th`ı ba˙’y d¯iˆe˙’m
tiˆe´n t`
u. tˆam vˆ
(x, −y), (y, x), (y, −x), (−x, −y), (−y, −x), (−y, x), (−x, y)

ung nˇ`a m trˆen d¯u.`o.ng tr`on.
`an v˜e mˆo.t cung 450 v`a t`
Do d¯´o ta chı˙’ cˆ
u. d¯o´ sinh ra d¯u.`o.ng tr`on. V´o.i d¯u.`o.ng tr`on tˆam
ta.i gˆo´c, t´am d¯iˆe˙’m d¯oˆ´i x´
u.ng c´o thˆe˙’ d¯u.o..c hiˆe˙’n thi. bˇ`a ng thu˙’ tu.c sau (m`a dˆ˜e d`ang tˆo˙’ng qu´at
ho´a v´o.i c´ac d¯u.`o.ng tr`on tˆam 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´

uy
´ rˇa` ng khˆong nˆen go.i thu˙’ tu.c CirclePoints() khi x = y do c´o bˆo´n pixel d¯u.o..c
`an; ta chı˙’ cˆ
`an thay d¯ˆo˙’i d¯oa.n m˜a xu˙’. l´
`eu kiˆe.n biˆen.
v˜e hai lˆ
y d¯iˆ

1.2.2

Thuˆ
a.t to´
an d
¯iˆ
e˙’m gi˜
u.a v˜
ed
¯u.`
o.ng tr`
on

Bresenham [3] d¯a˜ tr`ınh b`ay mˆo.t phu.o.ng ph´ap v˜e d¯u.`o.ng tr`on hiˆe.u qua˙’ ho.n c´ach d¯u.a ra o˙’.
trˆen. Ch´
ung ta nˆeu thuˆa.t to´an tu.o.ng tu.., su˙’. du.ng tiˆeu chuˆa˙’n d¯iˆe˙’m gi˜
u.a, m`a trong tru.`o.ng
ho..p b´an k´ınh v`a c´ac to.a d¯oˆ. cu˙’a tˆam l`a nh˜
u.ng sˆo´ nguyˆen s˜e cho c`
ung mˆo.t kˆe´t qua˙’ c´ac pixel

tˆo´t nhˆa´t.
`an x´et cung mˆo.t phˆ
`an t´am d¯u.`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() d¯ˆe˙’ hiˆe˙’n thi. c´ac pixel trˆen to`an d¯u.`o.ng tr`on. Vi phˆan
= − xy . Suy ra
phu.o.ng tr`ınh f (x, y) := x2 + y 2 − r2 = 0 ta d¯u.o..c 2xdx + 2ydy = 0. Nˆen dx
dy
−1 < dx
≤ 0 v´o.i mo.i (x, y) ∈ (C 1 ). Do d¯´o, khi y tˇang mˆo.t d¯o.n vi. th`ı x gia˙’m khˆong qu´a
dy
mˆo.t d¯o.n vi.. V`ı vˆa.y, gia˙’ su˙’. o˙’. bu.´o.c th´
u. i ch´
ung ta cho.n d¯u.o..c d¯iˆe˙’m v˜e tˆo´t nhˆa´t C := (xi , yi ),
`an cho.n mˆo.t trong hai pixel T := (xi , yi + 1) hoˇa.c D := (xi − 1, yi + 1)
th`ı bu.´o.c kˆe´ tiˆe´p cˆ
(xem H`ınh 1.6). Tu.o.ng tu.. thuˆa.t to´an d¯iˆe˙’m gi˜
u.a v˜e d¯u.`o.ng thˇa˙’ng, d¯ˆe˙’ cho.n mˆo.t trong hai
`an v´o.i d¯u.`o.ng tr`on ho.n ta x´et h`am lˆa´y gi´a tri. ta.i d¯iˆe˙’m gi˜
pixel gˆ
u.a M = (xi − 12 , yi + 1) cu˙’a
hai d¯iˆe˙’m v˜e n`ay. Dˆ˜e d`ang ch´
u.ng minh rˇa` ng, nˆe´u d¯iˆe˙’m M nˇ`a m trong d¯u.`o.ng tr`on (tu.o.ng
`an d¯u.`o.ng tr`on ho.n; v`a M nˇa` m ngo`ai d¯u.`o.ng tr`on (tu.o.ng d¯u.o.ng
d¯u.o.ng f (M ) < 0) th`ı T gˆ
`an d¯u.`o.ng tr`on ho.n. Tru.`o.ng ho..p M nˇ`a m trˆen d¯u.`o.ng tr`on (t´
f (M ) > 0) th`ı D gˆ
u.c f (M ) = 0)
ta c´o thˆe˙’ cho.n mˆo.t trong hai, do d¯´o cho.n pixel D.

- ˇa.t
D

1
1
di := f (M ) = f (xi − , yi + 1) = (xi − )2 + (yi + 1)2 − R2 .
2
2
Nˆe´u di < 0 th`ı cho.n T v`a d¯iˆe˙’m gi˜
u.a kˆe´ tiˆe´p c´o tung d¯oˆ. tˇang mˆo.t d¯o.n vi.. Nˆen
1
1
di+1 = f (xi − , yi + 2) = (xi − )2 + (yi + 2)2 − R2 ;
2
2
v`a do d¯´o di+1 = di + (2yi + 3); suy ra bu.´o.c tˇang ∆T := 2yi + 3.
23


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

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



D



T

M



C

u.a v˜e d¯u.`o.ng tr`on.

H`ınh 1.6: Lu.´o.i pixel trong thuˆa.t to´an d¯iˆe˙’m gi˜
Nˆe´u di ≥ 0 th`ı cho.n D v`a d¯iˆe˙’m gi˜
u.a kˆe´ tiˆe´p c´o ho`anh d¯ˆo. gia˙’m mˆo.t d¯o.n vi. v`a tung d¯oˆ.
tˇang mˆo.t d¯o.n vi.. Nˆen
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 d¯o´ bu.´o.c tˇang ∆D := 2(yi − xi ) + 5.
Nhˇa´c la.i l`a, trong tru.`o.ng ho..p d¯u.`o.ng thˇa˙’ng, c´ac bu.´o.c tˇang ∆R v`a ∆D l`a c´ac hˇ`a ng sˆo´;
tuy nhiˆen, trong tru.`o.ng ho..p d¯u.`o.ng cong bˆa.c hai, ∆T v`a ∆D l`a c´ac h`am phu. thuˆo.c v`ao c´ac
to.a d¯oˆ. cu˙’a d¯iˆe˙’m v˜e hiˆe.n h`anh (xi , yi ). C´ac h`am n`ay c´o thˆe˙’ t´ınh to´an tru..c tiˆe´p ta.i mˆo˜i bu.´o.c
lˇa.p du..a v`ao c´ac gi´a tri. x v`a y cu˙’a pixel d¯u.o..c cho.n trong bu.´o.c lˇa.p tru.´o.c. T´ınh to´an nhu.
vˆa.y khˆong hiˆe.u qua˙’ do c´ac h`am n`ay l`a tuyˆe´n t´ınh (xem Nhˆa.n x´et 1.2.1).
`an t´ınh d0 . V´o.i gia˙’ thiˆe´t b´an k´ınh nguyˆen, ta biˆe´t rˇ`a ng pixel kho˙’.i ta.o
Cuˆo´i c`
ung cˆ
ban d¯`aˆu c´o to.a d¯oˆ. (R, 0) nˆen d¯iˆe˙’m gi˜
u.a c´o to.a d¯ˆo. (R − 12 , 1) v`a do d¯o´ d0 = f (R − 21 , 1) =
(R − 21 )2 + 1 − R2 = 45 − R. Tˆo˙’ng kˆe´t ta c´o thuˆa.t to´an v˜e d¯u.`o.ng tr`on tˆam ta.i gˆo´c to.a d¯ˆo. v`a
b´an k´ınh 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 c´o d¯iˆe˙’m v˜e tˆo´t nhˆa´t (xi , yi ) v`a biˆe´n quyˆe´t d¯.inh di .
- ˇa.t t´am d¯iˆe˙’m v˜e du..a trˆen (xi , yi ).
3. [V˜e pixel hiˆe.n h`anh] D
24



4. [Cˆa.p nhˆa.t] Nˆe´u xi = yi , thuˆa.t to´an d`
u.ng; ngu.o..c la.i, d¯aˇ. t
nˆe´u di < 0,
xi − 1 nˆe´u ngu.o..c la.i;
= yi + 1;
di + 2yi + 3
nˆe´u di < 0,
=
di + 2(yi − xi ) + 5 nˆe´u ngu.o..c la.i.

xi+1 =
yi+1
di+1

xi

5. Thay i bˇ`a ng (i + 1) v`a lˇa.p la.i Bu.´o.c 3.
Nhˆ
a.n x´
et 1.2.1 (i) Vˆa´n d¯`ˆe v´o.i thuˆa.t to´an v`
u.a tr`ınh b`ay, ta l`am viˆe.c trˆen c´ac sˆo´ thu..c v`ı
kho˙’.i ta.o biˆe´n quyˆe´t d¯.inh l`a sˆo´ thu..c. Mˇa.c d`
u c´o thˆe˙’ dˆ˜e d`ang ca˙’i tiˆe´n d¯ˆe˙’ xu˙’. l´
y cho d¯u.`o.ng
tr`on c´o tˆam hoˇa.c b´an k´ınh khˆong nguyˆen, ta s˜e tr`ınh b`ay c´ach t´ınh to´an sˆo´ nguyˆen hiˆe.u qua˙’
ho.n. N´oi c´ach kh´ac ta s˜e khu˙’. c´ac mˆa˜u sˆo´ trong chu.o.ng tr`ınh.
- `ˆau tiˆen, x´et biˆe´n m´o.i hi = di −
D


v`a thay di bo˙’.i hi + 14 trong thuˆa.t to´an. Khi d¯o´ ta
kho˙’.i ta.o h0 = 1 − R v`a so s´anh di < 0 tu.o.ng d¯u.o.ng hi < − 41 . Tuy nhiˆen, do h0 nguyˆen v`a
`an so s´anh hi < 0. Nhu. vˆa.y, ch´
d¯u.o..c tˇang bo˙’.i c´ac gi´a tri. nguyˆen (∆T v`a ∆D ) nˆen chı˙’ cˆ
ung
.
.
.
.
.
.
ta c´o thuˆa.t to´an v˜e d¯u `o ng tr`on chı˙’ su˙’ du.ng c´ac sˆo´ nguyˆen nhu du ´o i d¯ˆay; d¯ˆe˙’ nhˆa´t qu´an v´o.i
thuˆa.t to´an v˜e d¯oa.n thˇa˙’ng, 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


×