You are on page 1of 112

Bai Giang Tom Tt: Hoa May Tinh

MU C LU C
Chng 1 ..................................................................................................... 4
GII THIU VHO A MAY TINH ................................................................... 4
Tng quan hoa may tinh ........................................................................... 4
Cac ng du ng cua hoa may tinh ................................................................. 4
Cac tha nh ph n c ban cua hho a may tinh ................................................ 4
1.4 H ta th gii thc, h ta thit b v h ta chun ....................... 5
7
Chng 2 ..................................................................................................... 8
CC THUT TON ......................................................................................... 8
VEI TNG HO A C BAN ..................................................................... 8
2.1 Thut ton v on thng ......................................................................... 8
2.1.1 Thut ton DDA (Digital DifferentialAnalyzer) ......................................... 9
2.1.2 Thut ton Bresenham ...................................................................... 11
2.1.3 Thut toa n MidPoint .......................................................................... 14
2.2 Thut ton v ng trn ........................................................................ 17
2.2.1 Thut toa n n gian .......................................................................... 18
2.2.2 Thut toa n MidPoint .......................................................................... 19
2.3 Thut ton v Ellipse .............................................................................. 21
2.4. ng cong tham s .............................................................................. 24
2.4.1. ng cong Bezier .............................................................................. 24
2.4.1.1. Thut toa n de Casteljau .............................................................. 24
2.4.1.2. Thut toa n Horner ...................................................................... 27
2.4.2. ng cong B-Spline .......................................................................... 30
31
Bi tp chng 2 ......................................................................................... 37
Chng 3 .................................................................................................... 39
T MAU ...................................................................................................... 39
Gii thiu vmau sc .................................................................................. 39
T mau n gia n ......................................................................................... 39
3.3 T ma u theo dong que t .......................................................................... 43
3.4 T ma u theo bin .................................................................................. 44
Bi tp chng 3 ......................................................................................... 46
Khoa Cng ngh Thng tin ai hoc a Lat Trang 1
Bai Giang Tom Tt: Hoa May Tinh
Chng 4 .................................................................................................... 47
PHEP BIN I HAI CHIU ............................................................................ 47
4.1 Cc php ton c s vi ma ma trn. ....................................................... 47
4.2 Php tnh tin ........................................................................................ 48
4.3 Php bin i t l ................................................................................. 49
Php quay ................................................................................................. 49
4.5 Php i xng ....................................................................................... 52
4.6 Phep bi n dang ...................................................................................... 53
4.7 Php bin i Affine ngc ...................................................................... 54
4.8 H ta thun nht .............................................................................. 55
4.9 Kt hp cc php bin i ........................................................................ 56
Bi tp chng 4 ......................................................................................... 59
Chng 5 .................................................................................................... 60
GIAO CAC I TNG HOA ..................................................................... 60
Chng 6 .................................................................................................... 85
HOA BA CHI U ....................................................................................... 85
Khoa Cng ngh Thng tin ai hoc a Lat Trang 2
Bai Giang Tom Tt: Hoa May Tinh
M U
ha my tnh la mt trong nhng linh vc hp dn va phat trin nhanh cua
Cng ngh Thng tin. No c ra i bi s kt hp ca 2 lnh vc thng tin v truyn
hnh, va c s dung rng rai trong hu ht cac ng dung nh khoa hoc va cng ngh, y
hoc, giao duc, kin truc, va k ca giai tri. u tin k thut ha c pht trin bi cc
nhm k s s dng my tnh ln. Trong giai on u ca s pht trin ngi ta phi tn
nhiu tin cho vic trang b cc thit b phn cng. Ngy nay, nh vo s tin b ca vi
x l, gi thnh ca my tnh cng lc cng ph hp vi ti tin ca ngi s dng trong
khi cc k thut ng dng ha ca n ngy cng cao hn nn c nhiu ngi quan tm
nghin cu n lnh vc ny. Chng ta c th v ra nhng hnh nh khng ch l nh tnh
m cn c th bin i thnh nhng hnh nh sinh ng qua cc php quay, tnh tin... Do
vy, ha my tnh tr thnh mt lnh vc l th v c nhiu ng dng trong thc t.
Tuy nhin, vic dy v hc k thut ha th khng n gin do ch ny c nhiu
phc tp, quan n tin hc v ton hc bi v hu ht cc gii thut v, t mau cng cc
php bin hnh u c xy dng da trn nn tng ca hnh hc khng gian hai chiu
v ba chiu.
Giao trinh ha may tinh l mt mn hc c ging dy cho sinh vin chuyn
ngnh Cng ngh Thng tin vi 45 tit l thuyt v 30 tit thc tp. Ni dung ca gio
trnh ha may tinh ny tp trung vo 2 vn chnh nh sau :
Trnh by cc thut ton v v t cc ng c bn nh ng thng, a gic,
ng trn, ellipse v cc ng Bezier, B-Spline. Cc thut ton ny gip cho
sinh vin c th t mnh thit k v v t mt hnh no .
Ni dung th hai cp n ha hai chiu bao gm cc php bin i
Affine, tim giao cac i tng, t mau, va quan st, hin thi , bin i Affine
nh ba chiu.
Gio trnh ha may tinh ny c xy dng da trn kinh nghim ging dy
qua v da trn ti liu tham kho chnh l : Donald Hearn, M. Pauline Baker;
Computer Graphics; Prentice-Hall, Inc., Englewood Cliffs, New Jersey , 1986.
Trong qua trinh bin soan chc khng tranh khoi s sot, ti xin trn trong nhn
c s gp ca cc quy ng nghip v sinh vin giao trinh ngy cng c hoan
thin hn.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 3
Bai Giang Tom Tt: Hoa May Tinh
Chng 1
GII THIU V HOA MAY TINH
Ni dung chnh
Tng quan v hoa may tinh.
Ca c ng dung cua ho a may tinh.
Ca c thanh phn c ban cua h hoa may tinh.
H toa thc va h toa hoa.
Tng quan hoa may tinh
ho a may tinh la tt ca nhng gi lin quan n vi c s dung may tinh phat sinh
ra hinh anh. Cac vn lin quan n cng vi c nay bao gm: tao, lu tr, thao tac trn
ca c m hinh va ca c a nh.
Ngay nay, hu ht cac chng trinh soan thao, bang tinh s dung ho a trong giao
din vi ngi dung. S phat trin cua ho a may tinh ngay ca ng rng rai vi cac ch
ho a hai chiu (2D) va 3 chiu (3D), va cao hn, no phu c vu trong ca c linh vc xa hi
hoc khac nhau nh khoa ho c, giao du c, y ho c, ky thut, thng mai va giai tri. Tinh hp
dn va a dang cu a hoa may tinh co th c minh hoa rt trc quan thng qua vic
khao sat ca c ng dung cua no.
Ca c ng dung cua hoa may tinh
Ngay nay, ho a may tinh c s dung trong rt nhiu linh vc khac nhau nh
cng nghip, thng mai, quan ly, giao duc, giai tri, S lng cac chng trinh hoa
ng dung rt ln va phat trin lin tuc. Sau y la mt s ng dung tiu biu:
H tr thit k
Biu din thng tin
Giai tri, ngh thut
Giao duc, ao tao
Giao tip gia ngi va may tinh
Ca c thanh phn c ban cua h hoa may tinh
2.1 Phn cng
Thit bi thu nhn: ban phim, chut, may quet, camera, ...
Thit bi hin thi: cac loai man hinh CRT, LCD,
Thit bi tng tac: gng tay, kinh 3D,
Khoa Cng ngh Thng tin ai hoc a Lat Trang 4
Bai Giang Tom Tt: Hoa May Tinh
2.2 Phn mm
Phn mm ho a co th phn thanh 2 loai: ca c cng cu lp trinh va ca c trinh ng
dung hoa phuc vu cho mt muc ich nao o . Cac cng cu lp trinh cung cp mt tp
ca c th vin ho a co th c dung trong ca c ngn ng lp trinh cp cao nh Pascal,
C/C++/C#, Java, hay thm tri co ca mt th vin ho a co th nhung vao ca c ngn
ng lp trinh c p bt ky nh OpenGL, DirectX. Ca c ham c s cua no bao gm vi c tao
ca c i tng c s cua hinh anh nh oan thng, a giac, ng tron, thay i mau
s c, chon khung nhin, bin i affine,
phat trin cac ng dung hoa may tinh cn co ca c loai phn mm sau:
Tao m hinh: 3DS Max, Maya,
Lp trinh, phat trin ng dung: OpenGL, DirectX,
1.4 H ta th gii thc, h ta thit b v h ta chun
Mt h ha c m t bao gm 3 min nh sau:
Min iu khin : bao bc ton b h thng.
Min thc : nm trong min iu khin. Khi mt s no thm nhp vo
min thc, n s c chuyn thnh s thc du phy ng, v khi c mt s
ri khi min ny th n s c chuyn thnh s nguyn c du 16 bit.
Min hin th : nm trong min iu khin nhng phn bit vi min thc. Ch
c s nguyn 16 bit mi nm trong min hin th.
Trong lnh vc k thut ha, chng ta phi hiu c rng thc cht ca ha
l lm th no c th m t v bin i c cc i tng trong th gii thc trn
my tnh. Bi v, cc i tng trong th gii thc c m t bng ta thc. Trong
khi , h ta thit b li s dng h ta nguyn hin th cc hnh nh. y chnh
l vn c bn cn gii quyt. Ngoi ra, cn c mt kh khn khc na l vi cc thit
b khc nhau th c cc nh ngha khc nhau. Do , cn c mt phng php chuyn
i tng ng gia cc h ta v i tng phi c nh ngha bi cc thnh phn
n gin nh th no c th m t gn ng vi hnh nh thc bn ngoi.
Hai m hnh c bn ca ng dng ha l da trn mu s ha v da trn c
trng hnh hc. Trong ng dng ha da trn mu s ha th cc i tng ha
c to ra bi li cc pixel ri rc. Cc pixel ny c th uc to ra bng cc chng
trnh v, my qut, ... Cc pixel ny m t ta xc nh v tr v gi tr mu. Thun li
ca ng dng ny l d dng thay i nh bng cch thay i mu sc hay v tr ca cc
pixel, hoc di chuyn vng nh t ni ny sang ni khc. Tuy nhin, iu bt li l khng
th xem xt i tng t cc gc nhn khc nhau. ng dng ha da trn c trng
hnh hc bao gm cc i tng ha c s nh on thng, a gic,.... Chng c
Khoa Cng ngh Thng tin ai hoc a Lat Trang 5
Bai Giang Tom Tt: Hoa May Tinh
lu tr bng cc m hnh v cc thuc tnh. V d : on thng c m hnh bng hai
im u v cui, c thuc tnh nh mu sc, dy. Ngi s dng khng thao tc trc
tip trn cc pixel m thao tc trn cc thnh phn hnh hc ca i tng.
1.1. H ta th gii thc
Mt trong nhng h ta thc thng c dng m t cc i tng trong th
gii thc l h ta Descartes. Vi h ta ny, mi im P c biu din bng mt
cp ta (x
p
,y
p
) vi x
p
, y
p
R (xem hnh 1.1).
Trong :
Ox : gi l trc honh.
Oy : gi l trc tung.
x
p
: honh im P.
y
p
: tung im P.
1.2. H ta thit b
H ta thit b c dng cho mt thit b xut c th no , v d nh my in,
mn hnh,.. Trong h ta thit b th cc im cng c m t bi cp ta (x,y).
Tuy nhin, khc vi h ta thc l x, y N. iu ny c ngha l cc im trong h
ta thc c nh ngha lin tc, cn cc im trong h ta thit b l ri rc.
Ngoi ra, cc ta x, y ca h ta thit b ch biu din c trong mt gii hn no
ca N.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 6
Bai Giang Tom Tt: Hoa May Tinh
V d : phn gii ca mn hnh trong ch ha l 640x480. Khi ,
x(0,640) v y(0,480) (xem hnh 1.2).
1.3. H ta thit b chun
Do cch nh ngha cc h ta thit b khc nhau nn mt hnh nh hin th c
trn thit b ny l chnh xc th cha chc hin th chnh xc trn tht b khc. Ngi ta
xy dng mt h ta thit b chun i din chung cho tt c cc thit b c th m
t cc hnh nh m khng ph thuc vo bt k thit b no.
Trong h ta chun, cc ta x, y s c gn cc gi tr trong on t [0,1].
Nh vy, vng khng gian ca h ta chun chnh l hnh vung n v c gc tri
di (0, 0) v gc phi trn l (1, 1).
Qu trnh m t cc i tng thc nh sau (xem hnh 1.3):
Khoa Cng ngh Thng tin ai hoc a Lat Trang 7
Bai Giang Tom Tt: Hoa May Tinh
Chng 2
CC THUT TON
VE I TNG HOA C BAN
Ni dung chnh
Ca c thut toan ve oan thng.
Thut toan MidPoint ve ng tron, ellipse.
2.1 Thut ton v on thng
Xt on thng c h s gc 0<m<=1 v x>0. Vi cc on thng dng ny, nu
(x
i
, y
i
) l im c xc nh bc th i th im k tip (x
i+1
, y
i+1
) bc th i+1 s
l mt trong hai im sau:
Hinh 2.1: Cac im gn oan thng th c
Vn t ra l chn im v nh th no oan thng c v gn vi oan
thng thc nht v t c ti u ha v mt tc .
Khoa Cng ngh Thng tin ai hoc a Lat Trang 8
Bai Giang Tom Tt: Hoa May Tinh
2.1.1 Thut ton DDA (Digital DifferentialAnalyzer)
DDA l thut ton tnh ton cc im v dc theo ng thng da vo h s gc
ca phng trnh ng thng y=mx+b.
Trong : m= y/x, y = y
i+1
- y
i
, x = x
i+1
- x
i
Nhn thy trong hnh v 2.1 th ta ca im x s tng 1 n v trn mi im v,
cn vic quyt nh chn y
i +1
l y
i
+1 hay y
i
s ph thuc vo gi tr sau khi lm trn ca
tung y. Tuy nhin, nu tnh trc tip gi tr thc ca y mi bc t phng trnh
y=mx+b th cn mt php ton nhn v mt php ton cng s thc.
y
i +1
= mx
i +1
+ b = m(x
i
+ 1) + b = mx
i
+ b + m
ci thin tc , ngi ta kh php nhn trn s thc.
Ta c : y
i
= mx
i
+ b
y
i +1
= y
i
+ m int (y
i +1
)
Tm li khi 0<m<=1 :
x
i +1
= x
i
+ 1
y
i +1
= y
i
+ m int(y
i +1
)
Trng hp m>1: chn bc tng trn trc y mt n v.
x
i +1
= x
i
+ 1/m int(x
i +1
)
y
i +1
= y
i
+ 1
(x
i
+4,y
i
+3 ) (xi,yi ) (xi+1,yi+1 ) (xi+2,yi+2 ) (xi+3,yi+2 )
Hai trng hp ny dng v mt im bt u t bn tri n im cui cng bn phi
ca ng thng (xem hnh 1.5 ). Nu im bt u t bn phi n im cui cng bn
tri th xt ngc li:
0<m<=1: x
i +1
:= x
i
1
y
i +1
:= y
i
- m int(y
i
+1)
m>1: x
i +1
:= x
i
1/m int(x
i
+1)
Khoa Cng ngh Thng tin ai hoc a Lat Trang 9
Bai Giang Tom Tt: Hoa May Tinh
y
i +1
:= y
i
1
Hinh 2.2 : Hai trng hp m>1 va 0<m<1
procedure DDALine(x0, y0, x1, y1, value: integer);
var
x: integer;
dx, dy, y, m: real;
begin
dx := x1 x0;
dy := y1 y0;
m := dy/dx;
y := y0;
for x:=x0 to x1 do
begin
WritePixel(x, Round(y), value);
y := y+m
Khoa Cng ngh Thng tin ai hoc a Lat Trang 10
Bai Giang Tom Tt: Hoa May Tinh
end
end;
Tng t, c th tnh ton cc im v cho trng hp m<0: khi |m|<=1 hoc |m|>1 (sinh
vin t tm hiu thm).
2.1.2 Thut ton Bresenham

