Professional Documents
Culture Documents
Do Hoa May Tinh 1 6662
Do Hoa May Tinh 1 6662
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
11
1.1.2
13
1.1.3
Mo.t so van d`e lien quan den thua.t toan ve doa.n thang . . . . . . . .
18
1.1.4
21
- u.`o.ng tr`on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D
22
1.2.1
- oi x
D
u.ng tam diem . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.2.2
23
28
1.3.1
29
1.3.2
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
48
2.2.1
48
2.2.2
- a th
D
u.c Bernstein v`a du.`o.ng cong Bezier . . . . . . . . . . . . . . . .
52
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
63
2.4.2
65
2.4.3
66
2.4.4
66
2.4.5
71
2.4.6
73
2.5
75
2.6
77
2.7
80
2.7.1
Patch Bezier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
2.7.2
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
83
3.2.1
84
Phan tch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
86
87
3.3.1
89
3.3.2
89
3.3.3
93
3.3.4
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
3.5.2
3.5.3
3.6.2
3.6.3
3.6.4
3.6.5
4 T
o m`
au v`
ung
4.1
. . . . . . . . . . . . . . . . . . . 117
127
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
4.3
4.4
4.5
4.6
4.7
4.8
4.7.1
4.7.2
4.7.3
4.7.4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
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
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
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
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 , yi )
(xi , byi c)
(xi + 1, yi + m)
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+ )
.
.
.
.
.
.
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
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:
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
xi
yi
di
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
18
x = xmin
...
...
...
...
...
...
...
...
...
...
...
...
.........
...
...
.........
...
...
.........
.........
...
...
.........
.
.
.
...
.
.
.
.
.
.
.
........................................................................................................................................................................................................................................................................................
..
...
.........
....
.........
....
...
.........
.........
....
...
.........
.
.
.
.
.
.
...
.
...
.
......
...
...
.........
.........
.
...
................
.........
................ . ....
... .................
.................. ..
.
.
.
.
.
.
.
.
.
....................................................................................................................................................................................................................................................................................
...
.... ...
.........
.
..
.................................... ... ... .................
...
.................. ...........
.
.
.
...
.
...... ...
.
.
.
.
.
.
.
...
.
..
......
.
.
.
.
.
.
.
.
...
.
..
......
.
.
.
.
.
.
.
.
...
.
..
......
.
.
.
.
.
.
.
.
...
.
..
......
.
.
.
.
.
.
.
.
.
.....................................................................................................................................................................................................................................................................................
.
.
.
..
.
...
......
.
.
.
.
.
.
.
...
.
.
..
.........
....
...
.........
.
.
.
.
.
.
.
.
...
.
.
.........
....
...
...
...
...
...
...
..
................................................................................................................................................................................................................................
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
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
- 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
..........
........
........
.......
.......
......
......
......
..
..... .........
.....
....
.....
.....
.....
.....
....
...
...
...
...
...
...
...
..
- 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
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
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
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
x 0, y 0}.
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 )
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).
..........
........
.......
.......
......
......
.....
.....
....
.....
...
...
...
...
.
...
...
...
...
...
...
...
...
...
...
...
..
..
.
- 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
...................
..............
...........
.........
........
.......
......
......
.....
.....
.............
.....
....
...
...
.
- 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
`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(),
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
.....
....
....
.....
.....
.....
...
.....
.....
.....
...
.....
....
.
.
.
.....
.
.
.
.....
....
....
.....
....
.....
..
.
.....
...
.....
...........
.........
.....
.....
...
.....
.....
...
.
.
.
.
.
.
.
.
.
.....
...
....
.....
....
...
...
.....
.....
...
...
...
.....
.....
..
.....
...
.....
...
..
.....
.....
.
...
.
.
.
.
.
.
.
.....
..
....
...
....
.....
.....
.....
............
.....
...
.....
. .........
.....
...
.....
........
.....
.
.
.
.....
..............
........
.
.
.
.......... ..
........
.....
....
...
..........
.....
.....
..........
..... .... ........
..... .. .....
.. . ..
.........................................................................................................................................................................................................................
.. . ..
..... .. .....
..... .... .........
.
.
.
.
.....
........
...
.....
.
.
.
.
.
.
.....
.
.
.
.
....
........
.
.
..
.....
........
.........
.....
...
.....
........ .
. ..........
.....
..............
.....
...
.............
.....
.
.
.
.
.
.
.
.
.
.....
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.....
...
.
...
.
.
.
.
.
.
.
.
.
.
.
.....
...
....
.....
...
....
...
.....
.....
...
.....
...
...
.....
...
..
.....
.....
...
..
...
.....
.
.....
.
.
.
.
.
.
.
...
.....
.
.
...
.
.
.
.
.
.
.
.
.
.
.....
.
.......
.
......
...
.
.
.....
.
.
.
.
.
.
.
.
.
.
.....
....
.
.
.
.
.
.....
.
...
.
.
.
.....
.
.
.
.
...
.....
.
.
.
.
.
.
.....
.
...
.
.
.
.
.....
.
.
...
.
.
....
.
.
.
.
.
.
..
...
..
...
..
...
.....
.
....................
.
.
.
.....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
....... .........
.........
.
.
.
.
.
.
.
.
.
.
........
......
.
.
.
.
.
.
.
.
.
.
.
...
........
...
.......
...
.......
......
..........................
......
.
..
.
.
.
.
..
....
.
.....
.
.
.
.
.
..
.
.....
.
.
.
.
.
.
.
.....
.
.
..... ........
...
..........
...
...
....
...
...
.
.
.
.
.
.
.....
...
.....
...
....
.....
...
.....
.
.
....
.
.
..........
..
...... .........
.............................
......
.....
...
......
.....
...
.......
.
.
.
.
.
.
.
.
.
...
........
.....
.........
.......
.
.
.
.
.
.
.
.
.
.
.
.... ................................................
.
.
.
.
..
....
.....
.....
...
.....
...
...
.
(a)
(b)
4
5
3 2
6 7
1
8
Cung
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
vi+1 = vi + k2 .
ui+1 = ui + k2 ,
vi+1 = vi + k3 .
Di chuyen cheo
f
f
k2
+
= vi .
y
y
2
39
.......................................
.........
....
.......
...
.......
...
......
.
.
.
.
...
.
...
.
.
.
..
.
.
....
.
.
.
..
.
...
.
...........................
.
.
.
..
...
.
.
.
.
.
.
.
....
.
.
.
.
.
....
...
....
...
...
..
...
...
...
.
.
.
.
.
.
...
...
...
...
...
...
...
..
.
.
.
.
...
...
....
...
.....
......
...
..... .........
.
.
.
.
.....
.
.....
.....
.....
...
.....
.....
...
......
.
...
......
......
...
.
.
.
.
.
.
.....
....
.
.
.
.
.
.
.
.......
.
.....................................
...
...
...
...
.
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 +
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 +
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
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
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)
\
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
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);
}
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
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
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
(2.3)
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
59
(a)
P1
..
..
..
..
..
.
.
..
...
..
..
.................................................
.
.
.
.
.
.
.
.
.
.
.......
.
..
........
......
..
......
.....
......
.....
....
......
.........
....
.....
.
.
.
.
.
.
.
.
.....
.
..........
.....
.....
....
........
....
....... ....
.......
....
..... ....... ... ....... ...... .......
....
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.......
...
........
............
....
..............................
...
..
..
.
.
...
P2
P3
P0
(b)
P4
......
P1
P4
......
.
..
..
..
..
..
.
.
..
...
..
....................................
..
........
.............
.
.
.
.
.
.
.
.
.
.
......
.......
...
...... ... ....... ....... ....... ...... .........
..
. .... ....
.
......
..
..... .. ..
... ....
...
......... ....
.......
.
.
.
.
.
.
.
...
.
..... ...
....
...
........
....
....
.......
.....
....
....
.....
....
....
.
.
.
.
.
.
.
.
.
.
.
.
.
........
...
............................................
...
...
...
..
.
..
\
Mong muon
P0
P2
Hie.n ta.i
\
P3
5
X
Pk Rk (t).
(2.4)
k=0
2.4
- a th
D
u.c t`
u.ng kh
uc v`
a c
ac h`
am spline
...
........
..
...
....
...
...
...
...
.....
....
...
......
.
.......
........
... ...
.. ..
... ...
... ...
.. .
... ...
.. ..
... ...
... ....
.....
.
.............
... ....
......... .............
.. ..
...... ..........
... ...
....
.. ....
.....
....
....
..
...
...
....
..
...
...
...
..
...
...
..................
..
..................
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
...
.. ....
.... ..
.....
...
...
.
.
....
.. .
....
... ..
...
...
..
..
....
...
...
.. ..
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
.
.
...
.
...
..
..
...
.
....
..
.
.
..
.
.
.
.
.
.
.
.
.
...
...
...
...
...
....
.
..
..
.
.
.
......
.
.
.
.
.
.
.
.
.
...
...
.
... ..
... ..
... ...
. ...
. ..
.
.
.
.
...
.
.
.
...
.
... ..
.
.. ..
... ..
. ...
.
.. ..
.... ....
.....
.
.
...
.
...
....
..
....
..
.
...
.
.
.
.
... ....
.
.. ....
...
.
....
.
.
...
......
.
.
.
.
... ..
.
.
.. ...
.
.. ...
...
.. ...
.. ....
.
.
.
.
.
.
.
... ...
.. ...
.
...
... ...
.. ..
...
.. ....
... ...
... .....
...
... ....
.. ..
..
..
..
...
...
... ...
...
.. ..
...
...
...
..
..
..
.
.
.
.
.
.
.. ..
.
... ...
.
.
.
.
.
...
...
...
...
.
.
.. ..
.
.
..
...
..
.
...
.
.
... ...
.
.
...
...
.. ..
....
..
.
..
.
... ...
.
.
.
.. ..
.
.
.
... ...
.
.
... ...
....
...
..
... ...
..
.. ..
.
.
.
.
.
.
.
.
... ...
.
....
......
.. ..
...
.....
..
..
.
.
.
.. ..
....
.
.
.....
.
.
.
... ...
....
.....
..
..
.....
. ...
....
.
.
.
.
.
.
.
.
.
.
.
......
.
.
.... ....
..... ...
......
.. ......
.. ....
.
.
.
.
.
.
.
.
.
.
.
.
......
.
.
.
.
.....
....
........
.......
.....
.
...
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
......
.
.
.
.
.
......
......
.....
.... .......
...
....
.... ...........
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
...
......
.
.
.
.
.
....
..
..
...
..
..
...
...
.............................................................................................................................................................................................................................................................................................................................................................................................................
..
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
61
..
..........
...
....
..
...
...
...
...
...
...
...
...
...
......................
...
....
...
...
...
...
...
...
...
..
..
...
.
..
.
.
...
...
...
...
...
.
..
...
...
.
..
..
...
.
..
..
..
...
.
...
...
...
.
.
...
...
.
.....
.
...
... ...
.. ....
.
.
...
.
.. ..
. ....
...
.
.
.. ..
.. ....
...
..
...
.
...
.
.
.
.
.
...
... ..
... ....
.. .
..
...
..
..
.
.
...
.
.
.
..
..
..
..
..
...
.
...
..
...
.
.
.
...
.
.
.
.
.
.
...
.
.
.
...
..
.
...
...
.
..
...
.
.
.
...
.
.
.
....
.
.
...
.
.
.
...
.
....
.....
... .........
.
.
...........................................................................................................................................................................................
.
g(t)
3
4
1
2
b(t)
|
Cho noi
/
a(t)
\
c(t)
/
Knot
/
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
4
X
Pk gk (t),
(2.5)
k=0
P0
(a)
P1
P2
@t = 1
P4
(b)
3
4
1
2
P3
...
..........
..
...
...
...
...
...
...
...
.....
.....
.....
.....
.....
...
.... ....
.... ....
.... ....
.... ....
.... ....
.. ....
.. ....
.. ....
.. ....
.. ....
...
..
.. ....
.. ....
.. ....
.. ....
..
...
..
.. ..
.. ..
.. ..
.. ..
..
... ..
... ..
... ..
... ..
...
...
....
... ..
... ..
... ..
... ..
...
...
..
.....
.....
.....
.....
..
..
...
.
.
.
.
.
..
...
..
...
.....
.....
.....
.....
..
...
...
.......
.......
.......
.......
..
..
...
... ...
... ...
... ...
... ...
...
...
...
...
... ...
... ...
... ...
... ...
...
...
...
... ....
... ....
... ....
... ....
...
.
.
.
...
.
.
.
...
...
...
.
.
.
... ..
... ..
...
...
... ...
.
.
.
..
...
...
...
.
.
.. ..
.. ..
..
.. ...
..
.
.
.
.
.
...
.
.
.
.
.. ..
.. ..
.. ..
..
..
..
..
.
.
.
.
...
...
.
.
.
.
.
.....
.....
.....
...
...
..
..
...
.
.
.
.
.
.
.
.
.
...
...
..
......
......
......
... ....
.
.
.
.
...
...
..
.. .....
.. .....
.. .....
.
.
.
.
.
... .....
.
..
.
.
.
.
.
.
.
........................................................................................................................................................................................................................................................
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
- 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
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
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)
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)
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
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)
N0,1 (t)
\
N2,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
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
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
`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
Nk,m (t) = 1
k=0
(b)
.
......
... ....
... ...
.
... ....
.
....
...
...
.....
...
.....
...
...
.....
.
.
..
.
.
.
...
....
..
.....
..
...............
.....
...
........... ...................
....
... .......
... .....
.......
.
.
.
.
.. ..........
.
.
.
.
.
.
....
...
...... .
...
...
... ......
.............................
...
...
... .....
..........
...
...
.. ....
...
........
.....
...
.......
..........
.
.
.
.
.
.
.
.
.
.
.
.......
.
..
...
........
.
.
.
.
.
.
.
.
......
.
.
.
.
.
.
.
.
..
...
.
.............
...
...
.......
.....
..............
...
...
......
.....
....... ......
...
.. ..
....
....... ...... ...............................
...
.....
.. ...
...
....... ........................
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
... .. ..
......
...
..
......... ............................
.. .. ..
...
...
............................
.. .. ..
...
...
.. ... ..
.......
...
...
.. ..... .......
.......
.
.
.
.
...
.
.
.
.
..
.. ... ....
...
.......
.. .. ....
... ............
..... .....
.......
...........
.............
.
.
......
........
.....
.....
.........
.
.
.
... .
..... ..
..... ...
..... ..
..... ....
.
.
.
...
...
....
...........
.....
..........................................
.....
.....
.......
........
.
.....
.
.
.
.
.
.
.
.
.
.
...
........
.....
........
.....
........
.... .........
.....................
.
.
.
.
.....
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
..
..........
...
....
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
....
y4
y0
.....
................. ......................
......
.........
.......
.....
......
....
......
.
....
.
.
.
...
...
.
.
.
.
...
....
.
.
.
...
...
.
.
...
.
...
.
...
.
...
.
.
...
...
...
.
...
.
....
...
.
...
...
....
.
...
.
.
..
....
...
.
.
.
.
.
.
.
.
.
.....
...
..
....
.....
...
....
......
....
....
.....
....
.......
......
.....
............. .................
..........................
.......
y2
y5
y3
y1
........................................
5
X
yk Nk,4 (t)
k=0
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
1 g0
g1
g2
g3
0
c1 d1
0 c2 d2
= ,
0
c3 d3
g4 c4 d4
c0
c5
d0
d5
1
,
4gi1
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
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
k = 0, 1, 2, 3.
.......
...
...........
... ............
.......
....... .......
.....
.......
......
....... .......
......
........
....... .......
.
.
....
.
......
...
.......
.
.
...... ............
.
.
.
.
.
......
... .....
.......
.......
.
....................
.
.
.
................
.
.
.
.
... .....
.
.
.......
....................
.. ...
...................
.
.
.
.......
... .......
.
.
.
.
.
.
.
.
.
...........
..... ...........................................
.......
... ........
...........
.......
.......... ........... ................ .....
...........
...
.
.
.......
.
.
.
.
.
.
.
...........
...............................
...
..
...........
.......................
...
........... ............
...... ... ...................
...
........... .......
.................
.......
...
........... ......
.
.
.
.
.
.
.
.
.
.
.
.................
....................
...
. .........
.
.
.
.
.
.
.
.
.
.
.
.................
......
.. .............
.
...
.....
......
..................
..........
...
...
.
................................................................................................................................................
..
...
.
................. ..................................
..............................
......
...
..
....................... .......................................................
.
.
.
.
......
......
.........
...
.
.
.
.
.
.
...
......
...
...... ..................................................................
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
...
....................... ........ ..............
......
..
....
.
.
.
.
.
.
...
.
.
......
.
.
...
.
.
.
.
.
.
.
.
.
.
.
......
..... ........................................................................................... .......... ...
... ...
......
......... ... ..
.......
. ......
......
... ...
......
..........................................
.......
... ... ..
...
......
..................... ............
.......
.
.................................... ..............................
....... ...... ........
.
.
......
.
.
.
.
........
.............
.
.
......
.
....... .......
.
.
.
.
.
.
...... ..........
.........
....
.
(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
i=0
M X
L
X
(2.11)
i=0 k=0
2.7.2
D
an c
ac patch Bezier
`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
M X
L
X
(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
............................................................................................................................................................................................
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)
(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
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
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
xC xA yC yA 3
4
0
= 54,
d =
=
xD xC yD yC 9 6
co t0 =
d0
d
2
3
3 + 9 32
(xA xC ) + (xB xA )t0
1
=
= [0, 1].
xD xC
9
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)
..
...
..........
..
...
...
...
....
.....
...
..
...
...
...
.
...
..
...
.
...
...
...
...
.....
...
...
...
...
...
..
...
...
..
...
...
...
...
.....
...
...
...
.
.
...
.
.
.
...
.
.....
.
.
.
.
.
...
.
...
.
.
.....
.
.
.
...
.
...
.
.
.
.....
.
...
.
.
.
.
...
.
.
.
.
...
.....
.
.
.
.
.
...
.
.
...
.....
.
.
.
.
...
.
.
.
...
.
.....
.
.
.
.
.
...
.
.
.
...
..
.......
...
..
...
.
.
...
...
..
...
..
...
...
....
...
...
..
...
..
...
...
....
...
..
.
.........................................................................................................................................................................................................................................................................................................
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
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
..
.......
..
...
...
...
...
.......
........
...
........
.........
...
........
.
.
.
.
.
...
.
.
...
...
.........
........
...
........
.........
...
........
.
.
.
.
.
...
.
.
......
...
........
.........
...
........
...
.........
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
................................................................................................................................................................................................................................................................................
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
..
.
..
.
..
.
..
.
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
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.
94
E ...........
...
...
... ..
... ..
...
.....
.....
...
.
... ......
. ...
...
.
...
....
...
...
...
.
.
....... ....... ....... ....... ...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
....... ....... ....... ....... .....
...
...
...
....
...
...
...
...
...
...
.
...
..
.
...
..
...
..
...
..
...
..
...
... ....... ....... ....... .......
D ...........
...
..........C
...
...
...
...
...
...
.
....... ....... ........... ....... ..
...
...
....
...
...
...
....
...
.
...
...
...
....
k
1
(1, 2) (10, 9)
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
{
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
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 ,
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}}.
@t1 = 1
...
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....
.....
.
.
.
.
..
.....
.....
.....
.....
.....
.
.
.
.
.
.....
.....
.....
.....
.....
.....
@t1 =
(R)
2
3
@t0 =
A
@t0 = 0
1
5
0
0
tr`nh
1,
(1 t)(1) + t(10) 8,
(1 t)(2) + t(9)
99
4.
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 / / / / / / / / / / / / / / / / / / / / / / /
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
.....
..... ..
..... .....
.....
...
.
.
.
.
...
...
...
.....
.....
...
.....
.
...
.
.
...
...
.
.
.
.
...
...
.
.
.
.
...
...
.
.
.
...
.
...
.
.
...
.
.
...
....
.
.
.
...
...
.
.
.
.
...
...
.
.
.
...
.
..
...
.......
...
...
............
...
...
...........
...
...
............
...
............
...
...........
.
.
...
.
.
.
...
.
.
.
.
.
.
...
... ....................
...
.......
............ ....
...
....
............
...........
.
.
...
.
.
...
.
.
.
.
.
.
.
...
........
.
...
.
.
.
.
.
.
.
.
.
...
.......
.
.
.
.
.
.
.
...
.
.
...
.
.
........
.
.
.
...
.
.
...
.
.
.
.
.
...
.......................
...
......
.
.
.
.
.
.
.
.
.
.
...
.......
..
.
.
.
.
.
.
.
.
.
.
.
.
.
....
...
....
.....
.
.
.....
.
.
...
.
...
.
.
.
...
...
.....
...
.....
...
.....
.
.....
....................................................................................................................
(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
(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)
...
...
...
...
...
....
...
...
...
......
...
...
....
...
.
.
.............................................................................................................................................................................................................................................................
...
...
...
.
.
.
...
...
.
..
.
.
...
.
...
.........
...
..
...
.
..
...
.
.
.
...
...
.
.
.
.
...
...
...
...
...
...
...
...
...
..
...
...
..
.
.
.
.
...
... ..
...
..........
...
............. ....
...
.
.............
...
.............
.
.
.
.
..........
.
.
.
.
.
.
.
.
...............
..
li //////////////////////////////////
t
.
Nu a ma.t phang trong
B
(b)
......
.......
...
...
...
.
.
.
...
...
.........
..........
...
...
...
...
.
.
.
...........................................................................................................................................................................................................................................................
..
.
...
...
..
...
...
...
.
...
..
...
...
...
..
.
.
.
.
.
...
...
.
.
.
...
...
..
...
...
.
...
..
...
.
...
...
...
...
...
..
...
... ...
...
... ...
...
.
.
.
.
.....
...
............. .....
...
.............
...
...
.............
...
..........................
li //////////////////////////////////
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;
}
3.5
Giao hai d
a gi
ac
(C)
......................................................................................
........
...
........
...
.........
...
.........
.
.
.
.
.
.
.
...
.....
.
.
.
.
.
.
.
.
.
....
....
...........
.....................................................................................
.
...
...
...
.
.
...
...
.
...
..
.
.
..
...
.
...
...
.
.
.
...
...
....
...
.
.
...
.
...
...
.
...............................
.
.
..
.
.
.
.....
.
....
.
...
.
.
...
.
...
.
.
...
.
.
....
.
..
.
.
.
...
.
....
.
...
.
.
...
...
.
.
.
..
.
...
.
.
.
...
....
.
.
.
...
.
.
.....
.
..
.
.
.
...
.
....
.
...
.
.
...
.
.
....
.
..
.
.
.
...
.
....
.
...
.
.
...
.
.
.
..........................................................................................................................
(S)
.....................................
...
...
.
...
..............................
..
...
.....
...
... ...
...
... ..
... ....
...
.
.
.
...
...
....
...
...
...
...
...
...
...
...
.
.
.
...
...
..
.
.
...
....
..
.
...
.
.
...........................................
...
.
...
.
.
.
...
...
.
.
.
.
...
....
.....
...
.....
...
.....
...
.....
.
.
.
.
.......... ..........
.. .......
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
(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
..............................................................................................................................................................................................
...
....
....
...
...
....
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.........
.
...
...
.
.. .......
.
...
...
.
.....
..
.
.
...
...
.
.
.....
..
.
.
...
...
.
.
.....
.
...
.
.
.
.
......................................................................................................................................................................................................................................................................................................................
.....
...
...
..
.....
.
.
....
.
.
.....
...
.
.
.....
.
.
.
.
.
.
...
.
.....
...
.....
...
.....
.....
.....
...
...
....
.....
...
.
.
.
.
.
...
...
.
.
.
.....
.
.......
...
.....
...
...
....
...
.....
...
...
..
...
.....
...
... .....
...
.....
...
...
. ....
...
.
.
.
.
...
.
.
.....
... ....
...
.
.
...
.
.
.
.....
....
...
.
...
.
.
.
.
.
.
.....
...
...
.
.
.
.
.
...
.....
...
..
.....
...
...
.
.
.....
.
...
...
.
.....
...
..
...
.....
.
..
....
...
..
.
..........................................................................................................................................................................................................................................................................................................
..
.....
.
.....
.
.
.....
.
.
..... ..
..... ..
..... ..
.....
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
...................................................................................................................
phat la.i
|
3n 4
............................................................
5
6
D
.........................................................................................
Clip: a
..........
.
...
..........
.......
.........
.....
.......... .............
........
.....
..............
........
.....
. ...........
.........
.....
........
..........
.......
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
................
...
...
.. ...
.......
.....
......... ...................
.......
.....
..........
........
.......
.....
..........
.........
.......
.....
..........
.
........
.......
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.......... ....
..
.
.........
.......
.......................
........
.......
..........
.........
.....
.......
..........
.........
.....
.......
.......... ..
........
..........
.
.............
.
.
.
.
.
.
.
...................................................
.
.
.
.
.
.
.
.
.
.............................................
..........................................
..
a
3
2
1
|
|
- a du.o..c vieng tham
D
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
(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
`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
...........
.............
...... ....
......
...
.....
.
.
.
.
.
...
..
......
...
.....
.
.
.
...
.
....
.
.
.
...
.
...
.
.
.
.
...
.
.....
.
.
.
...
.
....
.
.
.
...
.
.......
.
.
.
...
.
.... ...
.
.
.
.
.
...........................................................................................................................................................................................................
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
........................................................................................... ...........................................................................................
hc, ni
n.
knk2
Suy ra
r =c2
hc, ni
n.
knk2
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
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
|
...........................................................................................................................................................................................................................................................................................................................................................................................................................................
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
`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
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
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
IPh .
3.6.4
X
ay du..ng v du. ray tracing
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
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
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
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
{
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
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
#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
int
int
FindNextPixel();
int
FindBP(int d);
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
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;
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)
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
..........................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.
.
........
.
.
...
.
.
...
.
..........
..
..
........
.......
...
.
.
...
.
.
.
.
...
.....
.
.
.
.
.
.
.
...
.
.
...
.
.....
..
.. ........
..... ....
.
...
.
...
.
. .....
..... ..
.
.
.
..
.
...
.
.
..
..........................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.
.
.
.
...
.
.
...
.
.
.
.
.............................
...............................
...
...
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
...
...
...
..................................................................................................................................................................................................................................
.
.
.
.
.
.
.
...
.
.
...
.
...
. ........
... ...
.
.
.
.
...
.
...
..
.....
..... ..
...
.... .........
...
.... ....
.
.
.
.
.
.
.
.
...
.
...
......
..........
.
.
...
.
.
.
.
.
.
.
.
...
.
.
...
.
......
...
..
..
............
.
...
.
.
...
..
...
....
....
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
...
...
...
...............................................................................................................................................................................................................................
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
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
`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
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
1-
147
12
10
8
6
4
2
...
..........
...
....
......
..
...... ..
...
...... .....
......
...
...
......
.
.
.
.
...
...
.
....
...
...
......
.
...
......
...
....................
......
.
...
.........
.
.
.
...
.
...
..
.
..........................................................................................................................................................................................................
.
.........
...
.
.
...
.
...
......... ........
...
...
...
.......
...
...
...
...
...
...
...
...
...
.....
...
...
...
...
....
.
.
.
.
...
...
.
....
.
.
.
.
...
...
.
.
......
...
...
......
...
...
......
......
...
.......
......
.
.........
.
.
.
...
.
.........
...
...
.........
......
.........
......
...
.........
......
...
.........
......
.................
...
....
.
..........................................................................................................................................................................................
yyy
|
| yyyyi
c
d
E
C
A
2
8 10 12 14
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
.....................................................
.....
...
......
.....
.....
......
..
.....
.....
...
......
...
.....
...
.....
.....
...........................................................................................
.....
...
.....
......
...
.....
...
.....
......
...
.....
...
.....
...
......
...
.....
.
...
.....
...
.....
.....
...
.
.
.
.
...
....
.
.
.
.
...
...
.....
...
.....
...
.....
.....
...
...............................................................................................
...
...
....
...
...
...
...
...
...
...
...
...
...
...
.....
...
.....
...
.....
.....
...
.....
...
.....
.....
...
.....
...
.....
.....
..
.....
..............................................
4.7.1
C
ac d`
ong qu
et ngang
...............................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
...................................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
..
...
..
...
..
...
..
...
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
..............................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
..
..
..
..
..
..
..
..
..
..
..
..
..
..
...
............................................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
...
...
.
.
.
.
.
.
.
.
.
...
...
...
...
......
.
. ...
..
..
..
..
..
..
..
..
..
.
.
....
..
.
.
.
.
.
.
.
.
.
.
...
...
...
.
.
................................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
... ... ...
... ... ...
...
...
...
...
...
...
...
...
...
...
...
...
... ... ...
... ... ...
...
...
..
..
..
..
..
..
..
..
..
..
..
.. ..
.. ... ..
..
...
.....................................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
..
...
.
.
.
.
.
.
.
.
.
.
.
... .. ...
...
...
.....
..
..
..
..
..
..
..
..
..
..
.
..
.
.
.
.
.
.
.
.
.
.
... ... ...
...
...
...............................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
... ... ...
... ...
...
...
...
...
...
...
...
...
...
...
...
...
...
... ... ...
......
...
...
..
..
..
..
..
..
..
..
..
..
..
.. .. ..
......
..
...
................................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
......
...
...
......
......
..
...
...
...
...
...
...
...
...
...
...
...
......
...
...
....................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
.
...
...
.
.
.
.
.
.
.
.
.
.
.
...
...
... ...
.
..
..
..
..
..
..
..
..
..
..
..
.. ...
...
.
.
.
.
.
.
.
.
.
.
.
... ... ...
...
.
..
...
...
...
...
....
...
....
...
....
...
....
.. .. ... ... ...
...
...............................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
... ... ... ... ...
...
..
...
...
...
...
...
...
...
...
...
...
...
...
... ... ... ...
...
....................................................................................................................................................................................................................................................................................................................
.
.
.
.
.
.
.
.
.
.
.
.
..
...
.
.
.
.
.
.
.
.
.
.
.
.
.
... ...
...
..
..
..
..
..
..
..
..
..
..
..
..
.....
...
.
.
.
.
.
.
.
.
.
.
.
.
......
...
.
......
..
...
...
...
...
...
...
...
...
...
...
...
...
....
...
..................................................................................................................................................................................................................................................................................................................................
...... ... ...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...... ... ...
....................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
..
...
..
...
..
...
..
..
..
...
.. .....
...
...
...
...
...
...
...
...
...
...
...
...
...
...
... ... ......
..
..
..
..
..
..
..
..
..
..
..
..
..
..
... ... .....
.................................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
... ... ... ...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
... ... ... ...
..
..
..
..
..
...
..
...
..
...
..
...
..
...
... ...... ...
...........................................................................................................................................................................................................................................................................................................................
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
.........
..
...
...
...
...
...
...
...
...
...
...
...
...
...
...
..........
................................................................................................................................................................................................................................................................................................
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
4.7.3
Li
en k
et ca.nh v`
a thu
a.t to
an tr`
an
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
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
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
= 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
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
160
................................
..
...
..
...
....
.
..
...
..
...
....
.
..
...
..
...
...
.
x5
..
...
..
...
...
.
cC
..
...
..
...
....
.
..
...
..
...
...
.
.......................................
cA
...
...
...
...
...
...
..
..........
.
.
.
.
.................
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
(*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;
= (*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
173