Hnh 2.3 : Dng ng thng c 0<=m<=1.
Gi (x
i
+1,y
i +1
) l im thuc on thng (xem hnh 2.3). Ta c y:= m(x
i
+1) + b.
t d
1
= y
i +1
- yi
d
2
= (y
i
+1) - y
i +1

Vic chn im (x
i +1
, y
i

+1
) l P
1
hay P
2
ph thuc vo vic so snh d
1
v d
2
hay du ca d
1
- d
2
.
- Nu d
1
- d
2
< 0 : chn im P
1
, tc l y
i +1
= y
i

- Nu d
1
- d
2
0 : chn im P
2
, tc l y
i +1
= y
i
+1
Xt P
i
= x (d
1
- d
2
)
Ta c : d
1
- d
2
= 2 y
i+1
- 2y
i
- 1
= 2m(x
i
+1) + 2b - 2y
i
- 1
Khoa Cng ngh Thng tin ai hoc a Lat Trang 11
Bai Giang Tom Tt: Hoa May Tinh
P
i
= x (d
1
- d
2
) = x[2m(x
i
+1) + 2b - 2y
i
- 1]

= 2y(x
i
+1) - 2x.y
i
+ x(2b - 1)
= 2y.x
i
- 2x.y
i
+ 2y + x(2b - 1)
Vy C = 2y + x(2b - 1) = Const
Pi = 2y.x
i
- 2x.y
i
+ C
Nhn xt rng nu ti bc th i ta xc nh c du ca Pi th xem nh ta xc nh
c im cn chn bc (i+1). Ta c :
P
i +1
- P
i
= (2y.x
i+1
- 2x.y
i+1
+ C) - (2y.x
i
- 2x.y
i
+ C )
P
i +1
= P
i
+ 2y - 2x ( y
i+1
- .yi )
- Nu P
i
< 0 : chn im P
1
, tc l y
i +1
= y
i
v P
i +1
= P
i
+ 2y.
- Nu P
i
0 : chn im P
2
, tc l y
i +1
= y
i
+1 v P
i +1
= P
i
+ 2y - 2x
- Gi tr P
0
c tnh t im v u tin (x
0
, y
0
) theo cng thc :
P
0
= 2y.x
0
- 2x.y
0
+ C
Do (x
0
,y
0
) l im nguyn thuc v on thng nn ta c :
Th vo phng trnh trn ta c :
P
0
= 2y x
Ci t minh ha thut ton Bresenham
Procedure Bres_Line (x1,y1,x2,y2 : integer);
Var dx, dy, x, y, P, const1, const2 : integer;
Begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 12
Bai Giang Tom Tt: Hoa May Tinh
dx : = x2 - x1; dy : = y2 - y1;
P : = 2*dy - dx;
Const1 : = 2*dy ; const2 : = 2*(dy - dx) ;
x:= x1; y:=y1;
Putpixel ( x, y, Color);
while (x < x-2 ) do
begin
x : = x +1 ;
if (P < 0) then P : = P + const1
else
begin
y : = y+1 ;
P : = P + const2
end ;
putpixel (x, y, color) ;
end ;
End ;
Nhn xt :
Thut ton Bresenham ch thao tc trn s nguyn v ch tnh ton trn php cng
v php nhn 2. iu ny l mt ci tin lm tng tc ng k so vi thut ton
DDA.
tng chnh ca thut ton ny l ch xt du Pi quyt nh im k tip,
v s dng cng thc truy hi Pi +1 - Pi tnh Pi bng cc php ton n gin
trn s nguyn.
Tuy nhin, vic xy dng trng hp tng qut cho thut ton Bresenham c phc
tp hn thut ton DDA.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 13
Bai Giang Tom Tt: Hoa May Tinh
2.1.3 Thut toan MidPoint
Thut toan MidPoint c Pitteway cng b 1967, Van Aken ci tin 1984. Gi s ta
chn P v, xc nh pixel tip theo ti N hay NE. Giao ca ng thng vi Xp+1 ti
Q, M l trung im ca NE v E.
tng: M nm pha no ca ng thng, nu M pha trn ng thng th chn E,
ngc li chn NE.
Nhim v: Xc nh M u.
Hinh 2.4: Thut toan MidPoint ve oan thng
Phng trnh ng thng: F(x,y)=ax+by+c
a = dy, b = - dx, c = B.dx
Gi tr hm ti M: F(M)=F(x
p
+1, y
p
+1/2) = d
o Nu d > 0, M nm di ng thng thi chn NE.
o Nu d < 0, M nm pha trn thi chn E.
o Nu d = 0, chn E hay NE ty .
Gi tr ca hm ti M ca ca im tip theo s v
o Gi gi tr d va tnh l:
o Gi s va chn E:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 14
Bai Giang Tom Tt: Hoa May Tinh
o Gi s va chn NE:
d
new
=d
old
+ a + b = d
old
+ (dy - dx)
(dy dx) l s gia ca im tip theo
Tnh gi tr khi u ca d
o Gi s v on thng t (x
0
, y
0
) n (x
1
, y
1
) trung im th nht c ta
(x
0
+1, y
0
+1/2)
o F(x
0
, y
0
) = 0 d
start
= a + b/2 = dy dx/2
o Trnh s thp phn ca d
start
, nh ngha li hm nh sau
F(x,y)=2(ax+by+c)
o Do vy, ta c
d
start
= 2dy - dx; E = 2dy; NE = 2(dy - dx)
Cai t minh hoa thut toan MidPoint
procedure MidpointLine(x0, y0, x1, y1,
color: integer)
var
dx, dy, x, y, d, incrE, incrNE:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 15
Bai Giang Tom Tt: Hoa May Tinh
integer;
begin
dx := x1 x0;
dy := y1 y0;
d := 2*dy-dx;
incrE := 2*dy;
incrNE := 2*(dy-dx);
x :=x0;
y :=y0;
WritePixel(x, y, color);
while x<x1 do
begin
if d<=0 then
begin {Select E}
d := d+incrE;
x := x+1
end
else
begin {Select NE}
d := d+incrNE;
x :=x+1;
y :=y+1
Khoa Cng ngh Thng tin ai hoc a Lat Trang 16
Bai Giang Tom Tt: Hoa May Tinh
end
WritePixel(x, y, color);
end {while}
end;
2.2 Thut ton v ng trn
Trong h ta Descartes, phng trnh ng trn bn knh R c dng:
Vi tm O(0,0) : x
2
+ y
2
= R
2
Vi tm C(x
c
, y
c
): (x - x
c
)
2
+ (y - y
c
)
2
= R
2
Trong h ta cc :
x = x
c
+ R.cos
y = y
c
+ Y.sin
vi [0, 2].
Hinh 2.5: 8 im i xng trong ng tron
Do tnh i xng ca ng trn C (xem hnh 2.5) nn ta ch cn v 1/8 cung trn, sau
ly i xng qua 2 trc ta v 2 ng phn gic th ta v c c ng trn.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 17
Bai Giang Tom Tt: Hoa May Tinh
2.2.1 Thut toan n gian
Cho x = 0, 1, 2, ..., int(
2
2 R
) vi R > 1.
Ti mi gi tr x, tnh int(y =
2 2
x R ).
V im (x,y) cng 7 im i xng ca n.
Ci t minh ha thut ton n gin
Procedure Circle (xc, yc, R : integer) ;
Var x, y : integer ;
Procedure DOIXUNG ;
Begin
putpixel (xc + x , yc +y, color) ;
putpixel (xc - x , yc + y, color) ;
putpixel (xc + x , yc - y, color) ;
putpixel (xc - x , yc- y, color) ;
putpixel (xc + y , yc + x, color) ;
putpixel (xc - y , yc + x, color) ;
putpixel (xc + y , yc - x, color) ;
putpixel (xc - y , yc - x, color) ;
End
Begin
For x :=0 to round(R*Sqrt(2)/2) do
Begin
y : = round(Sqrt(R*R - x*x)) ;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 18
Bai Giang Tom Tt: Hoa May Tinh
DOIXUNG;
End ;
End ;
2.2.2 Thut toan MidPoint
Do tnh i xng ca ng trn nn ta ch cn v 1/8 cung trn, sau ly i
xng l v c c ng trn. Thut ton MidPoint a ra cch chn y
i+1
l y
i
hay y
i-1
bng cch so snh im thc Q(x
i+1
,y) vi im gia MidPoind l trung im ca S1 v
S2. Chn im bt u v l (0,R). Gi s (x
i
, y
i
) l im nguyn tm c bc
th i (xem hnh 2.6), th im (x
i+1
, y
i+1
) bc i+1 l s la chn gia S1 v S2.
Hnh 2.6 : ng trn vi im Q(x +1, y) v im MidPoint.
t F(x,y) = x
2
+ y
2
- R
2
, ta c :
F(x,y) < 0 , nu im (x,y) nm trong ng trn.
F(x,y) = 0 , nu im (x,y) nm trn ng trn.
F(x,y) > 0 , nu im (x,y) nm ngoi ng trn.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 19
Bai Giang Tom Tt: Hoa May Tinh
Xt P
i
= F(MidPoint) = F(x
i
+1, y - 1/2). Ta c :
Nu P
i
< 0 : im MidPoint nm trong ng trn. Khi , im thc Q gn vi
im S1 hn nn ta chn y
i+1
= y
i
.
Nu P
i
>= 0 : im MidPoint nm ngai ng trn. Khi , im thc Q gn vi
im S2 hn nn ta chn y
i+1
= y
i
- 1.
Mt khc :
P
i+1
- P
i
= F(x
i+1
+1, y
i+1
- 1/2) - F(x
i
+ 1, y
i
- 1/2)
= [(x
i+1
+1)
2
+ (y
i+1
- 1/2)
2
- R
2
] - [(x
i
+1)
2
+ (y
i
- 1/2)
2
- R
2
]
= 2x
i
+ 3 + ((y
i
+1)
2
+ (y
i
)
2
) - (y
i+1
- y
i
)
Vy :
Nu P
i
< 0 : chn y
i+1
= y
i
. Khi , P
i+1
= P
i
+ 2x
i
+ 3
Nu P
i
>= 0 : chn y
i+1
= y
i
- 1. Khi , P
i+1
= P
i
+ 2x
i
- 2y
i
+ 5.
P
i
ng vi im ban u (x
0
, y
0
) = (0, R) l:
P
0
= F(x
0
+ 1, y
0
- 1/2) = F(1, R - 1/2) = 5/4 R
Minh ha thut ton MidPoint
Procedure DTR(xc, yc, r, mau : integer);
var x, y, p : integer ;
Begin
x:=0 ; y:=r;
p:=1 - r;
while ( y > x) do
begin
doi_xung;
if (p < 0) then p:=p + 2*x + 3
else begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 20
Bai Giang Tom Tt: Hoa May Tinh
p := p + 2*(x - y) + 5 ;
y :=y - 1;
end;
x := x + 1;
end; {while}
End;
2.3 Thut ton v Ellipse
Phng trnh elp c tm ti gc ta
p dng gii php trung im v ng trn v elp. Tnh i xng ca elp: khi bit
ta 1 im c th d dng suy ra ta ba im khc.
Hinh 2.7: Phn chia hai min cua ellipse
Tm ranh gii hai min trong elp
V tr: im P l tip im ca tip tuyn c h s gc 1
Xc nh: Vc t vung gc vi tip tuyn ti tip im -> gradient
Ti P1 cc thnh phn i v j ca vc t gradient c cng ln.
tng: nh gi hm ti im gia hai ta pixel chn v tr tip theo v. Du
ca n cho bit im gia nm trong hay ngoi elp.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 21
Bai Giang Tom Tt: Hoa May Tinh
Vi vng 1
Hinh 2.8: Phn tich ve hai min cua ellipse
Tnh bin quyt nh d = F(x, y) = F(x
p
+ 1, y
p
- 1/2)
Nu d < 0: chn E, x tng 1, y khng thay i.
Nu d0: chn SE, x tng 1, y gim 1.
Vi vng 2:
Tnh bin quyt nh d = F(x, y) = F(x
p
+ 1/2, y
p
- 1)
o Nu d < 0: chn SE, x tng 1, y gim 1.
o Nu d 0: chn S, x khng tng, y gim 1.
Tm s gia nh vng 1
S = a
2
(-2y
p
+ 3)
SE = b
2
(2x
p
+ 2) + a
2
(-2y + 3)
Tm gi tr khi u ca s gia d
Min 1:
o Gi s a, b nguyn; im bt u v l (0, b)
o im gia th nht: (1, b - 1/2)
Khoa Cng ngh Thng tin ai hoc a Lat Trang 22
Bai Giang Tom Tt: Hoa May Tinh
Min 2: Ph thuc vo im gia (xp+1, yp-1/2) ca im tip theo im cui
cng ca min 1.
Minh hoa thut toan MidPoint ve Ellipse
procedure draw_ellipse(a, b, color: integer);
var x, y: integer; d1, d2: real;
begin
x:=0; {Khi ng}
y:=b;
d1:=b
2
-a
2
b+a
2
/4;
EllipsePoints(x, y, color);
while (a2(y-1/2)>b2(x+1)) do {Vng 1}
begin
if d1<0 then {Chn E}
begin
d1:=d1+b2(2*x+3);
x:=x+1
end
else {Chn SE}
begin
d1:=d1+b2(2*x+3)+a2(-2*y+2);
x:=x+1;
y:=y-1
end;
EllipsePoints (x, y, color);
end {Vng 1}
d2=b
2
(x+1/2)
2
+a
2
(y-1)
2
a
2
b
2
;
while y>0 do {Vng 2}
begin
if d2<0 then { Chon SE }
begin
d2:=d2+b
2
(2*x+2)+a
2
(-2*y+3);
x:=x+1;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 23
Bai Giang Tom Tt: Hoa May Tinh
y:=y-1
end
else
begin
d2:=d2+a
2
(-2*y+3);
y:=y-1
end
EllipsePoints (x, y, color);
end {Vng 2}
end
2.4. ng cong tham s
2.4.1. ng cong Bezier
2.4.1.1. Thut toan de Casteljau
Thut toan de Casteljau s dung mt day ca c im iu khin xy dng vi m gia tri
t trong oan [0, 1] tng ng vi mt im P(t). Do o , thut toan sinh ra mt day ca c
im t tp cac im cho trc. Khi cac im iu khin thay i, ng cong se thay
i theo. Cach xy dng da trn mt loat ca c phep ni suy tuyn tinh va do o rt d
dang giao tip. Ngoai ra, phng phap cung suy ra nhiu tinh cht hu ich cu a ng
cong.
Parabol da trn ba im
Trong mt phng R
2
xet ba im P
0
, P
1
, P
2
. t
Trong o, t [0, 1]. Noi ca ch khac, vi mi t [0, 1], cac im
) (
1
0
t P
, ) (
1
1
t P nm trn
ca c oan thng P
0
P
1
va P
1
P
2
tng ng.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 24
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.9: ng cong Bezier xac inh bi ba im iu khin
Lp lai phep ni suy tuyn tinh trn cac im mi
) (
1
0
t P
va ) (
1
1
t P ta c:
Quy tich cu a
) ( : ) (
2
0
t P t P
khi t thay i trong oan [0, 1] se cho ta ng cong nh
hinh (b) trn.
D dang chi ra rng
Suy ra P(t) la ng cong parabol theo bin t.
Vi du: Phng trinh ng cong Bezier P(t) tng ng ba im iu khin P
0
(0, 0),P
1
(2,
2),P
2
(6, 0) la
Khoa Cng ngh Thng tin ai hoc a Lat Trang 25
Bai Giang Tom Tt: Hoa May Tinh
Tng quat cho trng hp s im iu khin 3 ta co:
Thut toan de Casteljau cho L + 1 im iu khin
Trong mt phng R
2
xet L+1 im P
0
, P
1
,..., P
L
. Vi mi gia tri t cho trc, ta xy dng
theo quy nap ng cong
) (
0
t P
L
nh sau:
1. [Khi tao] t r = 0 va
i
r
i
P t P : ) (
vi moi i=0, 1, , L-r.
2. [Kt thuc?] Nu r = L dng; ngc lai t
3. Thay r bi r+1 va chuyn sang bc 2.
Minh hoa thut toan Casteljau
Casteljau(float t)
Begin
Point2D Q[MaxVertices];
int i, r;
for (i = 0; i <= NumVertices; i++)
begin
Q[i].x = P[i].x;
Q[i].y = P[i].y;
end
for (r = 1 ; r <= NumVertices; r++)
begin
for (i = 0; i <= NumVertices - r; i++)
begin
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;
end
end
return(Q[0]);
End
Khoa Cng ngh Thng tin ai hoc a Lat Trang 26
Bai Giang Tom Tt: Hoa May Tinh
ve ng cong Bezier ta chi cn ap dung goi ham Casteljau trong thu tuc
DrawCurve sau:
DrawCurve(float a, float b, int NumPoints)
Begin
float Delta = (b - a)/(float)NumPoints;
float t = a;
int i;
moveto(Casteljau(t).x, Casteljau(t).y);
for (i = 1; i <= NumPoints; i++)
begin
t += Delta;
lineto(Casteljau(t).x, Casteljau(t).y);
end
End
2.4.1.2. Thut toan Horner
a thc Bernstein va ng cong Bezier
Cach tip cn trong phn trc cho ta thut toan hinh hoc ve ng cong Bezier.
Phn nay trinh bay ca ch biu din giai tich cua ng cong Bezier.
Tht vy, d dang chng minh rng ng cong Bezier P(t) tng ng cac im
iu khin P
0
, P
1
,..., P
L
, xac dinh bi:
trong o
Khoa Cng ngh Thng tin ai hoc a Lat Trang 27
Bai Giang Tom Tt: Hoa May Tinh
la a thc Bernstein, va

,
_

k
L
la t hp chp k cua L phn t.
Vi du , t inh nghia trn, ta co ca c a thc Bernstein bc ba:
thi minh hoa cua bn a thc nay khi t [0, 1]:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 28
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.10 . Cac a th c Bernstein bc ba
Vi du phng trinh tham s cua ng cong Bezier tng ng bn im iu khin P
0
(0,
0),P
1
(2, 3),P
2
(6, 0),P
3
(9, 2) co dang:
Ve ng cong Bezier qua a thc Bernstein
Da vao lc Horner tinh gia tri a thc Bernstein, ta xy dng thu tuc xac inh
ng cong Bezier hiu qua hn Casteljau. Mt vi du nhn long nhau cua lc Horner
trong trng hp a thc bc ba:
Tng t vi ng cong Bezier bc ba:
trong o, s = 1 t. Nhn xet rng:
Do o, ta co chng trinh tinh gia tri ham Bezier P(t) trong trng hp tng quat, vi
NumVertices chinh la s im iu khin L+1.
Minh hoa thut toan Horner
Horner_Bezier(float t)
Begin
int i, L_choose_i;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 29
Bai Giang Tom Tt: Hoa May Tinh
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++)
begin
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;
end
Q.x += Fact*t*P[NumVertices].x;
Q.y += Fact*t*P[NumVertices].y;
return(Q);
End
2.4.2. ng cong B-Spline
Nhn xet rng ng cong Bezier iu khin mt cach toan cuc, nghia la khi mt
im iu khin thay i thi toan b ng cong cung thay i theo. Trong thc t ta
mun iu khin mt ca ch ia phng, tc la ta mong mun thay i mt oan trn
ng cong nh hinh 2.11. iu nay ng cong Bezier khng thc hin c. Do o ,
ta c n tim mt lp cac ham trn lai ma vn gi tinh cht tt cua a thc Bernstein va ca c
ham nay co gia tri cha trong oan [0, 1] ngi thit k iu khin ia phng ng
cong.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 30
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.11: Thay i ng cong mong mun
co th iu khin hinh dang ca c ham trn, ta cn xy dng cac ham lin tu c R
k
(t)
la nhng a thc tng khu c. Do o , R
k
(t) trn mi khoang (t
i
, t
i+1
] la a thc nao o. Suy
ra ng cong P(t) la tng ca c a thc tng khu c vi trong lng la cac im iu khin.
Chng han, trong khoang nao o, ng cong co dang
Trong khoang k tip, co c cho bi mt tng ca c a thc kha c, nhng tt ca ca c oan
cong nay tao thanh mt ng cong lin tuc. ng cong nay c goi la ng cong
Spline. Trn mt ho ca c ham trn, ta chon xy dng cac ham trn co gia tri nho nht va
do o iu khin ia phng tt nht. Khi o , ta goi ng cong nay la B-Spline.
Mi ham B-Spline phu c thuc vao m va co b c m-1, chung ta ky hiu N
k,m
thay cho R
k
(t).
Do o , phng trinh ng cong B-Spline co dang:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 31
Bai Giang Tom Tt: Hoa May Tinh
Nh vy, xa c inh ng cong B-Spline, ta cn:
Vector knot T = (t
0
, t
1
, ..., );
L +1 im iu khin P
0
, P
1
, ..., P
L
;
B c m cua ca c ham B-spline.
Cng thc xac ham quy B-spline N
k,m
Vi du, xet vector Knot T= (t
0
= 0,t
1
= 1,t
2
= 2,...) co khoang cach gia cac Knot la 1. Khi
o:
thi cua ham N
0,2
(t) trn oan [0, 2] la cac a thc bc 1 va la mt tam giac vi ca c
inh (0, 0), (1, 1) va (2, 0).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 32
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.12: thi cac ham B-spline tuyn tinh.
Trong thc t, m = 3, va m = 4 thng c s dung ng vi ng cong B-Sline bc 2
va bc 3.
m = 3
Khoa Cng ngh Thng tin ai hoc a Lat Trang 33
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.13: thi ham B-Spline b c 2(m=2)
Khoa Cng ngh Thng tin ai hoc a Lat Trang 34
Bai Giang Tom Tt: Hoa May Tinh
Hinh 2.14: thi ham B-Spline b c 3 (m=4)
Thut toan minh hoa ve ng cong B-Spline
Create_Knot(int m)
Begin
if (NumVertices < m || NumVertices + m > Max)
return;
int i;
for (i = 0; i < m; i++) Knot[i] = 0;
for (; i <= NumVertices; i++) Knot[i] = i - m + 1;
for (; i < NumVertices + m; i++) Knot[i] = NumVertices - m + 2;
End

N(int k, int m, float t)
Begin
if (m == 1)
begin
if (t < Knot[k] || t > Knot[k + 1]) return 0;
return 1;
end
else
begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 35
Bai Giang Tom Tt: Hoa May Tinh
float Sum, Demo1, Demo2;
Demo1 = Knot[k + m - 1] - Knot[k];
if (Demo1 != 0)
Sum = (t - Knot[k]) * N(k, m - 1, t) / Demo1;
else
Sum = 0;
Demo2 = Knot[k + m] - Knot[k + 1];
if (Demo2 != 0)
Sum += (Knot[k + m] - t) * N(k + 1, m - 1, t) / Demo2;
return Sum;
end
End

Brestern_Spline(float t)
Begin
Create_Knot(M);
Point Q = new Point();
Q.X = 0;
Q.Y = 0;
float x = 0, y = 0;
for (int i = 0; i <= NumVertices; i++)
begin
x += N(i, M, t) * P[i].X;
y += N(i, M, t) * P[i].Y;
end
Q.X = (int)x;
Q.Y = (int)y;
return Q;
End
Khoa Cng ngh Thng tin ai hoc a Lat Trang 36
Bai Giang Tom Tt: Hoa May Tinh
Bi tp chng 2
1. Vit chng trnh v bu tri c 10.000 im sao, mi im sao xut hin
vi mt mu ngu nhin. Nhng im sao ny hin ln ri t t tt cng rt
ngu nhin.
2. Vit chng trnh thc hin 2 thao tc sau :
- Khi to ch ha, t mu nn, t mu ch, nh dng ch
(settextstyle(f,d,s)), xut mt chui k t ra mn hnh. i font, hng, kch
thc.
- Xut mt chui ra mn hnh, chui ny c t bng. (lu rng ni dung
chui k t, mu t, mu bng l c nhp t bn phm).
3. Vit chng trnh v on thng AB vi mu color theo gii thut DDA.
Bit rng ta A,B, color c nhp t bn phm. Trang tr mu nn, ghi
ch cc ta A, B hai u on thng.
4. Tng t nh bi tp 3 nhng s dng gii thut MidPoint. Lu cc
trng hp c bit ca h s gc.
5. Tng hp bi tp 4, vit chng trnh v ng thng bng gii thut
MidPoint cho tt c cc trng hp ca h s gc. Lu xt trng hp c
bit khi ng thng song song vi trc tung hay vi trc honh.
6. Vit chng trnh v ng trn theo gii thut n gin.
7. Vit chng trnh v ng trn theo gii thut MidPoint.
8. Vit chng trnh v mt ng trn tm O bn knh R. V cc ng trn
ng tm vi O, c bn knh chy t 1 n R. Sau xo cc ng trn
ng tm ny v v cc ng trn ng tm khc i t R n 1.
9. Vit chng trnh v mt ng trn tm O bn knh R. Hy v mt on
thng t tm O di R. Hy quay on thng ny quanh ng trn.
10. Vit chng trnh v Elippse.
11. Vit chng trnh v Elippse c bn knh ln l a, bn knh nh l b v mt
ng trn ni tip Elippse. T ng trn bng cc ng trn ng tm.
Sau t elippse bng cc elippse ng tm c bn knh ln chy t b n
a, bn knh nh l b.
12. Vit chng trnh v mt hnh ch nht, mt hnh vung v mt hnh bnh
hnh. Yu cu ch thch ta cc nh.
13. Vit chng trnh v mt tam gic. Ta cc nh c nhp t bn
phm, mi cnh c mt mu khc nhau.
14. Vit chng trnh v mt a gic c n nh.
15. Vit chng trinh ve ng cong Bezier v i n im iu khin: P
1
,
P
2
, , P
n
nhp t file text.
16. Vit chng trinh ve ng cong B-Spline vi n im iu khin: P
1
,
Khoa Cng ngh Thng tin ai hoc a Lat Trang 37
Bai Giang Tom Tt: Hoa May Tinh
P
2
, , P
n
nhp t file text.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 38
Bai Giang Tom Tt: Hoa May Tinh
Chng 3
T MAU
Ni dung chnh
C s v mau s c.
Thut toan t mau theo bin FloodFill.
Thut toan t mau bng dong quet Scanvert.
Gii thiu v mau sc
T mu mt vng l thay i mu sc ca cc im v nm trong vng cn t. Mt vng
t thng c xc nh bi mt ng khp kn no gi l ng bin. Dng ng
bin n gin thng gp l a gic. Vic t mu thng chia lm 2 cng on :
Xc nh v tr cc im cn t mu.
Quyt nh t cc im trn bng mu no. Cng on ny s tr nn phc tp khi
ta cn t theo mt mu t no ch khng phi t thun mt mu.
Giao trinh gii thiu 3 cch tip cn chnh t mu:
T mu theo tng im (c th gi l t mau n gin).
T mu theo dng qut.
T mu da theo ng bin.
T mau n gian
Thut ton ny bt u t vic xc nh mt im c thuc vng cn t hay khng ? Nu
ng l im thuc vng cn t th s t vi mu mun t.
T ng tron
t ng trn th ta tm hnh vung nh nht ngoi tip ng trn bng cch xc
nh im trn bn tri (xc-r, yc-r) v im di bn phi (xc+r, yc+r) ca hnh vung
(xem hnh 3.1).
Thut toan
Cho i i t xc-r n xc+r
Cho j i t yc-r n yc+r
Tnh khong cch d gia hai im (i,j) v tm (xc,yc)
Nu d<r th t im (i,j) vi mu mun t
Khoa Cng ngh Thng tin ai hoc a Lat Trang 39
Bai Giang Tom Tt: Hoa May Tinh
Hnh 3.1: ng trn ni tip hnh vung.
T a giac
Tm hnh ch nht nh nht c cc cnh song song vi hai trc ta cha a gic
cn t da vo hai ta (xmin, ymin), (xmax, ymax). Trong , xmin, ymin l honh
v tung nh nht, xmax, ymax l honh v tung ln nht ca cc nh ca a
gic.
Cho x i t xmin n xmax, y i t ymin n ymax (hoc ngc lai). Xt im
P(x,y) c thuc a gic khng ? Nu c th t vi mu cn t (xem hnh 3.2).
Hnh 3.2: a gic ni tip hnh ch nht.
Mt im nm trong a gic th s giao im t mt tia bt k xut pht t im
ct bin ca a gic phi l mt s l ln. c bit, ti cc nh cc tr (cc i hay cc
Khoa Cng ngh Thng tin ai hoc a Lat Trang 40
Bai Giang Tom Tt: Hoa May Tinh
tiu ) th mt giao im phi c tnh 2 ln (xem hnh 2.5). Tia c th qua phi hay qua
tri. Thng thng ta chn tia qua phi.
V d : Xt a gic gm 13 nh l P
0
, P
1
, ....., P
12
= P
0
(xem hnh 2.5).
Hnh 3.3: a gic c 13 nh.
Gi tung ca nh P
i
l P
i
.y . Nu :
- P
i
.y < Min ( P
i+1
.y, P
i-1
.y) hay P
i
.y > Max ( P
i+1
.y, P
i-1
.y) th P
i
l nh cc tr.
- P
i-1
.y < P
i
.y < P
i+1
.y hay P
i-1
> P
i
.y > P
i+1
.y th P
i
l nh n iu.
- P
i
= P
i+1
v P
i
.y < Min( P
i+2
.y, P
i-1
.y) hay Pi > Max( P
i+2
.y, P
i-1
.y) th on [P
i
, P
i+1
]
l on cc tr.
- P
i
= P
i+1
v P
i-1
.y < P
i
.y < P
i+2
.y hay P
i-1
> P
i
.y > P
i+2
.y th on [P
i
,P
i+1
] l on n
iu.
Thut toan xa c inh im nm trong a giac
- Vi mi nh ca a gic ta nh du l 0 hay 1 theo qui c nh sau: nu l nh
cc tr hay on cc tr th nh s 0. Nu l nh n iu hay on n iu th
nh du 1.
- Xt s giao im ca tia na ng thng t P l im cn xt vi bin ca a
gic. Nu s giao im l chn th kt lun im khng thc a gic. Ngc li,
s giao im l l th im thuc a gic.
Minh ha thut ton xt im thuc a gic
Function PointInpoly(d: dinh; P: d_dinh; n: integer)
var count, i: integer;
x_cut: longint;
function next(i: integer): integer;
begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 41
Bai Giang Tom Tt: Hoa May Tinh
next := (i + n + 1) mod n
end;
function prev(i: integer): integer;
begin
prev := (i + n - 1) mod n
end;
Begin
count := 0;
for i := 0 to n-1 do
if d[i].y = P.y then
begin
if d[i].x > P.x then
begin
if ((d[prev(i)].y < P.y) and (P.y < d[next(i)].y)) or
((d[prev(i)].y > P.y) and (P.y > d[next(i)].y)) then
count := count + 1;
if d[next(i)].y = P.y then
if ((d[prev(i)].y < P.y) and (P.y < d[next(next(i))].y)) or
((d[prev(i)].y > P.y and (P.y > d[next(next(i))].y)) then
count := count + 1;
end;
end else {d[i].y = P.y}
if ((d[i].y < P.y) and (P.y < d[next(i)].y)) or
((d[i].y > P.y) and (P.y > d[next(i)].y)) then
begin
x_cut := d[i].x + Round((d[next(i)].x - d[i].x)
/ (d[next(i)].y - d[i].y) * (P.y - d[i].y));
if x_cut >= P.x then count := count + 1;
end;
if (count mod 2 = 0) then PointInPoly := false
else PointInpoly := true;
End;
- Minh ha thut ton t a gic
Procedure Todg ( d:dinh; n,maubien : integer ; d: dinh; n:integer ) ;
var x, y:integer;
P: d_dinh;
Begin
for x:=xmin to xmax do
for y:= ymin to ymax do
begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 42
Bai Giang Tom Tt: Hoa May Tinh
P.x:= x; P.y := y;
if pointInpoly (d, P, n) then
if getpixel(x,y)<>maubien then putpixel(x,y,color);
end;
End;
Nhn xt: Thut ton t n gin c u im l t rt mn v c th s dng c cho a
gic li hay a gic lm, hoc a gic t ct, ng trn, ellipse. Tuy nhin, gii thut
ny s tr nn chm khi ta phi gi hm PointInpoly nhiu ln. khc phc nhc im
ny ngi ta a ra thut ton t mu theo dng qut.
3.3 T mau theo dong quet
tng: S dng giao im gia cc bin a gic v ng qut nhn ra pixel c
trong a gic?
Cac bc thut toan:
- Tm ymin, ymax ln lt l gi tr nh nht, ln nht ca tp cc tung ca cc
nh ca a gic cho.
- ng vi mi dng qut y = k vi k thay i t ymin n ymax, lp :
- Tm tt c cc honh giao im ca dng qut y = k vi cc cnh ca a gic.
- Sp xp cc honh giao im theo th t tng dn : x
0
,x
1
,..., x
n
,...
- Ve cc on thng trn ng thng y = k ln lt c gii hn bi cc cp cach
quang nhau: (x
0
, x
1
), ( x
1
, x
2
), ....
Thut toan
ScanConvert( Polygon P, Color C)
Begin
For y:=0 To ScreenYMax Do
Begin
I <= Cc giao im ca cnh a gic P vi ng Y = y;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 43
Bai Giang Tom Tt: Hoa May Tinh
Sp xp I: X tng dn v
V on thng cch qung theo mu C;
End;
End;
3.4 T mau theo bin
tng
Thut ton nhm t mu vng kn, gii hn bi mu Bcolor, m s dng t l
Fcolor vi im (x,y) nm trong vng t mu.
Thut s dng php gi quy, ban u (x,y) c kim tra mu, nu mu ca n
l Fcolor hoc Bcolor th tin trnh kt thc. Trong trng hp ngc li, im
(x,y) c t vi mu Fcolor v qu trnh gi quy vi cc im lng ging ca
(x,y). Cc im lng ging c s dng l 4 lng ging.
X
X (x,y) X
X
4 lng ging ca (x,y): (x+1,y), (x-1,y), (x,y+1),(x,y-1)
Chng trnh minh hoa
BoundaryLine(int x, int y, int Bcolor, int Fcolor)
Begin
if(getPixel(x, y) <> Bcolor || getPixel(x, y) <> Fcolor)
Begin
putPixel(x, y,Fcolor) = Fcolor;
Boundary(x+1,y,Bcolor,Fcolor);
Boundary(x-1,y,Bcolor,Fcolor);
Boundary(x,y+1,Bcolor,Fcolor);
Boundary(x,y-1,Bcolor,Fcolor);
End
End
Chng trinh kh quy
BoundaryLine(int x, int y, int Bcolor, int Fcolor)
Begin
int color, count=0;
Point mPT[MaxPT];
Khoa Cng ngh Thng tin ai hoc a Lat Trang 44
Bai Giang Tom Tt: Hoa May Tinh
mPT[count].x=x; mPT[count].y=y;
while(count>0)
Begin
count--;
color = getPixel(mPT[count].x, mPT[count].y);
if(color != Bcolor || color != Fcolor)
Begin
putPixel(x,y,Fcolor);
mPT[count].x=x+1; mPT[count++].y=y;
mPT[count].x=x-1; mPT[count++].y=y;
mPT[count].x=x; mPT[count++].y=y+1;
mPT[count].x=x; mPT[count++].y=y-1;
End
End
End
Khoa Cng ngh Thng tin ai hoc a Lat Trang 45
Bai Giang Tom Tt: Hoa May Tinh
Bi tp chng 3
1. Vit chng trnh v mt a gic n nh, xt xem mt im P no c thuc a
gic khng ?
2. Vit chng trnh v mt a gic n nh. T a gic bng gii thut t n gin
(Tm xmin, ymin, xmax, ymax).
3. Vit chng trnh v mt ng trn. T ng trn bng gii thut t n gin.
4. Vit chng trnh v mt a gic n nh. T a gic bng gii thut t bin. Lu
cho cc trng hp ca a gic : hnh ch nht, a gic li, a gic lm.
5. Vit chng trnh v mt ng trn. T ng trn bng gii thut t bin.
6. Vit chng trnh v mt a gic n nh. T a gic bng gii thut dong quet.
7. Vit chng trnh v mt ng trn. T ng trn bng gii thut t mau theo
dong quet.
8. Vit chng trnh v hai ng trn C1 v C2 ct nhau. T phn giao ca hai
ng trn . T phn b ca C2. T phn b ca C1. Lu rng 3 mu t ny
phi khc nhau.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 46
Bai Giang Tom Tt: Hoa May Tinh
Chng 4
PHEP BIN I HAI CHIU
Ni dung chnh
Ca c phep bin i ma trn.
Ca c phep bin i Affine 2D c s .
Ca c phep bin i 3D gp.
4.1 Cc php ton c s vi ma ma trn.
Nhc lai ca c phep toan trn ma trn:
Cng, tr ma trn: Ch thc hin cho hai ma trn cng bc
Nhn hai ma trn: Ma trn bc n
1
m
1
v ma trn bc n
2
m
2
nhn c vi nhau nu
m
1
= n
2
o ma trn vung: Khng c php chia ma trn
Nu [A][X]=[Y] th [X]=[A]
-1
[Y], trong [A]
-1
l ma trn o ca ma trn vung
[A].
[A][A]
-1
= [I] trong [I] l ma trn n v.
Tnh ||A||: Thay cc phn t ca[A] bng cc phn ph i s ca n.
Phn ph i s ca phn t (a
ij
) l:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 47
Bai Giang Tom Tt: Hoa May Tinh
[Mij] c to ra nh xa hng i, ct j ca [A].
4.2 Php tnh tin
C hai quan im v php bin i hnh hc, l :
Bin i i tng : thay i ta ca cc im m t i tng theo mt
qui tc no .
Bin i h ta : To ra mt h ta mi v tt c cc im m t i
tng s c chuyn v h ta mi.
Cc php bin i hnh hc c s l : tnh tin, quay, bin i t l. Php bin i Affine
hai chiu (gi tc l php bin i) l mt nh x T bin i im P(P
x
, P
y
) thnh im
Q(Q
x
, Q
y
) theo h phng trnh sau:
Dng dch chuyn i tng t v tr ny sang v tr khc. Nu gi tr
x
v tr
y
ln lt l
di theo trc honh v trc tung th ta im mi Q(x', y') sau khi tnh tin im
P(x,y) s l :
(tr
x
, tr
y
) c gi l vector tnh tin hay vector di (xem hnh 4.1).
Hay
Q = P*M +tr,
Khoa Cng ngh Thng tin ai hoc a Lat Trang 48
Bai Giang Tom Tt: Hoa May Tinh
Hnh 4.1 : Php bin i tnh tin im P thnh Q
4.3 Php bin i t l
Php bin i t l lm thay i kch thc i tng. co hay gin ta ca
mt im P(x,y) theo trc honh v trc tung ln lt l Sx v Sy (gi l cc h s t l),
ta nhn Sx v Sy ln lt cho cc ta ca P.
Khi cc gi tr Sx , Sy nh hn 1, php bin i s thu nh i tng. Ngc
li, khi cc gi tr ny ln hn 1, php bin i s phng ln i tng.
Khi Sx = Sy , ngi ta gi l php ng dng. y l php bin i bo
ton tnh cn xng ca i tng. Ta gi l php phng i nu |S|>1 v l
php thu nh nu |S|<1.
Nu hai h s t l khc nhau th ta gi l php khng ng dng. Trong trng hp
hoc Sx hoc Sy c gi tr 1, ta gi l php cng.
Php quay
Php quay lm thay i hng ca i tng. Mt php quay i hi phi c tm
quay, gc quay. Gc quay dng thng c qui c l chiu ngc chiu kim ng
h.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 49
Bai Giang Tom Tt: Hoa May Tinh
Php quay quanh gc ta
Ta c cng thc bin i ca php quay im P(x,y) quanh gc ta gc (xem hnh
4.2):
Hay Q = P*M, trong o:
Hnh 4.2 : Php quay quanh gc ta
Php quay quanh mt im bt k
Khoa Cng ngh Thng tin ai hoc a Lat Trang 50
Bai Giang Tom Tt: Hoa May Tinh
Hnh 4.3 : Php quay quanh mt im bt k.
Xt im P(P.x,P.y) quay quanh im V(V.x, V.y) mt gc n im
Q(Q.x,Q.y). Ta c th xem php quay quanh tm V c kt hp t php cc bin c bn
sau:
Php tnh tin (-V.x, -V.y) dch chuyn tm quay v gc ta .
Quay quanh gc ta O mt gc .
Php tnh tin (+V.x, +V.y) a tm quay v v tr ban u.
Ta cn xc nh ta ca im Q (xem hnh 4.3).
T php tnh tin (-V.x,-V.y) bin i im P thnh P' ta c:
P' = P + V
Hay
P'.x = P.x - V.x
P'.y = P.y - V.y
Php quay quanh gc ta bin i im P' thnh Q'
Q' = P'.M
Hay
Khoa Cng ngh Thng tin ai hoc a Lat Trang 51
Bai Giang Tom Tt: Hoa May Tinh
Q'.x = P'.x*cos - P'.y*sin
Q'.y = P'.x*sin + P'.y*cos
Php tnh tin (+V.x, +V.y) bin i im Q' thnh Q ta c
Q = Q' + V
Hay
Q.x = Q'.x + V.x
Q.y = Q'.y + V.y
Q.x = (P.x - V.x)*cos - (P.y - V.y)*sin + V.x
Q.y = (P.x - V.x)*sin + (P.y - V.y)*cos + V.y
Q.x = P.x*cos - P.y*sin + V.x*(1- cos) + V.y*sin
Q.y = P.x*sin + P.y*cos - V.x*sin + V.y*(1- cos)
Vy
Q = P.M + tr.
Vi
4.5 Php i xng
Php i xng trc c th xem l php quay quanh trc i xng mt gc 180
0
.
Phng trnh ban u :
Khoa Cng ngh Thng tin ai hoc a Lat Trang 52
Bai Giang Tom Tt: Hoa May Tinh
Q.x = a*P.x + c*P.y + trx
Qy = b*P.x + d*P.y + try
Hay
Trc i xng l trc honh :
Ta c :
Tng t trc i xng l trc tung :
Ta c :
4.6 Phep bin dang
Php bin dng lm thay i, mo m hnh dng ca cc i tng.
- Bin dng theo phng trc x s lm thay i honh cn tung gi nguyn.
V d : bin i im P(P.x, P.y) thnh im Q(Q.x, Q.y) theo phng trc x l php
bin i c biu din bi phng trnh sau:
Q.x = P.x + h*P.y
Khoa Cng ngh Thng tin ai hoc a Lat Trang 53
Bai Giang Tom Tt: Hoa May Tinh
Q.y = P.y

- Bin dng theo phng trc y s lm thay i tung cn honh gi nguyn.
Q.x = P.x
Q.y = g*P.x + P.y
4.7 Php bin i Affine ngc
Php bin i ngc dng khi phu c mt php bin i thc hin. Gi Q l nh ca
P qua php bin i T c ma trn bin i M l : P.M.
Php bin i ngc T
-1
s c ma trn bin i l M
-1
l ma trn nghch o ca ma trn
M.
Vi ma trn bin i Affine dang:

thi ma trn nghich ao la:

Phep tinh tin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 54
Bai Giang Tom Tt: Hoa May Tinh
Phep quay

Phep bin i ti l
Phep bin dang
4.8 H ta thun nht
Ta thun nht ca mt im trn mt phng c biu din bng b ba s t l
(x
h
, y
h
, h) khng ng thi bng 0 v lin h vi cc ta (x, y) ca im bi cng
thc :
Nu mt im c ta thun nht l (x,y,z) th n cng c ta thun nht l
(h.x, h.y, h.z) trong h l s thc khc 0 bt k. Mt im P(x,y) s c biu din di
dng ta thun nht l (x,y,1). Trong h ta thun nht cc ma trn ca php bin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 55
Bai Giang Tom Tt: Hoa May Tinh
i c biu din nh sau :
Phep tinh tin
Phep quay

Phep bin i ti l
Thun li ca h ta thun nht l khi ta kt hp hai hay nhiu php bin i affine thi
ma trn hp ca nhiu php bin i c tnh bng cch nhn cc ma trn ca cc php
bin i thnh phn.
4.9 Kt hp cc php bin i
Qu trnh p dng cc php bin i lin tip to nn mt php bin i tng th
c gi l s kt hp cc php bin i.
Kt hp phep tinh tin
Nu ta thc hin php tnh tin ln im P c im P', ri li thc hin tip mt php
tnh tin khc ln P' c im Q. Nh vy, im Q l nh ca php bin i kt hp hai
php tnh tin lin tip.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 56
Bai Giang Tom Tt: Hoa May Tinh
Vy kt hp hai php tnh tin l mt php tnh tin. T , ta c kt hp ca nhiu php
tnh tin l mt php tnh tin.
Kt hp phep quay
Tng t, ta c ta im Q l im kt qu sau khi kt hp hai php quay quanh gc
ta M
R1
(
1
) v M
R2
(
2
) l :
Kt hp phep bin i ti l
Tng t nh php tnh tin, ta c ta im Q l im c c sau hai php tnh tin
M
1
(S
x1
, S
y1
), M
2
(S
x2
, S
y2
) l:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 57
Bai Giang Tom Tt: Hoa May Tinh
Khoa Cng ngh Thng tin ai hoc a Lat Trang 58
Bai Giang Tom Tt: Hoa May Tinh
Bi tp chng 4
1. V mt hnh bnh hnh bng cch s dng php tnh tin. (V on thng AB, sau
tnh tin AB thnh on thng CD//AB, v AD, Tnh tin AD thnh BC (xem
hnh v).
2. Vit chng trnh v mt hnh vung ABCD (xem hnh v).
Tnh tin hnh vung n v tr khc.
Phng to hnh vung ABCD.
Bin dng hnh vung thnh hnh thoi.
3. V mt elip, sau v thm 3 elip khc c cng tm vi elip cho, c dn
trc Ox l K v Oy l 1.
4. V mt elip nghing mt gc G c cc trc khng song song vi cc trc ta
.
5. V mt bng hoa bng cch v cc elip nghing mt gc G vi cc mu khc
nhau. V n khi no n phm bt k th ngng.
6. Vit chng trnh m phng s chuyn ng ca elip bng cch cho elip ny quay
quanh tm ca n.
7. Vit chng trnh m phng s chuyn ng ca tri t quay quanh mt tri.
8. Vit chng trnh v mt ng trn tm O bn knh R. V mt ng knh AB.
Quay ng knh ny quanh tm ng trn.
9. Tm vi tri mi ca tam gic A(1,1), B(3,2), C(2,4) qua php quay gc 30
o
qua
im (5,5).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 59
Bai Giang Tom Tt: Hoa May Tinh
Chng 5
GIAO CAC I TNG HOA
Ni dung chnh
Khai nim window.
Cc thao tc loi b phn hnh nh nm ngoi mt vng cho trc.
Thit k v ci t c cc thut ton tim giao ca c i tng hoa: ng
thng, hinh ch nht, a giac.
Ky thut Ray tracing.
5.1. M u
Cc hnh nh c nh ngha trn h ta th gii thc, sau c h ha v
ln cc h ta thit b. in hnh, mt vng ha cho php ngi s dng xc nh
vng no ca hnh nh s c hin th v bn mun t n ni no trn h ta thit
b. Mt vng n l hoc vi vng ca hnh nh c th c chn. Nhng vng ny c
th c t nhng v tr tch bit, hoc mt vng c th c chn vo mt vng ln
hn. Qu trnh bin i ny lin quan n nhng thao tc nh tnh tin, bin i t l
vng c chn v xa b nhng phn bn ngoi vng c chn.
Vng c dng hnh ch nht c xc nh trong h ta th gii thc c gi l
mt ca s (window). Cn vng hnh ch nht trn thit b hin th ca s nh x
n c gi l mt vng quan st (viewport).
Hinh 5.1: Ca s va vung quan sat
nh x mt vng ca s vo trong mt vng quan st, kt qu l ch hin th nhng
phn trong phm vi ca s. Mi th bn ngoi ca s s b loi b. Cc th tc loi b
Khoa Cng ngh Thng tin ai hoc a Lat Trang 60
Bai Giang Tom Tt: Hoa May Tinh
cc phn hnh nh nm bn ngoi bin ca s c goi la cc thut ton tim giao hoc
n gin c gi l clipping.
Bai toan t ra trn y cung la mt trong nhng bai toan quan trong cua hoa
may tinh la xa c inh phn giao cua ca c i tng ho a: giao cu a hai oan thng, oan
thng va hinh cha nht, a giac va hinh ch nht, Ca c thut toan cn thc hin nhanh
nht co th minh hoa cp nht ca c kt qua thay i trong ng dung hoa. Phng
phap giai tich c dung giai quyt cac bai toan trong chng nay.
5.2. Giao cua hai oan thng
Giao ca hai ng thng i qua hai im minh ho a qua th d n gin: ng thng i
qua ta (4,2) v ta (2,0) c giao vi on thng i qua (0,4) v (4,0)?
Gii php
- Xc nh phng trnh ng thng qua 2 im y = ax + b, trong a = (y2-y1)/
(x2-x1)
- T th d trn c: y=-2+x v y=4-x giao im ti (3, 1)
Tng qut: nu ta c y = a
1
+ b
1
x v y = a
2
+ b
2
x th giao im s ti:
x
i
= -(a
1
- a
2
)/(b
1
- b
2
)
y
i
= a
1
+ b
1
x
i
Cc trng hp c bit: song song trc x hay y, song song vi nhau.
Nu s dng phng php tm giao ng thng: i hi kim tra ta ca giao ng
thng c nm trong cc on thng?
Phng php khc: biu din on thng bng tham s on thng 1 t (xA, yA) n (xB,
yB) on thng 2 t (xC, yC) n (xD, yD) tnh ton giao ca 2 on thng ti ta c
t, s:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 61
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.2: Biu din tham s cua oan thng
5.3. oan th ng va hinh ch nh t
Vi tri tng i cua oan thng va hinh ch nht (R) co bn trng hp sau:
Hinh 5.3: Cac trng hp giao cua oan thng va hinh ch nht
Khoa Cng ngh Thng tin ai hoc a Lat Trang 62
Bai Giang Tom Tt: Hoa May Tinh
1. Ca hai u mut cua oan thng nm trong hinh ch nht, chng han AB.
2. Mt trong hai u mut cua oan thng nm trong hinh ch nht, chng han
BC.
3. Ca hai u mut cua oan thng nm ngoai hinh ch nht nhng co giao im,
chng han CD.
4. Ca hai u mut cua oan thng nm ngoai hinh ch nht va khng co giao
im, chng han DE.
Hai trng hp 1 va 4 goi la ca c trng hp tm thng, tc la xa c inh c ngay
co tn tai giao im hay khng. Cac trng hp con lai ta phai tin hanh thut toan xac
inh giao im se c trinh bay trong phn tip theo sau.
Hinh 5.4: Hai trng hp tm thng cua giao oan thng va hinh ch nht
5.3.1 Tim giao bng cach giai h phng trinh
a bai toan v xa c inh giao im cu a hai oan thng c trinh bay trong phn
3.2. Theo phng phap nay, chung ta cn tinh toan va kim tra nhiu kha nng; do o
khng hiu qua .
5.3.2 Thu t toan chia nhi phn
Mt tip cn l da trn c ch nh m c pht trin bi Cohen v Sutherland.
Mi im hai u mt on thng trong hnh nh s c gn mt m nh phn 4 bit,
c gi l m vng, gip nhn ra vng ta ca mt im. Cc vng ny c xy
dng da trn s xem xt vi bin ca s, nh hnh 6-8. Mi v tr bit trong m vng
c dng ch ra mt trong bn v tr ta tng ng ca im so vi ca s: bn
tri (left), phi (right), trn nh (top), di y (bottom). Vic nh s theo v tr bit
trong m vng t 1 n 4 cho t phi sang tri, cc vng ta c th lin quan vi v tr
bit nh sau:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 63
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.5: Ma hoa ca c u mut cua oan thng
Gi tr 1 bt k v tr no ch ra rng im v tr tng ng, ngc li bit v tr
l 0. Nu mt im nm trong ca s, m v tr l 0000. Mt im bn di v bn tri
ca s c m vng l 0101.
Thut toan chia nhi phn
1. Nu E(A)=0 va E(B)=0 kt lun AB = AB; thut toan dng.
2. Nu [E(A) AND E(B)] != 0 kt lun AB = ; kt thu c thut toan.
3. Nu E(A)=0 va E(B) 0(tc A va B

) thc hin:
a. t C = A,D = B.
b. Trong khi dai ||CD|| ln hn

t M la trung im cua oan CD.


Nu E(M)=0 thi c p nht C = M ngc lai D = M.
c. Kt lun AB = AM; kt thu c thut toan.
4. Nu E(A) = 0 va E(B)=0, hoan i vai tro cu a A va B; lp lai bc 3.
5. Ngc lai, thc hin:
a. t C = A,D = B.
b. Trong khi dai ||CD|| ln hn

t M la trung im cua oan CD.


Nu E(M)=0 ap dung Bc 3 cho hai oan MC va MD. Kt lun
AB=CD;kt thuc thut toan.
Nu [E(M) AND E] != 0 t C = M.
Nu [E(M) AND E(D)] != 0 t D = M.
Nu [E AND E(D)] != 0 kt lun AB = ; kt thu c thut toan.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 64
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.6: Minh hoa cua thut toan chia nhi phn.
5.3.3 Thu t toan Cohen-Sutherland
Xc nh nhanh on thng c cn ct xn hay khng nh cc php ton logc AND
v OR:
Kt qu php OR hai m u mt on thng cho kt qu 0: c hai im nm
trong ch nht.
Kt qu php AND hai m u mt on thng cho kt qu khc 0: c hai
im nm ngoi ch nht.
Hinh 5.7: oan thng giao vi hinh ch nht
Khoa Cng ngh Thng tin ai hoc a Lat Trang 65
Bai Giang Tom Tt: Hoa May Tinh
Giao ca on thng vi cc cnh ch nht song song trc tung:
x c gi tr Xmin, Xmax v h s gc a = (y
2
- y
1
)/(x
2
- x
1
)
y = y
1
+ a(x x
1
)
Giao on thng vi cc cnh song song trc honh:
y c gi tr Ymin, Ymax v h s gc a = (y
2
- y
1
)/(x
2
- x
1
)
x = x
1
+ (y - y
1
)/a
Thut toan ma hoa
EncodePoint(Point LeftTop, Point RightBottom, Point P)
Begin
byte code = 0;
if (P.X < LeftTop.X)
Begin
code |= 8;
End
if (P.X > RightBottom.X)
Begin
code |= 4;
End
if (P.Y < RightBottom.Y)
Begin
code |= 2;
End
if (P.Y > LeftTop.Y)
Begin
code |= 1;
End
return code;
End
Thut toan Cohen-Shuterland
InterLineRectangle(Point LeftTop, Point RightBottom, Point A, Point B)
Begin
byte codeA, codeB, codeOut;
float x = 0, y = 0;
codeA = EncodePoint(LeftTop, RightBottom, A);
codeB = EncodePoint(LeftTop, RightBottom, B);
while (true)
begin
Khoa Cng ngh Thng tin ai hoc a Lat Trang 66
Bai Giang Tom Tt: Hoa May Tinh
if (codeA == 0 && codeB == 0)
begin
return true;
end
if ((codeA & codeB) != 0)
begin
return false;
end
if (codeA != 0) codeOut = codeA;
else codeOut = codeB;
if ((codeOut & 8) != 0)//L
begin
x = LeftTop.X;
y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X);
end
else if ((codeOut & 4) != 0) //R
begin
x = RightBottom.X;
y = A.Y + (float)((x - A.X) * (B.Y - A.Y)) / (float)(B.X - A.X);
end
else if ((codeOut & 2) != 0)//B
begin
y = RightBottom.Y;
x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y);
end
else if ((codeOut & 1) != 0)//T
begin
y = LeftTop.Y;
x = A.X + (float)((y - A.Y) * (B.X - A.X)) / (float)(B.Y - A.Y);
end
if (codeOut == codeA)
begin
A.X = (int)x;
A.Y = (int)y;
codeA = EncodePoint(LeftTop, RightBottom, A);
end
else
begin
B.X = (int)x;
B.Y = (int)y;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 67
Bai Giang Tom Tt: Hoa May Tinh
codeB = EncodePoint(LeftTop, RightBottom, B);
end
end
End
5.3.4 Thu t toan Liang-Barsky
Mt thut ton tim giao oan thng va hinh ch nht hiu qu dng phng trnh
tham s c pht trin bi Liang v Barsky. H ghi ch rng nu mt im (x, y)
dc theo ng m nm trong ca s c nh ngha bi cc ta (xw
min
, yw
min
) v
(xw
max
, yw
max
), th cc iu kin sau y phi c tha:
xw
min
x
1
+ x u xw
max

yw
min
y
1
+ y u yw
max
Bn bt phng trnh trn c th c vit li theo hnh thc sau:
p
k
u q
k
, k = 1, 2, 3, 4
y p v q c nh ngha nh sau:
p1 = -x, q1 = x1 - xwmin
p2 = -x, q2 = xwmax x1
p3 = -y, q3 = y1 - ywmin
p4 = y, q4 = ywmax y1
Bt k on thng no song song vi mt trong cc bin ca s s c p
k
= 0, gi tr k
ph thuc vo bin ca s (k = 1, 2, 3, v 4 tng ng vi bin tri, phi, di, trn). Nu
vi cc gi tr ca k, chng ta c th gp q
k
< 0, khi on thng s hon ton nm
ngoi bin v c th b loi b khi xt sau ny. Nu q
k
0, ng thng tng ng nm
trong bin.
Khi p
k
< 0, s ko di khng gii hn ca on thng t bn ngoi vo bn trong ca
bin ca s ko di. Nu p
k
> 0, on thng tin t bn trong ra bn ngoi. Vi p
k
khc 0,
chng ta c th tnh gi tr ca u tng ng vi im m ti on thng ko di ct
bin k ko di ca ca s:
u = q
k
/ p
k
i vi mi on thng, chng ta c th tnh cc gi tr cho cc tham s u
1
v u
2

xc nh phn no ca on nm bn trong ca s. Gi tr ca u
1
c xc nh bng cch
nhn cc cnh ca ca s xem on ko di no t ngoi vo trong (p < 0). i vi cc
cnh ca s, chng ta tnh r
k
= q
k
/ p
k
. Gi tr ca u
1
l ln nht trong tp cha 0 v cc gi
Khoa Cng ngh Thng tin ai hoc a Lat Trang 68
Bai Giang Tom Tt: Hoa May Tinh
tr khc ca r. Ngc li, gi tr ca u
2
c xc nh bng cch kim tra cc bin xem
on no ko di no t bn trong ra bn ngoi (p > 0). Mt gi tr ca r
k
c tnh cho
mi bin ca s, v gi tr ca u2 l nh nht trong tp cha 1 v cc gi tr c tnh
ca r. Nu u
1
> u
2
, on hon ton nm ngoi ca s v c th b vt b. Ngc li, cc
im u mt ca on b ct c tnh t hai gi tr ca tham s u.
Thut ton ny c trnh by trong th tc sau y. Cc tham s giao im ca on
c khi to cc gi tr u
1
=0 v u
2
= 1. i vi mi bin ca s, cc gi tr thch hp
cho p v q c tnh v c dng bi hm cliptest xc nh xem on no c th b
loi b hoc xem cc tham s giao im sp sa b thay i khng. Khi p < 0, tham s r
c dng cp nht u
1
; khi p>0, tham s r c dng cp nht u
2
. Nu vic cp nht
u
1
hoc u
2
a n kt qu u
1
> u
2
, chng ta loi b on thng. Ngc li, chng ta cp
nht tham s u thch hp ch nu gi tr mi a n kt qu lm ngn on thng. Khi p
= 0 v q < 0, chng ta vt b on thng bi v n song song v bn ngoi bin. Nu
on thng vn cha b loi b sau tt c bn gi tr ca p v q va c kim tra xong,
cc im u mt ca on b ct c xc nh t cc gi tr ca u
1
v u
2
.
Chng trinh minh hoa thut toan Liang-Barsky
procedure clipper (var x1, y1, x2, y2 : float);
function cliptest (p, q : real; var u1, u2 : real);
Begin
result := true;
if p < 0 then begin {on t bn ngoi vo bn trong bin }
r := q / p;
if r > u2 then result := false
{hu b on hoc cp nht u1 nu thch hp}
else if r > u1 then u1 :=r
end {if p < 0}
else if p > 0 then begin {on t bn trong ra bn ngoi ca bin}
r := q / p;
if r < u1 then result := false
Khoa Cng ngh Thng tin ai hoc a Lat Trang 69
Bai Giang Tom Tt: Hoa May Tinh
else if r < u2 then u2 := r
end {if p > 0}
else
if q < 0 then result := fasle;
cliptest := result
End; {cliptest}
Begin {clipper}
u1 := 0;
u2 := 1;
dx := x2 x1;
if cliptest (-dx, x1 xwmin, u1, u2) then
if cliptest (dx, xwmax x1, u1, u2) then
begin
dy := y2 - y1;
if cliptest (-dy, y1 ywmin, u1, u2) then
if cliptest(dy, ywmax y1, u1, u2) then
begin
{nu u1 v u2 nm trong on [0,1], dng tnh cc im u mt mi}
if u2 < 1 then
begin
x2 := x1 + u2 * dx;
y2 := y1 + u2 * dy
Khoa Cng ngh Thng tin ai hoc a Lat Trang 70
Bai Giang Tom Tt: Hoa May Tinh
end; {if u2 < 1}
if u1 > 0 then
begin
x1 := x1 + u1 * dx;
y1 := y1 + u1 * dy
end; {if u1 > 0}
end {if cliptest}
End; {clipper}
Thut ton Liang v Barsky gim bt cc tnh ton cn thit ct cc on. Mi ln
cp nht u
1
v u
2
cn ch mt php chia, v cc giao im vi ca s c tnh ch mt
ln, khi m cc gi tr u
1
v u
2
va hon thnh. Tri li, thut ton ca Cohen v
Sutherland lp li vic tnh giao im ca on vi cc bin ca s, v mi php tnh giao
im cn c hai php chia v nhn.
5.4. Giao cua oan thng va a giac li
Vi tri tng i cua mt im vi oan thng
Trong nhiu ng dung, ta quan tm n khai nim na mt phng trong va na mt
phng ngoai xac inh bi mt oan thng. Khai nim nay lin quan mt thit n phap
vector cua oan thng.
Hinh 5.8: Vi tri tng i cua im Q vi oan thng l.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 71
Bai Giang Tom Tt: Hoa May Tinh
Phng trinh tng quat cua oan thng l co dang ax + by +c = 0. Ky hiu:
la ca c na mt phng ngoai va na mt phng trong xac inh bi l, trong o D = -c, n =
(a,b)
t
. Tiu chun kim tra im Q thu c mt na phng nao cua oan thng l:
Thut toan xa c inh giao im oan thng va a giac li
Hinh 5.9: Giao cua oan thng va a gia c li
Thut toan Cyrus-Beck da trn tiu chun loai bo n gian bng cach xac inh vi tri
tng i cua mt im vi mt oan thng. Gia s a giac li (R) c inh nghia nh
mt day ca c inh P
i
= (x
i
, y
i
),i=0, 1,..., L, trong h toa thc vi P
0
= P
L
. Muc i ch cua
phn nay la loai bo nhng phn cu a oan AB khng nm trong ca s (R) (Hinh 5.9).
Ky hiu l
i
, i =0, 1,..., L, la oan thng i qua hai inh lin tip P
i
, P
i+1
. t:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 72
Bai Giang Tom Tt: Hoa May Tinh
la cac na mt phng ngoai va mt phng trong xa c inh bi l
i
, trong o n
i
la phap vector
cua l
i
c chon hng ra na mt phng ngoai va D
i
la hng s nao o . Vi (R) la tp li
nn c xa c inh bi:
Y tng cua thut toan nh sau:
Vi mi oan thng l
i
, i =0, 1,..., L, chung ta loai bo phn cua oan thng AB
thuc na mt phng ngoai xa c inh bi l
i
va cp nht AB=AB(

i
l
).
Nu tai bc nao o, AB (
+
i
l
) thi kt lun giao cua oan thng va a giac li
bng trng; ngc lai, nu bc cui cung phn oan thng AB con lai nm
trong (R) chinh la phn giao cn tim.
Thut toan
Cyrus_Beck(Point2D *A, Point2D *B, VertPtr2D Poly)
Begin
float t_in = 0.0, t_out = 1.0, t_hit, Denom, D;
Point2D F, S;
Vector2D c, n, 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)
begin
S = Tempt->Vertex;
n.dx = (S.y - F.y);
n.dy = -(S.x - F.x);
D = n.dx*F.x + n.dy*F.y;
if ((Denom = Dot2D(n, c)) == 0.0)
if (Dot2D(n, a) > D) return False;
else
begin
t_hit = (D - Dot2D(n, a)) / Denom;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 73
Bai Giang Tom Tt: Hoa May Tinh
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;
end
F=S;
end
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;
End
5.5. Giao hai a giac
Thut toa n Sutherland-Hodgman
Ky hiu Subj va Clip la danh sa ch ca c inh cua hai a giac (S) va (C) tng ng. Co bn
kha nng xay ra gia mi canh cua (S) va cua (C):
1. Hai inh F va S nm trong: xut S.
2. inh F nm trong va S nm ngoai: tim giao im I va xut no .
3. Hai inh F va S nm ngoai: khng xut.
4. inh F nm ngoai va S nm trong: tim giao im I; xut I va S.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 74
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.10: Bn trng hp vi mi canh cua (S)
Xet vi du hinh (a):
Khoa Cng ngh Thng tin ai hoc a Lat Trang 75
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.11: Vi du thut toan Sutherland-Hodgman
1. Danh sa ch Subj sau khi ct (S) vi ca nh bn trai cua (C):
(1, 2, D, E, F, G, 3, 4, I, A, 1).
2. Danh sa ch Subj sau khi ct (S) vi ca nh bn di cu a (C):
(5, 6, E, F, 7, 5, 4, I, A, 1, 5).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 76
Bai Giang Tom Tt: Hoa May Tinh
3. Danh sa ch Subj sau khi ct (S) vi ca nh bn phai cua (C):
(8, 9, F, 7, 5, 4, I, A, 1, 5, 8).
4. Danh sa ch Subj sau khi ct (S) vi ca nh bn trn cua (C):
(9, F, 7, 5, 4, I, 10, 11, 5, 8, 9).
Thut toa n Weiler-Atherton
Ca ch tip cn cua Weiler-Atherton nhm tim ra giao cua hai a giac bt ky, thm chi co
l hng trong ca c a gia c. Ngoai ra co th tim phn hp va hiu hai a giac na. Xet vi du
hinh 5.12 sau.
Hinh 5.12: Vi du thut toan Weiler-Atherton
Hai a giac (S) va (C) c biu din bi danh sach ca c inh, ky hiu Subj = (A, B, C, D,
E, A) va Clip = (a, b, c, d, e, a) tng ng.
Tt ca cac giao im cua hai a giac c xac inh va lu vao mt danh sach.
Trong vi du trn co tt ca sau giao im: 1, 2, 3, 4, 5, 6.
Thc hin tin trinh: ln theo hng thun va nhay la xy dng hai danh sa ch:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 77
Bai Giang Tom Tt: Hoa May Tinh
Xut phat t giao im i vao la im i t ngoai vao trong cu a a gia c (C),
duyt trn (S) n khi gp giao im thi chuyn sang duyt trn (C), va lp lai.
Qua kt thu c khi gp im xut phat ban u. Tip tuc kim tra giao im trn (S)
cha c i qua va lp lai tin trinh trn. Ta co hai a giac sinh ra la (1, B, 2, 1)
va (3, 4, 5, 6, 3).
Hp hai a giac (S) (C)
i trn (S) theo hng thun cho n khi gp i m ra la im i t trong ra ngoai cua
a giac (C) duyt cho n khi gp giao im khac vi (C) thi duyt sang (C) cho n khi
gp giao im k tip ri chuyn sang (S). Qua kt thu c khi gp im xut phat ban u.
Kt qua (S) (C) gm hai a giac:
(2, C, 3, 2) (l hng).
(4, D, 5, c, d, e, 6, E, A, 1, a, b, 4).
Hiu hai a gia c (C) \ (S)
i trn (S) theo hng thun cho n khi gp i m vao duyt cho n khi gp giao
im khac vi (C) thi duyt sang (C) theo hng ngc cho n khi gp giao im k
tip ri chuyn sang (S). Qua kt thuc khi gp im xut phat ban u.
(C) \ (S): (1, B, 2, 3, 4, b, a, 1); va (5, 6, e, d, c, 5).
(S) \ (C): (4, 5, D, 4); va (6, 3, C, 2, 1, A, E, 6).
5.6. Ray tracing hai chiu: phan xa trong bung ki n
Muc i ch cua phn nay la a p dung mt s khai nim hinh ho c tao mt ng dung
Khoa Cng ngh Thng tin ai hoc a Lat Trang 78
Bai Giang Tom Tt: Hoa May Tinh
ho a: m phong qua trinh chuyn ng cua tia sang trong bung kin.
Phng phap Ray tracing la mt cng cu quan trong trong hoa may tinh tng
hp ca c anh. Trong tng hp a nh, cac tia sang nhn tao ln theo trong th gii thc ba
chiu cha nhiu i tng. ng i cu a mi tia sang xuyn qua cac i tng trong
sut ho c phan xa lai tuy theo mc phan xa cu a i tng cho n khi no dng lai
i tng nao o . Mau cua i tng nay se c t cho pixel tng ng trn thit bi
hin thi . M phong qua trinh Ray tracing rt d dang trong khng gian hai chiu.
Hinh dung quy ao cua trai pinpall nho khi no va cham vao ca c i tng trong
bung kin. Hinh bn di minh hoa nhat ct ngang cu a mt bung kin co nm bc tng
va cha ba tru tron. Trai pinpall bt u tai vi tri S va di chuyn theo hng vector c
cho n gp vt ca n se bi phan xa va di chuyn theo hng mi. Qua trinh c lp lai
nhiu ln. Quy ao cu a trai pinpall la ng gp khuc ma ta co th hinh dung ng i
cua tia sang di chuyn trong bung kin.
Hinh 5.13: Vi du v Ray tracing.
Chung ta se xy dng thut toan xac inh i tng nao tia sa ng se gp trc va vi
tri va tram tai o. Vi tri va cham se la im khi u cho cho ng i k tip vi hng
di chuyn mi.
Vector phan xa
Hinh 5.14 phn giai vector c thanh thanh phn m do c theo n va thanh phn e vung gc
vi n. Ta co, r = e m. Nhng e = c m nn r = c 2m.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 79
Bai Giang Tom Tt: Hoa May Tinh
Hinh 5.14: Phan xa tia sang
Vi vector m la vector phn giai cua vector c theo vector n nn
Nn
Thu tuc xac inh vector phan xa r t vector c va phap vector n
Reflection(Vector2D c, Vector2D n, Vector2D *r)
Begin
float Coeff = 2*Dot2D(c, n)/Dot2D(n, n);
(*r).dx = c.dx - Coeff*n.dx;
(*r).dy = c.dy - Coeff*n.dy;
End
Giao cua tia sang va ng th ng
Phng trinh tham s cua tia sang xut phat t S chuyn ng theo vector chi phng c
cho bi
R(t):= S + ct, t 0.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 80
Bai Giang Tom Tt: Hoa May Tinh
Bc tng tng ng ng thng:
trong o , phap vector n hng ra ngoai bung kin. Nu <n, c> 0 thi tia sang ct ng
thng tai P
h
= S + ct
h
, trong o:
Vi du, cho ng thng 6x 8y + 10 = 0 va tia sang xut phat t S(7, 4) di chuyn theo
vector chi phng c= (2, 1)
t
. ng thng co n =(6,8)
t
va D = 10.
Ta co
Suy ra giao im I:
I = S + tc =(7, 4) + (2, 1)1 = (5, 5).
Vector phan xa
Thu tuc xac inh thi im giao t
h
Khoa Cng ngh Thng tin ai hoc a Lat Trang 81
Bai Giang Tom Tt: Hoa May Tinh
Ray_With_Line(Point2D S, Vector2D c, Vector2D normal, float D, float *t_hit)
Begin
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;
End
Giao cua tia sang va hinh tron
Hinh tru tng ng ng tron (C) ban kinh R tm I. Xet s tng giao cua tia sang va
ng tron.
Ta co
Suy ra
Hay tng ng
trong o
Khoa Cng ngh Thng tin ai hoc a Lat Trang 82
Bai Giang Tom Tt: Hoa May Tinh
Nghim cua phng trinh (co th ao)
Vi du, cho ng tron (x 1)
2
+ (y 4)
2
= 4 va tia sang xut phat t S(8, 9) di chuyn
theo vector chi phng c = (-1, 1)
t
.
Phng trinh giao im
At
2
+ 2Bt + C = 0,
trong o
Suy ra
Vy toa giao im la P
h
= S + t
h
c =(8 5, 9 5).
Vector phan xa
Khoa Cng ngh Thng tin ai hoc a Lat Trang 83
Bai Giang Tom Tt: Hoa May Tinh
Thu tuc xac inh thi im giao
Ray_With_Circle(Point2D S, Vector2D c, Point2D Center, float Rad,float
*t_hit)
Begin
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;
if (delta < 0.0)
*t_hit = -1.0;
else
*t_hit = (-B - sqrt(delta))/A;
End
Khoa Cng ngh Thng tin ai hoc a Lat Trang 84
Bai Giang Tom Tt: Hoa May Tinh
Chng 6
HOA BA CHIU
Ni dung chnh
Gii thiu hoa 3 chiu (3D).
Hin thi i tng 3D.
Ca c phep bin i Affine 3D c s .
6.1. Gii thiu ha 3 chiu
Cc i tng trong th gii thc phn ln l cc i tng 3 chiu cn thit b hin
th ch 2 chiu. Do vy, mun c hnh nh 3 chiu ta cn phi gi lp. Chin lc c bn
l chuyn i tng bc. Hnh nh s c hnh thnh t t, ngy cng chi tit hn.
Qui trnh hin th nh 3 chiu nh sau
Bin i t h ta i tng sang h ta th gii thc. Mi i tng c m
t trong mt h ta ring c gi l h ta i tng.
C 2 cch m hnh ha i tng:
o Solid modeling: m t cc vt th (k c bn trong).
o Boudary representation: ch quan tm n b mt i tng.
Cc i tng c th c biu din bng m hnh Wire-Frame. Nhn thy rng khi
biu din i tng, ta c th chn gc ta v n v o lng sao cho vic biu din
l thun li nht. Thng th ngi ta chun ha kch thc ca i tng khi biu din.
Biu din bin cho php x l nhanh cn silid modeling cho hnh nh y v xc thc
hn.
o Loi b cc i tng khng nhn thy c: Loi b cc i tng hon ton
khng th nhn thy trong cnh. Thao tc ny gip ta lc b bt cc i tng
khng cn thit do gim chi ph x l.
o Chiu sng cc i tng: Gn cho cc i tng mu sc da trn cc c tnh
ca cc cht to nn chng v cc ngun sng tn ti trong cnh. C nhiu m
hnh chiu sng v to bng : constant-intensity, Interpolate,...
o Chuyn t word space sang eye space. Thc hin mt php bin i h ta
t v tr quan st v gc ta v mt phng quan st v mt v tr mong
c.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 85
Bai Giang Tom Tt: Hoa May Tinh
Hnh nh hin th ph thuc vo v tr quan st v gc nhn.
H qui chiu c gc t ti v tr quan st v ph hp vi hng nhn s thun
li cho cc x l tht.
o Loi b phn nm ngoi viewing frusturn: Thc hin vic xn i tng trong
cnh cnh nm gn trong mt phn khng gian hnh chp ct gii hn vng
quan st m ta gi l viewing frustum. Viewung frustum c trc trng vi tia
nhn, kch thc gii hn bi vng ta mun quan st.
o Chiu t eye space xung screen space: Thc hin vic chiu cnh 3 chiu t
khng gian quan st xung khng gian mn hnh.
C 2 phng php chiu:
- Chiu song song.
- Chiu phi cnh.
Khi chiu ta phi tin hnh vic kh mt khut c th nhn c hnh nh
trung thc.
Kh mt khut cho php xc nh v tr (x,y) trn mn hnh thuc v i tng
no trong cnh.
o Chuyn i tng sang dng pixel.
o Hin th i tng.
6.2. Biu din i tng 3 chiu
Trong ha my tnh, cc i tng lp th c th c m t bng cc b mt
ca chng. V d : mt hnh lp phng c xy dng t su mt phng, mt hnh tr
c xy dng t s kt hp ca mt mt cong v hai mt phng v hnh cu c xy
dng t ch mt mt cong. Thng thng biu din mt i tng bt k, ngi ta
dng phng php xp x a cc mt v dng cc mt a gic.
im trong khng gian 3 chiu c ta (x,y,z) m t mt v tr trong khng gian.
typedef struct {
int x;
int y;
int z;
} Point _3D ;
Vect : xc nh bi 3 ta dx, dy, dz m t mt hng v di ca vc t.
Vc t khng c v tr trong khng gian.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 86
Bai Giang Tom Tt: Hoa May Tinh
Tch v hng ca hai vc t
V
1
* V
2
= dx
1
dx
2
+ dy
1
dy
2
+ dz
1
dz
2
Hay V
1
* V
2
= |V
1
||V
2
| cos
typedef struct {
int dx;
int dy;
int dz;
} Vector ;
on thng trong khng gian 3 chiu: biu din t hp tuyn tnh ca 2 im
biu din dng tham s ca on thng, ta c :
P = P
1
+ t*( P
2
- P
1
) , ( 0 t 1)
typedef struct {
Point P1;
Point P2;
} Segment ;
Tia (Ray) : l mt on thng vi mt u nm v cc.
Biu din dng tham s ca tia :
P = P
1
+ t*V , ( 0 t < )
typedef struct {
Point P1;
Vector V;
} Ray;
ng thng (Line): l mt on thng vi c hai u nm v cc
Biu din dng tham s ca ng thng
P = P
1
+ t*V , ( t < )
typedef struct {
Point P1;
Vector V;
} Line;
Khoa Cng ngh Thng tin ai hoc a Lat Trang 87
Bai Giang Tom Tt: Hoa May Tinh
a gic (Polygon) : l mt vng gii hn bi hn dy cc im ng phng .
typedef struct {
Point *Points;
int nPoints;
} Polygon;
C th biu din mt mt a gic bng mt tp hp cc nh v cc thuc tnh km
theo. Khi thng tin ca mi mt a gic c nhp, d liu s c in vo cc bng s
c dng cho cc x l tip theo, hin th v bin i.
Cc bng d liu m t mt a gic c th t chc thnh hai nhm : bng hnh hc
v bng thuc tnh. Cc bng lu tr d liu hnh hc cha ta cc nh v cc tham
s cho bit v nh hng trong khng gian ca mt a gic. Thng tin v thuc tnh ca
cc i tng cha cc tham s m t trong sut, tnh phn x v cc thuc tnh kt
cu ca i tng. Mt cch t chc thun tin lu tr cc d liu hnh hc l to ra 3
danh sch : mt bng lu nh, mt bng lu cnh v mt bng lu a gic. Trong :
o Cc gi tr ta cho mi nh trong i tng c cha trong bng lu nh.
o Bng cnh cha cc con tr tr n bng nh cho bit nh no c ni vi
mt cnh ca a gic.
o Cui cng l bng lu a gic cha cc con tr tr n bng lu cnh cho bit
nhng cnh no to nn a gic.
Mt phng (Plane) :
typedef struct {
Vector N;
int d;
} Plane;
Phng trnh biu din mt phng c dng : Ax + By + Cz + D = 0. Trong (x,y,z) l
mt im bt k ca mt phng v A, B, C, D l cc hng s din t thng tin khng gian
ca mt phng.
xc nh phng trnh mt phng, ta ch cn xc nh 3 im khng thng hng ca
mt phng ny. Nh vy, xc nh phng trnh mt phng qua mt a gic, ta s s
dng ta ca 3 nh u tin (x
1
,y
1
), (x
2
,y
2
), (x
3
,y
3
) trong a gic ny.
T phng trnh mt phng trn, ta c
Khoa Cng ngh Thng tin ai hoc a Lat Trang 88
Bai Giang Tom Tt: Ha My Tnh
Ax
k
+ By
k
+ Cz
k
+ D = 0 , k = 0, 1, 2, 3.
Trong :
Khai trin cc nh thc trn ta c :
A = y
1
(z
2
- z
3
) + y
2
(z
3
- z
1
) + y
3
(z
1
- z
2
)
B = z
1
(x
2
- x
3
) + z
2
(x
3
- x
1
) + z
3
(x
1
- x
2
)
C = x
1
(y
2
- y
3
) + x
2
(y
3
- y
1
) + x
3
(y
1
- y
2
)
A = - x
1
(y
2
z
3
- y
3
z
2
) - x
2
(y
3
z
1
- y
1
z
3
) - x
3
(y
1
z
2
- y
2
z
1
)
Hng ca mt phng thng c xc nh thng qua vc t php tuyn ca n. Vc
t php tuyn n = (A,B,C).
1
2 Hinh 5.15: Mt phng trong khng gian
M hnh khung ni kt
Mt phng php thng dng v n gin m hnh ha i tng l m hnh
khung ni kt. Mt m hnh khung ni kt gm c mt tp cc nh v tp cc cnh
Khoa Cng ngh Thng tin ai hoc a Lat Trang 89
Bai Giang Tom Tt: Ha My Tnh
ni cc nh . Khi th hin bng m hnh ny, cc i tng 3 chiu c v rng v
khng ging thc t lm. Tuy nhin, v bng m hnh ny th nhanh nn ngi ta
n=(A,B,C) thng dng n trong vic xem phc tho cc i tng. hon thin
hn, ngi ta dng cc k thut to bng v loi b cc ng khut, mt khut.
Vi m hnh khung ni kt, hnh dng ca i tng 3 chiu c biu din bng
hai danh sch: danh sch cc nh v danh sch cc cnh ni cc nh . Danh sch
cc nh cho bit thng tin hnh hc, cn danh sch cc cnh xc nh thng tin v s
kt ni. Chng ta hy quan st mt vt th ba chiu c biu din bng m hnh
khung ni kt nh sau:
Hinh 5.16: M hinh khung kt ni
Bng danh sch cc cnh v nh biu din vt th
Khoa Cng ngh Thng tin ai hoc a Lat Trang 90
Bai Giang Tom Tt: Ha My Tnh
Ngi ta c th v cc i tng theo m hnh khung ni kt bng cch s dng cc
php chiu song song hay php chiu phi cnh s c gii thiu chng 6.
6.3. Cc php bin i 3 chiu
6.3.1. H ta bn tay phi - bn tay tri
H ta theo qui c bn tay phi : bn tay phi sao cho ngn ci hng
theo trc z, khi nm tay li, cc tay chuyn ng theo hng t trc x n trc y.
1
2
3 Hinh 5.17: H toa ban tay phai
H ta ta theo qui c bn tay tri : bn tay phi sao cho ngn ci hng
theo trc z, khi nm tay li, cc ngn tay chuyn ng theo hng t trc x n
trc y.
4
5
Khoa Cng ngh Thng tin ai hoc a Lat Trang 91
z
y
x
Bai Giang Tom Tt: Ha My Tnh
6
7 Hinh 5.18: H toa ban tay trai
H ta thun nht: Mi im (x, y, z) trong khng gian -ca c c biu
din bi mt b bn ta trong khng gian 4 chiu thu gn (hx, hy, hz, h).
Ngi ta thng chn h = 1.
2 Cc php bin i tuyn tnh l t hp ca cc php bin i sau : t l, quay,
bin dng v i xng. Cc php bin i tuyn tnh c cc tnh cht sau :
- Gc ta l im bt ng.
- nh ca ng thng l ng thng.
- nh ca cc ng thng song song l cc ng thng song song.
- Bo ton t l khong cch.
- T hp cc php bin i c tnh phn phi
6.3.2. Cc php bin i Affine c s
Php tnh tin
Php bin i t l
1
2 Khi S
x

= S
y

= S
z

ta c php bin i ng dng.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 92
z
x
y
Bai Giang Tom Tt: Ha My Tnh
6.3.2.1 Php quay quanh trc x
Hinh 5.19 : Phep quay quanh tru c x
- L php bin i P(x,y,z) P(x,y,z) qua php quay gc

quanh trc x :
- Ta c :

'



cos sin '
cos cos '
'
z y z
z y y
x x
Cc ta y,z bin thin tng t php quay gc

quanh gc ta trong mt
phng yoz (y ng vai tr x, z ng vai tr y).
Do ,

,
_

1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1


x
T
6.3.2.2 Php quay quanh trc y
- L php bin i P(x,y,z) P(x,y,z) qua php quay gc

quanh trc y :
- Ta c :

'



cos sin '
sin cos '
'
x z x
x z z
y y
Do ,
Khoa Cng ngh Thng tin ai hoc a Lat Trang 93
z
x
y
P
P
Bai Giang Tom Tt: Ha My Tnh

,
_

1 0 0 0
0 cos 0 sin
0 0 1 0
0 sin 0 cos


y
T
6.3.2.3 Php quay quanh trc z
- L php bin i P(x,y,z) P(x,y,z) qua php quay gc

quanh trc y :
- Ta c :

'



cos sin '
sin cos '
'
y x y
y x x
z z
Do o,

,
_

1 0 0 0
0 1 0 0
0 0 cos sin
0 0 cos


z
T
6.3.2.4 Php quay quanh trc song song vi trc ta
Php quay quanh trc song song vi trc ta hiu qu vi nhiu php bin i,
trong thc t i tng thng quay quanh trc ca n. Ta xt trng hp trc i
tng song song vi 1 trong cc trc ta . n gin ta phn tch chuyn ng
quay ca i tng song song vi trc cho trc theo cc bc :
Bc 1 : Tnh tin trc i tng trng vi trc ta m n song song.
Bc 2 : Quay i tng quanh trc ca n tng ng quay quanh trc ta
.
Bc 3 : Tnh tin tr li.
VD : Xt php quay gc

quanh trc x song song vi x i qua (m, n, l)


Khoa Cng ngh Thng tin ai hoc a Lat Trang 94
Bai Giang Tom Tt: Ha My Tnh
Hinh 5.20 : Phep quay quanh truc x song song vi x
Bc 1 : Tnh tin x trng vi x.

,
_

1
0 1 0 0
0 0 1 0
0 0 0 1
] T[-m,-n,-l
l n m
Bc 2 : Quay quanh trc x vi gc

,
_

1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1


x
T
Bc 3 : Tnh tin tr li

,
_

1
0 1 0 0
0 0 1 0
0 0 0 1
= l] n, T[m, = [-m,-n,-l] T
1 -
l n m
Do , ma trn biu din php quay gc

quanh trc xsong song x i qua (m,n,l) l :


T= T[-m,-n,-l] x
T
T[m,n,l]
VD : Tm nh ca hnh ch nht A(1,2,1), B(3,2,1), C(3,4,3), D(1,4,3) sau php quay
gc

=45
o
quanh trc x song song x i qua (1,1,1).
Giai :
Tnh : T= T[-1,-1,-1] x
T
T T[1,1,1]
A(1,2,1) A=(1,2,1,1) T
Khoa Cng ngh Thng tin ai hoc a Lat Trang 95
P
P
x
z
x
y
Bai Giang Tom Tt: Ha My Tnh
B(3,2,1) B=(3,2,1,1) T
C(3,4,3) C=(3,4,3,1) T
D(1,4,3) D=(1,4,3,1) T
6.3.2.5 Php quay quanh trc bt k
Xt php quay gc


quanh trc bt k, ta thc hin qua cc bc sau :
Hinh 5.21: Phep quay quanh tru cbt ky
Bc 1 : Tnh tin trng gc ta .

,
_

1 . . .
0 1 0 0
0 0 1 0
0 0 0 1
= y,-P.z] T[-P.x,-P.
z P y P x P
Bc 2 : Quay quanh trc z gc

sao cho P,P thuc (xOz)

,
_

1 0 0 0
0 1 0 0
0 0 cos sin
0 0 cos


z
T
Bc 3 : Quay quanh trc y gc

sao cho P, P thuc Ox

,
_

1 0 0 0
0 cos 0 sin
0 0 1 0
0 sin 0 cos


y
T
Bc 4 : Quay quanh trc x gc

:
Khoa Cng ngh Thng tin ai hoc a Lat Trang 96
z
x
y
P
P
x
Bai Giang Tom Tt: Ha My Tnh

,
_

1 0 0 0
0 cos sin 0
0 sin cos 0
0 0 0 1


x
T
Bc 5 : Ngc bc 3
Bc 6: Ngc bc 2
Bc 7 : Ngc bc 1
Cch xc nh chiu dng trong cc php quay
nh ngha v chiu quay c dng chung cho c h ta theo qui c bn tay
phi v bn tay tri. C th chiu dng c nh ngha nh sau :
o Quay quanh truc x : t trc dng y n trc dng x
o Quay quanh trc y : t trc dng z n trc dng x
o Quay quanh trc x : t trc dng x n trc dng y
Ngoai cac phep bin i trn, ta xet thm mt s phep bin i Affine kha c sau y:
Php i xng qua mt phng ta
Php i xng qua trc x, y v z
Khoa Cng ngh Thng tin ai hoc a Lat Trang 97
Bai Giang Tom Tt: Ha My Tnh
Php bin dng
Khoa Cng ngh Thng tin ai hoc a Lat Trang 98
Bai Giang Tom Tt: Ha My Tnh
Bai tp chng 6
1. Tm vi tri mi ca hnh ch nht A(1,2,1), B(3,2,1), C(3,4,3), D(1,4,3) sau php quay
gc

=45
o
quanh goc toa .
2. Tm vi tri mi ca hnh ch nht A(1,2,1), B(3,2,1), C(3,4,3), D(1,4,3) sau php quay
gc

=30
o
quanh im M(1,1,1).
3. Tm vi tri mi ca hnh ch nht A(1,2,1), B(3,2,1), C(3,4,3), D(1,4,3) sau php quay
gc

=45
o
quanh trc xsong song x i qua (1,1,1).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 99
Bai Giang Tom Tt: Ha My Tnh
PHU LU C
TH VI N HOA OPENGL
OpenGL l g?
OpenGL (GL l t vit tt ca Graphics Library) l phn mm giao din vi cc
phn cng ho. OpenGL c pht trin bi Silicon Graphic Inc. OpenGL cng l
mt giao din lp trnh ng dng (Application Program Interface API). N bao gm
khong 150 cu lnh h tr nhiu ngn ng nh C, C++, Java, C#...Cho php ngi
lp trnh s dng to ra ng dng tng tc ho 3D.
OpenGL c thit k khng ph thuc nn tng phn cng cng nh h iu
hnh my tnh (independence of hardware platform and operating system). Nh mt
chng trnh chung gian gia ngi dng v phn cng my tnh. Vi OpenGL chng
ta s to ra cc m hnh phc tp t nhng i tng hnh hc c bn. l cc im
(Points), ng (Line), a gic (Polygon).
C php ca OpenGL
Cc cu lnh ca OpenGL u s dng tin t gl v cc t tip theo c bt u
bng k t hoa, v d glClearColor(). Tng t nh vy, cc hng c nh ngha
bng tin t GL_ tip theo l cc t vit hoa c ngn cch bi k t gch di, v d
GL_COLOR_BUFFER_BIT.
glVertex3fv
ch ra nh dng vector, nu c
loi d liu: f float
d double float
S i, (2,3 hoc 4) s signed short integer
i signed integer
Loi d liu khc trong lnh OpenGL :
- b character
- ub unsigned character
- us unsigned short integer
- ui unsinged integer.
D liu v hng v nh dng vector.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 100
Bai Giang Tom Tt: Ha My Tnh
Cu lnh OpenGL cho ta thy c ngha chc nng ca hm.Tham s v loi
tham s xut hin tu thuc cc hm khc nhau.
i khi trong cu lnh c thm du * ch rng c php ny c th c nhiu
lnh. V d, glColor*() c gi tr cho cc lnh khc nhau bn thit lp mu hin
hnh. Hoc glClear*() c cc lnh sau: glClearColor(), glClearDepth(),
glClearAccum(), glClearStencil().
OpenGL l mt my trng thi
OpenGL l mt my trng thi. Bn t n ti cc trng thi khc nhau (hoc cc
ch ). Chng gi nguyn tc dng cho n khi ta thay i trng thi khc. Chng
hn t mu hin hnh l mt bin trng thi. Bn c th t mu hin ti bi mu
trng, mu hoc mu no khc, v sau mi i tng c v bi mu cho
ti khi bn t mu hin ti bng mu khc. Mu hin ti ch l mt trong nhiu bin
trng thi m OpenGL lu gi. Cn nhiu trng thi khc nh im nhn hin hnh, v
tr v c tnh nh sng, thuc tnh cht liu,
Bin trng thi l ni lu gi cc trng thi. Mi bin trng thi hoc ch c
mt gi tr mc nh ban u. Ta c th xem gi tr ca chng thng qua 6 hm sau:
o glGetBooleanv()
o glGetDoublev()
o glGetFloatv()
o glGetIntergerv()
o glGetPointerv()
o glIsEnabled()
Mt vi bin trng thi c nhiu hn ch nh lnh yu cu (chng hn
glGetLight*(), glGetError(), hoc glGetPolygonStipple()). Hn na ta c th lu v
ly ra cc gi tr ca tp trng thi bin trn thuc tnh stack vi lnh glPushAttrib()
hoc glPushClientAttrib() v glPopAttrib() hoc glPopClientAttrib().
Cc th vin lin quan
Mc d OpenGL l cng c mnh song cc i tng v u l nhng i tng
hnh hc c bn. n gin mt s th tc, chng ta c cung cp mt s th vin
c th iu khin vic v i tng mc cao hn.
OpenGL Utility Library (GLU): Bao gm mt s th tc thit lp ma trn
xc nh hng nhn, ma trn cc php chiu, v biu din cc mt trong khng
gian 3 chiu.
OpenGL Utility Toolkit (GLUT): bao gm cc th tc nhm n gin ho
vic to cc i tng hnh hc. c bit hnh trong khng gian 3 chiu (solid
hnh c, wire hnh khung).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 101
Bai Giang Tom Tt: Ha My Tnh
Khi lp trnh OpenGL trong C# ta s dng thm mt s th vin sau: csgl.dll,
csgl.native.dll, CsGL.Basecode.
Hin th cc i tng hnh hc c bn:im, on thng, a gic
to mt i tng hnh hc t cc nh, ta t cc nh gia (hai hm
glBegin(param) v glEnd(). Tham s param a vo cho hm glBegin() s quyt nh
i tng OpenGL v ra t cc nh khai bo bn trong.
V d:
glBegin(GL_POLYGON);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 1.0);
glVertex2f(0.5, 1.0);
glVertex2f(1.0, 0.5);
glVertex2f(0.5, 0.0);
glEnd();
Hm glBegin(Glenum mode). Bin mode ch ra i tng c v, nhn mt trong cc
gi tr sau:
Gi tr ngha
GL_POINTS V cc im
GL_LINES V cc on thng
GL_POLYGON V a gic li
GL_TRIANGLES V tam gic
GL_QUADS V t gic
GL_LINE_STRIP V ng gp khc khng khp kn
Khoa Cng ngh Thng tin ai hoc a Lat Trang 102
Bai Giang Tom Tt: Ha My Tnh
GL_LINE_LOOP V ng gp khc khp kn
GL_TRIANGLE_STRIP Mt di cc tam gic lin kt vi nhau
GL_TRIANGLE_FAN Mt di cc tam gic lin kt theo hnh qut
GL_QUAD_STRIP Mt di cc t gic lin kt vi nhau
Danh sch cc hnh th hin s kt qu tng ng ca bin mode
Hinh phu luc 1: Cac i tng hinh hoc c ban
Qui lut hin th r rng trn hnh v, ring vi GL_QUAD_STRIP c v vi qui
lut ni 4 im c v tr 2n,2n+1,2n+3,2n+2 vi 2n l im khi u ca hnh t gic.
ch nh 1 nh ta dng lnh sau:glVertex{2,3,4}{sifd}[v](to ).Trong :
- {2,3,4} ch nh s chiu ca khng gian.
- [v] nu to im c truyn t mt mng cho trc.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 103
Bai Giang Tom Tt: Ha My Tnh
- {sifd} ch nh kiu d liu ca to , ngha c ch nh trong bng sau:
K hiu Kiu d liu Tn kiu ca OpenGL
s 16 bit - integer GLshort
i 32 bit - integer GLint
f 32 bit - float GLfloat
d 64 bit - float GLdouble
OpenGL ch cho php mt s lnh nm bn trong glBegin() v glEnd()
glVertex*() Khai bo vertex
glColor*() Thit lp mu
glIndex*() Thit lp ch mc mu
glNormal*() Thit lp ta vector ch phng
glEvalCoord*() Sinh ta
glCallList(), glCallLists() Thc thi Display List
glTexCoord*() Thit lp ta texture
glEdgeFlag*() iu khin vic v cnh
glMaterial*() Thit lp thuc tnh cht liu
Mi hm OpenGL ngoi cc hm trn u khng c nm gia glBegin() v
glEnd(). Tuy nhin ta vn c th dng cc cu trc iu khin khc (v d 1 vng lp
for chng hn).
Khoa Cng ngh Thng tin ai hoc a Lat Trang 104
Bai Giang Tom Tt: Ha My Tnh
Bt u lam quen OpenGL bng ngn ng C#
M chng trinh Visual Studio .NET (2005) va tao mi ng dung C# trong
Windows Application.
Hinh phu luc 2:Tao project hoa mi
Nhp phai chut vao References, chon Add References ... chon the Browse
thm th vin CsGL. (File csgl.dll)
Hinh phu luc 3: Thm th vin OpenGL vao project
Khoa Cng ngh Thng tin ai hoc a Lat Trang 105
Bai Giang Tom Tt: Ha My Tnh
Nh p pha i chu t vao project va chon Add\Class... (Vi du , t tn lp la
OpenGL.cs)
Hinh phu luc 4: Thm lp mi vao project
Khai bao l p OpenGL:
o Khai bao th vi n CsGL.OpenGL;
o Tha k l p OpenGLControl.
o Khai bao qua ta i phng thc glDraw(), InitGLContext() va
OnSizeChanged(EventArgs e).
Hinh phu luc 5: Vit code khi tao ch hoa OpenGL
Khoa Cng ngh Thng tin ai hoc a Lat Trang 106
Bai Giang Tom Tt: Ha My Tnh
Lp OpenGL khai ba o trn nh m t User Control. By gi ta thm User
Control trn vao Form1 nh sau: (hoc co th ke o User Control qua Form)
Hinh phu luc 6:Thm control OpenGL vao form
Chay chng trinh th (nh chp file csgl.native.dll vo th mc Debug),
nu thy xu t hi n mt pixel mau o trn nn mau en la thanh cng.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 107
Bai Giang Tom Tt: Ha My Tnh
Hinh phu luc 7: Kt qua khi tao ch hoa OpenGL
Khoa Cng ngh Thng tin ai hoc a Lat Trang 108
Bai Giang Tom Tt: Ha My Tnh
Ve i tng 3D trong OpenGL
OpenGL cho phep ve cac i tng 3D d dang va tao cac hiu ng mau, anh sang,
bin i trong khng gian 3D rt chinh xac. Sau y la mt s hinh anh 3D c lp
trinh t th vin OpenGL.
Hinh phu luc 8: Ca c i tng hinh hoc 3D c ban
Khoa Cng ngh Thng tin ai hoc a Lat Trang 109
Bai Giang Tom Tt: Ha My Tnh
Hinh phu luc 9:Hinh khi lp phng hin thi bng texture
Hinh phu luc 10: Hinh 3D va phng ch trong hoa OpenGL
Hinh phu luc 11: Phao hoa c biu din bng OpenGL
Khoa Cng ngh Thng tin ai hoc a Lat Trang 110
Bai Giang Tom Tt: Ha My Tnh
Hinh phu luc 12: Game n gian vit bng OpenGL
oan chng sau minh ho a ve i tng hinh chop tam gia c. Ta thc hin ve 4 mt
cua hinh chop, mi mt cu a no la mt tam giac gm 3 inh.
Vi 3 mt sau cu a i tng trn bi khut nn khi hin thi chi thy mt mt cua hinh
chop tam giac.
Khoa Cng ngh Thng tin ai hoc a Lat Trang 111
Bai Giang Tom Tt: Ha My Tnh
Hinh phu luc 13: Hinh chop tam gia c ban u trong OpenGL
thy c cac mt con lai ta phai quay hinh chop tam giac quanh cac truc mt goc
nao o . Chng han, ta quay hinh chop mt goc 30
o
quanh ca c truc x, y, va z, ta c
kt qua sau: glRotatef(30, 1, 1, 1);
Hinh phu luc 14: Hinh chop tam giac sau khi quay trong OpenGL
Khoa Cng ngh Thng tin ai hoc a Lat Trang 112

You might also like