You are on page 1of 98

3

LI NI U
ha my tnh l mt trong nhng lnh vc l th nht v pht trin nhanh nht ca tin hc. Ngay t khi xut hin, ha my tnh c sc li
cun mnh lit, cun ht rt nhiu ngi v c s dng nhiu lnh vc khc nhau nh : khoa hc, ngh thut, kinh doanh, thng mi, cng nghip, qun
l, gio dc, gii tr, S lng cc chng trnh ha ng dng tht khng l v pht trin lin tc.
Cun sch ny c bin son da trn cng mn ha my tnh thuc chng trnh o to tin hc bc c nhn v cao ng ca B Gio dc
v o to, tp trung vo cc vn ca ha hai chiu v ba chiu nhm cung cp mt nn tng kin thc y v chn lc bao gm cc khi nim c
bn nht, cc thut ton c s ca ha my tnh, gip ngi c c th t tm hiu v xy dng cc chng trnh ng dng ha.
Cun sch c chia lm 10 chng, gm hai phn chnh : ha hai chiu v ha ba chiu. Cui mi chng u c phn tm tt v h thng bi
tp ngi c t kim tra. Cc thut ton trnh by u c lu v chng trnh minh ha di dng ngn ng C.
cc vn trnh by c phong ph, a dng v cp nht, chng ti rt n lc trong vic tham kho cc ti liu kinh in, c bit l cc bi
ging v ha ca cc trng i hc ni ting trn th gii u, M nh Brown, Stanford, MIT, Waterloo, Tuy nhin trong qu trnh bin son chc
chn khng th khng trnh khi s st, chng ti xin trn trng tip thu tt c nhng kin ng gp ca bn c cng nh cc bn ng nghip hon
thin cun sch ngy mt tt hn.
Chng ti xin chn thnh cm n Ban ch nhim Khoa Cng ngh Thng tin - i hc Khoa hc T nhin, cc anh ch trong Ban bin tp Nh xut
bn Gio dc h tr rt nhit tnh cun sch ny sm n tay bn c.
CC TC GI



CHNG 1
GII THIU V HA MY TNH
S pht trin ca khoa hc, k thut, ngh thut, kinh doanh, v cng ngh lun lun ph thuc vo kh nng truyn t thng
tin ca chng ta, hoc thng qua cc bit d liu lu tr trong microchip hoc thng qua giao tip bng ting ni. Cu chm
ngn t xa xa mt hnh nh c gi tr hn c vn li hay trm nghe khng bng mt thy cho thy ngha rt ln ca
hnh nh trong vic chuyn ti thng tin. Hnh nh bao gi cng c cm nhn nhanh v d dng hn, c bit l trong trng
hp bt ng v ngn ng. Do khng c g ngc nhin khi m ngay t khi xut hin my tnh, cc nh nghin cu c
gng s dng n pht sinh cc nh trn mn hnh. Trong sut gn 50 nm pht trin ca my tnh, kh nng pht sinh hnh
nh bng my tnh ca chng ta t ti mc m by gi hu nh tt c cc my tnh u c kh nng ha.
ha my tnh l mt trong nhng lnh vc l th nht v pht trin nhanh nht ca tin hc. Ngay t khi xut hin,
ha my tnh c sc li cun mnh lit, cun ht rt nhiu ngi nhiu lnh vc khc nhau nh khoa hc, ngh thut, kinh
doanh, qun l, ... Tnh hp dn v a dng ca ha my tnh c th c minh ha rt trc quan thng qua vic kho st cc
ng dng ca n.
1. MT S NG DNG CA HA MY TNH
Ngy nay, ha my tnh c s dng trong rt nhiu lnh vc khc nhau nh cng nghip, thng mi, qun l, gio
dc, gii tr, S lng cc chng trnh ha ng dng tht khng l v pht trin lin tc, sau y l mt s ng dng
tiu biu :
1.1. H tr thit k
Mt trong nhng ng dng ln nht ca ha my tnh l h tr thit k (CAD computer-aided design). Ngy nay
CAD c s dng hu ht trong vic thit k cc cao c, t, my bay, tu thy, tu v tr, my tnh, trang tr mu vi, v
rt nhiu sn phm khc.
S dng cc chng trnh ny, u tin cc i tng c hin th di dng cc phc tho ca phn khung (wireframe
outline), m t c th thy c ton b hnh dng v cc thnh phn bn trong ca cc i tng. S dng k thut ny,
ngi thit k s d dng nhn thy ngay cc thay i ca i tng khi tin hnh hiu chnh cc chi tit hay thay i gc nhn,
.
Mt khi thit k xong phn khung ca i tng, cc m hnh chiu
sng, t mu v to bng b mt s c kt hp to ra kt qu cui cng
rt gn vi th gii thc .
1.2. Biu din thng tin
y l cc ng dng s dng ha my tnh pht sinh cc biu ,
th, dng minh ha mi quan h gia nhiu i tng vi nhau. Cc
ng dng ny thng c dng tm lc cc d liu v ti chnh, thng
k, kinh t, khoa hc, ton hc, gip cho vic nghin cu, qun l, mt
cch c hiu qu.

4

Hnh 1.1 - Phc tho phn khung v kt qu ca thit k xy lanh







Hnh 1.2 Thng tin tm lc c biu din qua cc biu
1.3. Lnh vc gii tr, ngh thut
Trong lnh vc ngh thut, cc chng trnh my tnh nh Paint Shop Pro,
Adobe Photoshop, 3D Studio, h tr rt c lc cho cc ha s, cc nh to mu
trong vic thit k cc hnh nh sng ng, v rt thc. Vi cc chng trnh ny,
ngi ha s c my tnh to cho cm gic y nh ang lm vic ngoi i thc bng
cch cung cp cc cng c nh khung v, gi v, bng pha mu, cc hiu ng ba chiu,
lm cho h cm thy rt thoi mi v tin li.
Ngoi ra ha my tnh cn gip to ra cc chng trnh tr chi, gii tr; h
tr cho cc k xo in nh, cho cc nh lm phim. C nhiu b phim rt ni ting nh
vo k xo in nh nh : Cng vin Khng long k Jura (Jurassic Park), Titanic, Th
gii nc (Water World),
Hnh 1.3 Hnh nh c to ra t chng trnh ha
1.4. Gio dc v o to
Hin nay cc chng trnh m phng cu trc ca cc vt th, tin trnh ca cc phn ng ha hc, hot ng ca cc gi
tin trn mng my tnh, c dng rt nhiu trong vic h tr ging dy.
Trong o to, cc ng dng m phng c dng kim tra trnh ngi li, hun luyn phi cng, iu khin giao
thng,

Hnh 1.4 Chng trnh hc v my tnh
1.5. Giao tip gia my tnh v ngi dng
Mi ng dng u phi c giao din giao tip vi ngi dng. Giao din ha thc s l mt cuc cch mng mang li s
thun tin v thoi mi cho ngi dng ng dng. Cc ng dng da trn h iu hnh MS Windows l mt minh ha rt trc
quan ca giao din ha. Cc chc nng ca cc ng dng ny c thit k cho ngi dng lm vic thng qua cc biu tng
m t chc nng . V d, chc nng lu tp tin c hiu thng qua biu tng a mm, chc nng in n c hiu thng qua
biu tng my in, chn cc chc nng, ngi dng s dng chut tr n v nhn vo cc biu tng tng ng. im
thun li chnh khi dng biu tng l kch thc khng gian m n chim t hn nhiu so vi dng vn bn m t cho cng
mt chc nng, ngoi ra vic nm bt cc chc nng qua cc biu tng s d dng hn rt nhiu khi ngi dng gp tr ngi v
mt ngn ng.
Cc ng dng c giao din ha cn cho php ngi dng kh nng lm vic d dng vi nhiu ca s vi nhiu dng
ti liu khc nhau cng mt lc.
Hnh 1.5 Giao din ca chng trnh MS Word
2. KHI NIM V HA MY TNH
ha my tnh l tt c nhng g lin quan n vic s dng my tnh
pht sinh ra hnh nh. Cc vn lin quan ti cng vic ny bao gm :
to, lu tr, thao tc trn cc m hnh (cc m t hnh hc ca i tng) v
cc nh.
Theo nh ngha ny th ha my tnh bao gm vic thit k phn
cng nh thit b hin th, cc thut ton cn thit pht sinh cc ng trn
cc thit b ny, cc phn mm c s dng cho c ngi lp trnh h thng
v ngi lp trnh ng dng ha, v cc chng trnh ng dng to nh
bng my tnh.
ha my tnh cung cp mt trong nhng phng cch t nhin nht
cho vic truyn t thng tin vi my tnh. Ngy nay, trong nhiu qu trnh
5
thit k, ci t v xy dng, thng tin m hnh nh mang li l hu nh khng th thiu c. K thut trc quan (scientific
visualization) tr nn l mt lnh vc rt quan trng t nm 1980, khi cc nh nghin cu khoa hc v cc k s nhn ra
rng h khng th x l mt lng d liu khng l pht sinh t cc siu my tnh m d liu khng c tm lc v lm ni
bt cc xu hng v hin tng qua nhiu loi biu din ha khc nhau.
ha my tnh tng tc l mt trong nhng phng tin mang li thm nhiu s thun li cho ngi dng trong vic
pht sinh hnh nh k t khi c pht minh ca my nh v truyn hnh. Vi my tnh, chng ta c th to cc hnh nh khng
ch ca cc i tng c th, thc t, m cn ca cc i tng tru tng, nhn to; cc biu din ca d liu m khng c
tnh k tha v mt hnh hc, nh l kt qu iu tra, kho st. Hn na, vi ha my tnh chng ta khng b gii hn trong
cc nh tnh. Cc nh ng thng thng mang li nhiu hiu qu hn so vi nh tnh, c bit l vi cc hin tng bin i
theo thi gian, c thc t (nh s i hng ca cnh my bay siu m, hay s pht trin ca khun mt ngi t lc tr th ti
lc gi) v tru tng (nh l xu hng pht trin ca vic s dng nng lng, gia tng dn s, ).
C nhiu cch tip cn trong vic hc mn ha, tri rng t vic nghin cu phn cng ti vic hc s dng
ha my tnh ch trong mt lnh vc chuyn bit no nh l thit k mch tch hp cao (VLSI very large scale integrated
circuit). y chng ta tip cn t gc ca ngi lp trnh ng dng, l ngi s dng tt c cc h tr ca phn cng,
cc cng c phn mm xy dng nn cc ng dng.
Tuy nhin c th thit k v ci t cc chng trnh ng dng ha c tt, ngoi vic tm hiu cc kh nng ca
cng c lp trnh, chng ta cng cn phi nm vng cc khi nim v phn cng; cc vn , cc nguyn l lin quan n ci
t phn mm, cc thut ton, cc ng dng,
3. TNG QUAN V MT H HA
Mt h ha bao gi cng c hai thnh phn chnh l phn cng v phn mm. Phn cng bao gm cc thit b hin
th v nhp d liu, Phn mm bao gm cc cng c lp trnh v cc trnh ng dng ha. Chng ta s ln lt kho st
cc thnh phn ny.
3.1. Phn cng
3.1.1. Thit b hin th
Mn hnh l thit b hin th thng dng nht trong mt h ha. Cc thao tc ca hu ht mn hnh u da trn thit
k ca ng tia m cc (CRT cathode ray tube).
Cu to ca CRT
Hnh 1.6 minh ha thao tc c s ca mt ng tia m cc. Mt chm cc tia in t (tia m cc) pht ra t mt sng in
t, vt qua cc h thng hi t (focusing) v dn hng (deflection) s hng ti cc v tr xc nh trn mn hnh c ph
mt lp phosphor. Ti mi v tr tng tc vi tia in t, ht phosphor s pht ra mt chm sng nh. V nh sng pht ra bi
cc ht phosphor m dn rt nhanh nn cn phi c mt cch no duy tr nh trn mn hnh. Mt trong cc cch l lp
i lp li nhiu ln vic v li nh tht nhanh bng cch hng cc tia in t tr li v tr c. Kiu hin th ny gi l refresh
CRT.
Hnh 1.6 Cu to ca CRT
C nhiu loi phosphor c dng trong mt CRT. Ngoi mu sc ra, im khc nhau chnh gia cc loi phosphor l
bn (persistent), l khong thi gian pht sng sau khi tia CRT khng cn tc ng. Lp phosphor c bn thp cn
tc lm ti cao hn gi cho hnh nh trn mn hnh khi nhe. Loi ny thng rt tt cho hot hnh, rt cn thay i
hnh nh lin tc. Lp phosphor c bn cao thng c dng cho vic hin th cc nh tnh, phc tp cao. Mc d mt
s loi phosphor c bn ln hn 1 giy, tuy nhin cc mn hnh ha thng c xy dng vi bn dao ng t 10
n 60 micro giy.
S lng ti a cc im c th hin th trn mt CRT c gi l phn gii (resolution). Mt nh ngha chnh xc
hn ca phn gii l s lng cc im trn mt centimet m c th c v theo chiu ngang v chiu dc, mc d n
thng c xem nh l tng s im theo mi hng.
Kch thc vt l ca mn hnh ha c tnh t di ca ng cho mn hnh, thng dao ng t 12 n 27 inch
hoc ln hn. Mt mn hnh CRT c th c kt hp vi nhiu loi my khc nhau, do s lng cc im trn mn hnh
c th c v tht s cn ty thuc vo kh nng ca h thng m n kt hp vo.
6
Mt thuc tnh khc ca mn hnh na l t s phng (aspect ratio). T s phng l t l ca cc im dc v cc im
ngang cn pht sinh cc on thng c di n v theo c hai hng trn mn hnh (trong mt s trng hp ngi ta
thng dng t s phng nh l t s ca cc im theo chiu ngang so vi cc im theo chiu dc). Vi cc mn hnh c t
s phng khc 1, d dng nhn thy l cc hnh vung hin th trn n s c dng hnh ch nht, cc hnh trn s c dng hnh
ellipse. Thc ra khi nim t s phng xut pht t bn cht khong cch (nu tnh cng mt n v di) gia cc im dc
khng bng khong cch gia cc im ngang. Mt t s phng c gi tr c ngha l v 3 im theo chiu dc s c cng
di vi vic v 4 im theo chiu ngang.
Mn hnh dng im (raster - scan display):
Mn hnh dng im l dng thng gp nht trong s cc
dng mn hnh s dng CRT da trn cng ngh truyn hnh.
Trong h thng ny, chm tia in t s c qut ngang qua
mn hnh, mi ln mt dng v qut tun t t trn xung di. S
bt tt ca cc im sng trn mn hnh ph thuc vo cng ca
tia in t v y chnh l c s ca vic to ra hnh nh trn mn
hnh.
Mi im trn mn hnh c gi l mt pixel hay l pel (vit
tt ca picture element). Cc thng tin v hnh nh hin th trn mn
hnh c lu tr trong mt vng b nh gi l vng m lm ti
(refresh buffer) hay l vng m khung (frame buffer). Vng b nh
ny lu tr tp cc gi tr cng sng ca ton b cc im trn
mn hnh v lun lun tn ti mt song nh gia mi im trn mn
hnh v mi phn t trong vng ny.
Hnh 1.7 Qu trnh to hnh nh ca cc tia qut
thay i cc hnh nh cn hin th, cc gi tr tng ng
vi v tr v sng phi c t vo vng m khung. Hnh 1.8
minh ha cc gi tr tng ng trong vng m khung hin th
hnh nh ca ch A trn mn hnh.
i vi mn hnh en trng, vng m khung cn c gi
l bitmap, vi cc mn hnh khc vng m khung thng c
gi l pixmap.
to ra cc nh en trng, n gin ch cn lu thng tin
ca mi pixel bng 1 bit (cc gi tr 0, 1 s tng trng cho vic
tt (ti), bt (sng) pixel trn mn hnh). Trong trng hp nh
nhiu mu, ngi ta cn nhiu bit hn, nu thng tin ca mi pixel
c lu bng b bit, th ta c th c 2
b
gi tr mu phn bit cho pixel .
Hnh 1.8 Song nh gia vng m khung v mn hnh
Trong cc mn hnh mu, ngi ta nh ngha tp cc mu lm vic trong mt bng tra (LookUp Table - LUT). Mi phn
t ca LUT nh ngha mt b ba gi tr R (Red), G (Green), B (Blue) m t mt mu no . Khi cn s dng mt mu, ta ch
cn ch nh s th t (index) tng ng ca mu trong LUT. Bng LUT c th c thay i bi cc ng dng v ngi
lp trnh c th can thip iu khin. Vi cch lm ny chng ta c th tit kim khng gian lu tr cho mi phn t trong
vng m khung.
S phn t ca LUT c xc nh t s lng cc bits/pixel. Nu mi phn t ca vng m khung dng b bits lu
thng tin ca mt pixel, th bng LUT c 2
b
phn t. Nu b=8, LUT s c 2
8
=256 phn t, chnh l s mu c th c hin
th cng mt lc trn mn hnh.
Vic lm ti trn mn hnh dng ny c thc hin tc 60 n 80 frame/giy. i khi tc lm ti cn c
biu din bng n v Hertz (Hz s chu k/ giy), trong mt chu k tng ng vi mt frame. S dng n v ny, chng
ta c th m t tc lm ti 60 frame/giy n gin l 60Hz. Khi t n cui mi dng qut, tia in t quay tr li bn tri
ca mn hnh bt u dng qut k tip. Vic quay tr li pha tri mn hnh sau khi lm ti mi dng qut c gi l tia
hi ngang (horizontal retrace). V ti cui mi frame, tia in t (tia hi dc vertical retrace) quay tr li gc trn bn tri
ca mn hnh chun b bt u frame k tip.
Trong mt s mn hnh, mi frame c hin th thnh hai giai on s dng k
thut lm ti an xen nhau (interlaced refesh). giai on u tin, tia qut s qut
mt s dng t trn xung di, sau tia hi dc, cc dng cn li s c qut. Vic
an xen cc dng qut ny cho php chng ta thy c ton mn hnh hin th ch
trong mt na thi gian so vi dng qut tt c cc dng mt ln t trn xung
di. K thut ny thng c dng cho loi mn hnh c tc lm ti thp.
Hnh 1.9 Hot ng ca mn hnh interlaced

7
Cc h mu
Vic nghin cu mu sc bao gm nhiu lnh vc nh : quang hc, sinh l hc, tm l hc v cc nhn t khc thuc v
con ngi. V th, c rt nhiu quan nim cng nh cc thnh ng v khoa hc cc mu sc. i vi nhng ngi lm tin hc,
vn m h quan tm l mi tng tc qua li gia s cm nhn mu sc ca con ngi vi cc b phn phn cng hin th
mu sc ca mn hnh my tnh, v vi cc phn mm thit k trn n. Bng di y s trnh by mi quan h ny :
S cm nhn
ca con ngi
c im phn cng c im phn mm
Mu sc Cc mu hin th gc Thut ton trn khng
gian mu
Sc mu (Hue) Bc sng
(WaveLength)

bo ha (Saturation) S thun nht ca mu
sng hay chi Cng sng Hiu chnh gamma
S rung ca mn hnh Tc lm ti
(refresh)

Khng gian mu (color space) do c a ra nh cc mu hin th trn my tnh bi v chng lm n gin ha
cc thao tc tnh ton cn thit cho vic chuyn i mu sc (color transformation). Khng gian mu c th c thit k hoc
l da trn c s ca b pht sinh mu ca phn cng (hardware color
generation) (v d nh khng gian RGB) hoc l da trn s cm nhn mu
sc ca mt (nh khng gian HSL). Vi mt ng dng, vic chn khng gian
mu no s dng ty thuc vo mt s nhn t sau : chnh xc m cc
nh thit k cn kim sot mu sc (color control); yu cu v s tng tc
gia cc mu sc v tc cc tnh ton cho ng dng .
Khng gian RGB (RGB space)
Khng gian RGB m t mu sc bng ba thnh phn Red, Green, Blue.
Khng gian ny c minh ha bng mt khi lp phng vi cc trc chnh
R, G, B.
Mi mu trong khng gian RGB u c biu din nh l mt vector
thng qua ba vector c s l Red, Green, Blue. Do , ng vi cc t hp
khc nhau ca ba mu ny s cho ta mt mu mi.
Hnh 1.10 - M hnh khng gian RGB
Trong hnh lp phng mi mu gc (Red, Green, Blue) c t vo gc i din vi cc mu b n. (Hai mu b nhau
l hai mu m khi kt hp to thnh mu trng hay xm (grey)). Nh vy Red i din vi Cyan, Green i din vi Magenta,
Blue i din vi Yellow. Gi tr xm nm trn ng cho ni cc nh ( ) ( ) 1 , 1 , 1 , 0 , 0 , 0 ca hnh lp phng. Thng thng
cc trc R, G, B c chun ha. Khi kt hp hai mu li vi nhau th mu sinh ra c vector bng tng cc vector thnh phn.
Mt s thun li khi dng khng gian RGB :
- Khng gian RGB l chun cng nghip cho cc thao tc ha my tnh. Cc thao tc mu sc c th c tnh ton
trn cc khng gian mu khc nhng cui cng cn phi chuyn v khng gian RGB c th hin th trn mn hnh
(do thit k ca phn cng da trn m hnh RGB).
- C th chuyn i qua li gia khng gian RGB vi cc khng gian mu khc nh CIE, CMY, HSL, HSV, ...
- Cc thao tc tnh ton trn khng gian RGB thng n gin hn.
Mt s bt li :
- Cc gi tr RGB ca mt mu l khc nhau i vi cc mn hnh khc nhau : Ngha l cc gi tr RGB ca mu tim
trn mn hnh mu ny s khng sinh ra ng mu trn mt mn hnh khc.
- S m t cc mu trong th gii thc i vi khng gian RGB cn nhiu hn ch bi v khng gian RGB khng hon
ton ph hp vi s cm nhn mu sc ca con ngi. Hai im phn bit trong khng gian RGB, vi mt ngi c
th hoc khng th l th hin ca hai mu khc nhau. Chnh v iu ny m khng gian RGB khng th nh x trc
tip n bt c chiu cm nhn no khc (nh hue, saturation, lightness) ngoi hue (sc ).
Khng gian HSL
Khng gian ny c ch trng hn khng gian RGB n cc thnh phn ca s cm nhn mu sc ca mt (Hue,
Saturation, Lightness). Tuy nhin, khng gian HSL thc ra cng ch l mt php bin i gn ng ca khng gian RGB m
thi. Khng ging nh cc khng gian mu khc xy dng trn s cm nhn mu sc ca mt, khng gian HSL vn cn b l
B
R
G
Black
(0,0,0)
Green
(0,1,0)
Yellow
(1,1,0)
Red
(1,0,0)
Magenta
(1,0,1)
Blue
(0,0,1)
Cyan
(0,1,1)
White
(1,1,1)
1
1
1 Grayscale
8
thuc vo phn cng ca CRT.
Khng gian HSL c biu din trong h ta tr, hnh minh ha l hai hnh nn p
vo nhau. H (Hue) l to ng vi gc quay, S (Saturation) l ta gc, L l trc thng
ng. Hu ht cc mu t bo ha khi S = 1 v L = 0.5.
Hnh 1.11 - M hnh khng gian HSL
Mt s thun li ca khng gian HSL :
- Khng gian HSL gn vi s cm nhn cc thuc tnh mu sc ca con ngi hn
khng gian RGB (tuy cch tip cn n gin ha i nhiu). Cc mu c xc
nh d dng hn chng hn do H quay quanh trc ng nn cc mu b c xc
nh mt cch d dng, i vi cc gi tr lightness cng vy.
- Vic kim sot cc mu c s HSL d hn cho nhng ngi mi lm quen vi cc
chng trnh ha.
Mt s bt li :
- Vic thm vo mt vector khng th thc hin n gin nh khng gian RGB (ch
thm vo cc thnh phn mu). Cc thao tc lng gic khi bin i s nh hng ng
k n tc ca chng trnh.
- Cn phi qua hiu chnh gamma trc khi hin th (ging nh cc khng gian khc).
Khng gian HSV
Khng gian HSV thc cht cng ch l mt s bin i khc ca khng gian RGB. Khng
gian HSV c m hnh bng hnh lp phng RGB quay trn nh Black ca n. H (Hue) l
gc quay quanh trc Values, S (Saturation) i t 0 n 1, trc V (Values) do vy tng ng vi
ng cho ni nh White v Black.
Hnh 1.12 - M hnh khng gian HSV
Theo cch ny, cc mu t bo ha khi S=1 v V=1. Trong khng gian HSV cc mu c chun ha v s cc gam
(gamut) mu ca thit b hin th.
Mt s thun li ca khng gian HSV :
- Khng gian HSV d dng p ng cc mu sc ca cc chng trnh ha do c xy dng da trn s bt chc
lut trn mu ca ngi ha s. V d : Khi cn thm mu trng vo, phi t V=S=1 sau gim S t t cho ti khi
t c mu va ; hay khi cn thm mu en vo, iu c ngha l gim V (cng sng) v c nh S,...
- Do khng cn s dng cc php bin i lng gic khi mun chuyn sang khng gian RGB nn khng gian HSV c
nhiu thun li v mt tnh ton hn so vi khng gian HSL.
Mt s bt li :
- Cn c cc php hiu chnh gamma.
Bng so snh gia cc khng gian mu
RGB HSL HSV
Chun cng nghip cho cc thao tc
ha my tnh
Hnh thc bin i khc ca khng gian
RGB
Hnh thc bin i khc ca khng gian
RGB
Lin h trc tip vi phn cng Lin h gn hn vi s cm nhn mu
sc ca con ngi
Lin h gn hn vi s cm nhn mu sc
ca con ngi
L chuyn i cui cng cho tt c cc
nhu cu hin th
i hi cc php bin i phc tp n gin ha cc thao tc tnh ton.
Khng th chuyn sang mn hnh khc
(ph thuc thit b)
c lp thit b c lp thit b
Khng c s tng ng 1-1 vi cch
cm nhn mu ca con ngi
C C
M hnh l hnh lp phng M hnh l hai hnh nn p vo nhau M hnh l hnh nn n
c chun ha v 1 c chun ha v 1 c chun ha v 1
bo ha t max khi S =1 bo ha t max khi S =1, L =0.5 bo ha t max khi S =1, V =1
Trn mu khng r rng R rng R rng
V(Value)
Yellow
Green
(120
0
)
Cyan
Blue
(240
0
)
Magenta
Red
(0
0
)
V=1
(White)
Grayscale
V=0
(Black)
Magenta
S(Saturation)
H(Hue angle)
L(Lightness)
L=1
(White)
Yellow Blue
Grayscale
L=0
(Black) S(Saturation)
H(Hue angle)
L=0.5
Red Magenta
Cyan Green
9
3.1.2. Cc thit b nhp
Bn phm : Xut hin trong hu ht cc my tnh, n l thit b nhp d liu dng vn bn v s. y l loi thit b
quen thuc nht vi ngi s dng tuy c hn ch l tng tc khng cao.
Chut : Cng vi s xut hin ca cc ng dng ha tng tc cao, chut l thit b nhp ngy cng quen thuc vi
ngi s dng. Ngi ta dng chut tr v chn (point-click) cc chc nng ph hp vi yu cu ca mnh. Bng cch ny,
giao tip gia ngi dng v my tnh cng ngy cng thn thin v d dng hn. Ngoi ra chng ta cng c mt s thit b
nhp khc cng h vi chut nh track ball,
3.2. Phn mm
Phn mm ha c th phn thnh 2 loi : cc cng c lp trnh v cc trnh ng dng ha phc v cho mt mc
ch no . Cc cng c lp trnh cung cp mt tp cc hm ha c th c dng trong cc ngn ng lp trnh cp cao
nh C, Pascal, .. V d nh cc th vin ha ca cc ngn ng nh C, Pascal hay GL (Graphics Library) ca Silicon
Graphics. Cc hm c s ca n bao gm vic to cc i tng c s ca hnh nh nh on thng, a gic, ng trn, ,
thay i mu sc, chn khung nhn, p dng cc php bin i, . Trong khi , cc ng dng ha c thit k cho nhng
ngi dng khng phi l lp trnh vin, cho php ngi dng to cc i tng, hnh nh, m khng cn quan tm ti vic
chng c to ra nh th no. V d nh l Photoshop, AutoCAD,
Biu din ta
Thng thng cc h ha s dng h ta Descartes m t i tng. Nu cc ta ca i tng c m t
trong cc h ta khc nh ta cu, , chng phi c chuyn v ta Descartes trc khi dng.
Quy trnh hin th i tng
Trc tin chng ta m t cc i tng thnh phn ca mt nh phc tp trong cc h ta ring thun tin cho
vic biu din ta ca chng. Cc h ta ny c gi l h ta m hnh (modeling coordinates) hay cn gi l h ta
cc b (local coordinates). Mt khi cc i tng thnh
phn c biu din xong, chng ta s t chng vo cc v
tr tng ng trong nh s dng h ta th gii thc (world
coordinates). Sau cng, cc m t ca nh trong h ta th
gii thc s c chuyn n mt hoc nhiu h ta khc
nhau ca thit b hin th, ty vo chng ta mun hin th trn
thit b no. Cc h ta ny cn c gi l h ta thit
b (device coordinates). Cc m t trong cc h ta cc b
v h ta th gii thc cho php chng ta s dng th
nguyn thch hp cho cc n v o m khng phi b rng
buc g ca tng thit b hin th c th.

Hnh 1.13 Quy trnh hin th i tng
Thng thng, cc h ha chuyn cc m t trong h ta th gii thc ti h ta thit b chun (normalized
device coordinates) c cc chiu l n v trc khi chuyn ti h ta thit b. iu ny lm cho h thng c lp vi nhiu
loi thit b khc nhau.
Cc hm ha
Cc hm ha cung cp kh nng to v thao tc hnh nh. Cc hm ny c phn loi nh sau :
- Tp cc cng c to ra cc i tng ha c s nh im, on thng, ng cong, vng t, k t,
- Tp cc cng c thay i thuc tnh dng thay i thuc tnh ca cc i tng ha c s nh mu sc, kiu
ng, kiu ch, mu t,
- Tp cc cng c thc hin cc php bin i hnh hc dng thay i kch thc v tr, hng ca cc i tng,
- Tp cc cng c bin i h quan st dng xc nh v tr quan st i tng v v tr trn thit b hin th c
dng hin th i tng.
- Tp cc cng c nhp liu : Cc ng dng ha c th s dng nhiu loi thit b nhp khc nhau nh bt v, bng,
chut, bn phm, iu khin v x l dng d liu nhp.
- Cui cng l tp cc cng c cha cc thao tc dng cho vic qun l v iu khin v d nh xa ton b mn hnh,
thit lp ch ha,
Cc chun phn mm
Mc tiu cn bn ca cc phn mm ha c chun l tnh tng thch. Khi cc cng c c thit k vi cc hm
ha chun, phn mm c th c di chuyn mt cch d dng t h phn cng ny sang h phn cng khc v c dng
trong nhiu ci t v ng dng khc nhau.
10
Sau nhng n lc khng nh ca cc t chc chun ha ca cc quc gia v quc t, mt chun cho vic pht trin cc
phn mm ha ra i l GKS (Graphics Kernel System H ha c s). H thng ny ban u c thit k cho
tp cc cng c ha hai chiu, sau c pht trin v m rng cho ha ba chiu.
Cc hm ca GKS thc s ch l cc m t tru tng, c lp vi bt k ngn ng lp trnh no. ci t mt chun
ha cho ngn ng c th no, cc c php tng ng s c xc nh v c th ha.
Mc d GKS xc lp c cc tng ban u cho cc hm ha c s, tuy nhin n khng cung cp mt cch thc
chun cho vic giao tip ha vi cc thit b xut. N cng khng xc nh cc cch thc cho cc m hnh thi gian thc
cng nh cc cch thc lu tr v chuyn i hnh nh. Cc chun cho cc cch thc ny c xy dng ring, c th l : Cc
chun cho cc cch thc giao tip thit b c cho bi h CGI (Computer Graphics Interface System), h CGM (Computer
Graphics Metafile) xc nh cc chun cho vic lu tr v chuyn i hnh nh, v h PHIGS (Programmers Hierarchical
Interactive Graphics Standard) xc nh cc cch thc chun cho cc m hnh thi gian thc v cc kh nng lp trnh mc
cao hn m cha c quan tm ti trong GKS.
TM TT
S ra i ca ha my tnh thc s l cuc cch mng trong giao tip gia ngi dng v my tnh. Vi lng thng tin trc quan, a dng v phong
ph c chuyn ti qua hnh nh, cc ng dng ha my tnh li cun nhiu ngi nh tnh thn thin, d dng, kch thch kh nng sng to v tng
ng k hiu sut lm vic.
ha my tnh ngy nay c ng dng rt rng ri trong nhiu lnh vc khoa hc, k thut, ngh thut, kinh doanh, qun l, Cc ng dng ha
rt a dng, phong ph v pht trin lin tc khng ngng. Ngy nay, hu nh khng c chng trnh ng dng no m khng s dng k thut ha lm
tng tnh hp dn ca mnh.
Mt h ha bao gi cng c hai thnh phn chnh l phn cng v phn mm..
Thnh phn phn cng bao gm cc thit b hin th (hay l thit b xut) v cc thit b nhp. Tiu biu nht trong cc thit b hin th l mn hnh m
c ch hot ng da trn cu to ca ng tia m cc CRT. Cc thit b nhp d liu thng gp bao gm bn phm, chut.
Phn mm ha c th chia lm hai loi l cc cng c lp trnh nh cc hm th vin ca C, Pascal, GL, v cc ng dng phc v cho mt
mc ch no nh AutoCAD, Photoshop, Hng tip cn ca chng ta trong ti liu ny mc ca ngi lp trnh, ngha l chng ta s tm hiu cc
thut ton, cc nguyn l xy dng nn cc ng dng ha ch khng phi l hc cch s dng cc phn mm nh AutoCAD, Photoshop,
BI TP
1. Cu to v nguyn l hot ng ca mn hnh dng im. Cc khi nim nh vng m khung, phn gii, t s phng,
ca mn hnh dng ny.
2. ngha v hot ng ca bng tra LUT.
3. Ba mn hnh c phn gii ln lt l 640x480, 1024x768, 1280x1024. Hy cho bit kch thc ca vng m khung
(tnh bng byte) nu mi pixel c m t bng 8 bit, 12 bit, 24 bit.
4. Hai mn hnh c phn gii l 640x480 v 1024x768. Cho bit s pixel c truy cp trong mt giy ca mi mn hnh
nu tc lm ti ca CRT l 60Hz.
5. Mt mn hnh c kch thc theo chiu ngang l 12 inche, chiu dc l 9.6 inch. Hy cho bit ng knh ca mi im
trn mn hnh nu phn gii l 1280x1024 v t s phng l 1.
6. Hy cho bit thng tin trong vng m khung ca cc hnh v cc k t B, G, H,
7. Cc h mu. Mi lin h gia chng.
8. Quy trnh hin th i tng. ngha ca cc h ta .
9. Tp cc hm ha ca mt cng c lp trnh. Lin h ti cc th vin ha ca cc ngn ng hc nh C, Pascal,
10. Ti sao cn phi chun ha cc phn mm ? Tm hiu cc chun GKS, PHIGS.

11
CHNG 2
CC I TNG HA C S
Bt k mt nh m t th gii thc no bao gi cng c cu trc t tp cc
i tng n gin hn. V d mt nh th hin bi tr ca mt cn phng s c
cu trc t cc i tng nh cy cnh, t knh, bn gh, tng, nh sng n,
Vi cc nh ha pht sinh bng my tnh, hnh dng v mu sc ca mi i
tng c th c m t ring bit bng hai cch : hoc l bng dy cc pixel tng
ng hoc l bng tp cc i tng hnh hc c s nh on thng hay vng t a
gic, Sau , cc nh s c hin th bng cch np cc pixel vo vng m
khung.
Hnh 2.1 nh cnh tay robot c cu to t cc i tng ha c s
Vi cc nh c m t bng cc i tng hnh hc c s, cn phi c mt
qu trnh chuyn cc i tng ny v dng ma trn cc pixel trc. Qu trnh ny
cn c gi l qu trnh chuyn i bng dng qut (scan-converting). Bt k cng
c lp trnh ha no cng phi cung cp cc hm m t mt nh di dng cc i tng hnh hc c s hay cn gi l
cc i tng ha c s (output primitives) v cc hm cho php kt hp tp cc i tng c s to thnh i tng c
cu trc phc tp hn.
Mi i tng ha c s c m t thng qua d liu v ta v cc thuc tnh ca n, y chnh l thng tin cho
bit kiu cch m i tng c hin th. i tng ha c s n gin nht l im v on thng, ngoi ra cn c ng
trn, v cc ng conics, mt bc hai, cc mt v ng splines, cc vng t a gic, chui k t, cng c xem l cc
i tng ha c s gip xy dng cc nh phc tp. Chng ny s kho st cc thut ton hin th cc i tng
ha c s cho cc thit b hin th dng im.
Xt v mt bn cht, cc thut ton ny thc hin qu trnh chuyn i cc i tng ha c s c m t trong h
ta thc v dy cc pixel c ta nguyn ca thit b hin th. C hai yu cu t ra cho cc thut ton ny l :
- i tng c m t trong h ta thc l i tng lin tc, cn i tng
trong h ta thit b l i tng ri rc, do bn cht ca qu trnh chuyn
i ny chnh l s ri rc ha v nguyn ha cc i tng sao cho c th xc
nh cc im nguyn xp x i tng mt cch tt nht, thc nht. Ngha l i
tng hin th bng li nguyn trn thit b hin th phi c hnh dng tng t
nh i tng trong li ta thc v c v lin tc, lin nt. S lin tc trn
li nguyn ca thit b hin th c c do mt ngi khng th phn bit c
hai im qu gn nhau.
- Do cc i tng ha c s l thnh phn chnh cu trc cc i tng phc
tp nn cc thut ton hin th chng cn phi c ti u ha v mt tc , y chnh l im mu cht cho vic ra
i cc thut ton khc nhau.
Hnh 2.2 Qu trnh chuyn i mt on thng v dy cc pixel tng ng
4. CC I TNG HA C S
4.1. H ta th gii thc v h ta thit b
4.1.1. H ta th gii thc
H ta th gii thc (hay h ta thc) l h ta c dng m t cc i tng th gii thc. Mt trong cc h
ta thc thng c dng nht l h ta Descartes. Vi h ta ny, bt k mt im no trong mt phng cng
c m t bng mt cp ta (x, y) trong x, y e R. Gc ta l im O c ta (0, 0). Cc trc ta c chiu dng
c quy c nh hnh 2.3; Ox, Oy ln lt c gi l trc honh, trc tung; x l khong cch t im n trc honh hay
cn c gi l honh , y l khong cch t im n trc tung hay cn c gi l tung .
Cc ta th gii thc cho php ngi dng s dng bt k mt th nguyn (dimension) quy c nh foot, cm, mm,
km, inch, ... no v c th ln nh ty .
4.1.2. H ta thit b
H ta thit b l h ta c dng bi mt thit b xut c th no nh my in, mn hnh, ... c im chung
ca cc h ta thit b l :
- Cc im trong h ta thit b cng c m t bi mt cp ta (x, y), tuy nhin im khc vi h ta thc l
x, y e N. iu ny cho thy cc im trong h ta thc c nh ngha lin tc, cn cc im trong cc h ta
thit b l ri rc do tnh cht ca tp cc s t nhin.


12
O x
y
P
WC
(x,y)
x
y
O x
y
y
max
x
max
P
DC
(x,y)
(a) (b)
- Cc ta x, y ca h ta thit b khng th ln ty m u b gii hn trong mt khong no . Mt s thit b
ch cho x chy trong on[0,639], y chy trong on [0,479]. Khong
gii hn cc ta x, y l khc nhau i vi tng loi thit b khc
nhau.



Hnh 2.3 H ta thc (a) v h ta thit b (b)
H ta vi cc hng ca cc trc ta nh trn cn c gi l h
ta theo quy c bn tay phi.
Ngoi ra do cch t chc b nh nn thng thng cc h ta thit b thng da trn h ta theo quy c bn tay
tri.
Hnh 2.4 - H ta theo quy c bn tay phi (a) v quy c bn tay tri (b)
4.2. im
im l thnh phn c s c nh ngha trong mt h ta . i vi h ta hai chiu mi im c xc nh bi
cp ta (x, y).
Ngoi thng tin v ta , im cn c thuc tnh l mu sc.
4.3. on thng, ng gp khc
Mt ng thng c th xc nh nu bit hai im thuc n. Phng trnh ng thng i qua hai im (x
1
, y
1
) v (x
2
,
y
2
) c dng sau :
1 2
1 2
1
1
y y
x x
y y
x x


hay dng tng ng : ( )( ) ( )( )
1 2 1 1 2 1
x x y y y y x x =
Khai trin ta c dng : b mx y + = , trong :
1 1
1 2 1 2
, ,
mx y b
x x Dx y y Dy
Dx
Dy
m
=
= = =

y cn c gi l phng trnh on chn ca ng thng.
Nu khai trin di dng :
( ) ( ) 0
1 2 2 1 1 2 1 2
= + y x y x y x x x y y
v t ( )
2 1 1 2 1 2 1 2
, , y x y x C x x B y y A = = = th phng trnh ng thng s c dng 0 = + + C By Ax , dng
ny c gi l phng trnh tng qut ca ng thng.
Phng trnh tham s ca ng thng c dng cc ta x, y c m t qua mt thnh phn th ba l t. Dng ny rt
thun tin khi kho st cc on thng.
( )
( )

+ =
+ =
2 1
2 1
1
1
ty y t y
tx x t x

Nu | | 1 , 0 e t , ta c cc im (x,y) thuc v on thng gii hn bi hai im (x
1
, y
1
)
v (x
2
, y
2
), nu | | + e , t , ta s c ton b ng thng.
Mt on thng l mt ng thng b gii hn bi hai im u, cui.
Hnh 2.5 Dng tham s ca phng trnh ng thng
ng gp khc l tp cc on thng ni vi nhau mt cch tun t. Cc on thng ny khng nht thit phi to thnh
O x
y x
y
O
(a) (b)
(x
1
, y
1
)
(x
2
, y
2
)
t=0
t=1
t<0
t>1
13
mt hnh khp kn v cc on c th ct ln nhau. im giao ca hai on
thng c gi l nh. Cc ng gp khc c xc nh qua danh sch cc
nh, mi nh c cho bi cc cp ta ( )
i i
y x , .
Mt a gic l mt ng gp khc c im u v im cui trng
nhau.
Hnh 2.6 ng gp khc (a) v a gic (b)
Cc thuc tnh ca on thng bao gm :
- Mu sc
- rng ca nt v.
- Kiu nt v ca on thng : c th l mt trong cc dng nh hnh 2.7. Hu ht cc cng c ha u nh ngha tp
cc kiu nt v on thng c th dng v cho php ngi dng nh ngha kiu on thng ca mnh thng qua mt
mu (pattern) gm cc s 0, 1.
i vi ng gp khc, cc on thng trong cng mt ng gp khc th c cng mt thuc tnh.
Hnh 2.7 Mt s kiu nt v ca on thng
4.4. Vng t
Mt vng t bao gm ng bin v vng bn trong. ng bin l mt
ng khp kn v d nh a gic.
Cc thuc tnh ca vng t bao gm:
- Thuc tnh ca ng bin : chnh l cc thuc tnh nh thuc tnh
ca on thng.
- Thuc tnh ca vng bn trong : bao gm mu t v mu t.
Hnh 2.8 Vng t vi cc dng ng bin v mu t khc nhau
4.5. K t, chui k t
Cc chui k t gip hin th ni dung cc thng ip theo mt ngn ng no .
Cc thuc tnh ca k t bao gm :
- Mu sc ca cc k t.
- Font ch : b k t dng hin th; N nh ngha kiu, kch thc ca k t hin th. Hnh dng ca mi k t c th
c xc nh bi mt tp cc ng gp khc (trng hp font vector) hay l mu cc pixel (font bitmap). C nhiu
loi font khc nhau nh font bitmap, font truetype, font CHR, ...
- Kch thc : chiu cao v chiu rng ca k t. Cc k t nh ngha bng ng gp khc c th d dng thay i kch
thc hn l cc k t nh ngha bng mu cc pixel.
- Khong cch gia cc k t.
- S canh chnh (ging l) : canh tri (left text), canh phi (right text), canh
gia (center text), canh u nhau (justify text).
- Cch hin th tun t ca cc k t : c th l phi sang tri, t trn xung
di, t tri sang phi, t di ln trn.
- Hng ca k t.
Hnh 2.9 Dng bitmap v vector ca font k t B
5. CC THUT TON V NG
Gi s ta cc im nguyn sau khi xp x i tng thc ln lt l ( ) ,... 0 , , = i y x
i i
. y l cc im nguyn s
c hin th trn mn hnh.
Bi ton t ra l nu bit c ( )
i i
y x , l ta nguyn xc nh bc th i, im nguyn tip theo ( )
1 1
,
+ + i i
y x s
(a) (b)
14
c xc nh nh th no.
Nhn xt rng i tng hin th trn li nguyn c lin nt, cc im m
( )
1 1
,
+ + i i
y x c th chn ch l mt trong tm im c nh s t 1 n 8 trong hnh 2.10
(im en chnh l ( )
i i
y x , ).Hay ni cch khc : ( ) ( ) 1 , 1 ,
1 1
=
+ + i i i i
y x y x .
Dng iu ca ng s cho ta gi khi chn mt trong tm im trn. Cch chn cc
im nh th no s ty thuc vo tng thut ton trn c s xem xt ti vn ti u tc .
Hnh 2.10 Cc im ( )
1 1
,
+ + i i
y x c th chn bc (i+1)
5.1. Thut ton v on thng
Xt on thng c h s gc 1 0 < < m v 0 > Dx .
Vi cc on thng dng ny, nu ( )
i i
y x , l im xc nh c bc th i
(im mu en) th im cn chn ( )
1 1
,
+ + i i
y x bc th (i+1) s l mt trong hai trng
hp nh hnh v sau :
Hnh 2.11 Cc im ( )
1 1
,
+ + i i
y x chn bc (i+1) cho trng hp
on thng c h s gc 0<m<1
Nh vy :
{ }

+ e
+ =
+
+
1 ,
1
1
1
i i i
i i
y y y
x x

Vn cn li l cch chn mt trong hai im trn nh th no c th ti u v mt tc .
5.1.1. Thut ton DDA (Digital Differential Analyzer)
Vi thut ton DDA, vic quyt nh chn
1 + i
y l
i
y hay 1 +
i
y , da vo phng trnh
ca on thng b mx y + = . Ngha l, ta s tnh ta ca im ( ) y x
i
, 1 + thuc v on
thng thc. Tip ,
1 + i
y s l gi tr sau khi lm trn gi tr tung y.
Nh vy :
( )
( ) y Round y
b x m y
i
i
=
+ + =
+1
1

Hnh 2.12 Minh ha thut ton DDA
Nu tnh trc tip gi tr thc y mi bc t phng trnh
b mx y + = th phi cn mt php ton nhn v mt php ton cng s
thc. ci thin tc , ngi ta tnh gi tr thc ca y mi bc theo
cch sau kh php tnh nhn trn s thc :
Nhn xt rng : ( ) b x m b mx y
i i sau
+ + = + =
+
1
1

b mx y
i trc
+ =
m y y
trc sau
+ =












Lu thut ton DDA v on thng qua hai im (x
1
, y
1
) v (x
2
,y
2
)
1
2 3
8 7 6
5
4
(x
i
+1, y
i
+1)
1
2
(x
i
+1, y
i
)
x
i
y
i
(x
i
, y
i
)
(x
i
+1, y)
(x
i
+1, Round(y))
Begin
m=Dy/Dx;
x=x1;
y=y1;
putpixel(x, Round(y), c);
x<x2
Yes
No
x=x+1;
y=y+m;
putpixel(x, Round(y),c);
End
15
Ci t minh ha thut ton DDA
#define Round(a) int(a+0.5)
int Color = GREEN;

void LineDDA (int x1, int y1, int x2, int y2)
{
int x = x1;
float y = y1;
float m = float(y2-y1)/(x2-x1);

putpixel(x, Round(y), Color);
for(int i=x1; i<x2; i++)
{
x++;
y +=m;
putpixel(x, Round(y), Color);
}

} // LineDDA
Nhn xt
- Vic s dng cng thc m y y
trc sau
+ = tnh gi tr y ti mi bc gip cho thut ton DDA nhanh hn hn
so vi cch tnh y t phng trnh b mx y + = do kh c php nhn trn s thc. Tuy nhin, vic cng dn gi tr
thc m vo y c th s tch ly sai s lm cho hm lm trn c kt qu sai dn ti vic xc nh v tr ca im v ra b
chch hng so vi ng thng thc. iu ny ch xy ra khi v on thng kh di.
- Tuy kh c php nhn s thc nhng thut ton DDA vn cn
b hn ch v mt tc do vn cn php ton cng s thc v lm
trn. C th khc phc thao tc cng s thc m v lm trn trong
thut ton bng cch nhn xt
Dx
Dy
m = vi Dy, Dx l cc s nguyn.
5.1.2. Thut ton Bresenham
Thut ton Bresenham a ra cch chn
1 + i
y l
i
y hay 1 +
i
y theo
mt hng khc sao cho c th ti u ha v mt tc so vi thut ton
DDA. Vn mu cht y l lm th no hn ch ti a cc php ton
trn s thc trong thut ton.
Hnh 2.13 Minh ha thut ton Bresenham
Gi ( ) y x
i
, 1 + l im thuc on thng. Ta c: ( ) b x m y
i
+ + = 1 .
t
( ) y y d
y y d
i
i
+ =
=
1
2
1

Xt tt c cc v tr tng i ca y so vi
i
y v 1 +
i
y , vic chn im ( )
1 1
,
+ + i i
y x l S hay P ph thuc vo vic so
snh d
1
v d
2
hay du ca
2 1
d d :
- Nu 0
2 1
< d d , ta s chn im S, tc l
i i
y y =
+1
.
- Ngc li, nu 0
2 1
> d d , ta s chn im P, tc l 1
1
+ =
+ i i
y y .
Xt ( ) ( ) 1 2 2
2 1
= =
i i
y y Dx d d Dx p
( ) ( ) | | 1 2 1 2 + + =
i i i
y b x m Dx p
(x
i
+1, y)
P
S
x
i
x
i
+1
y
i
y
i
+1
y
d
1
d
2
16
Thay
Dx
Dy
m = vo phng trnh trn ta c : c Dxy Dyx p
i i i
+ = 2 2 , vi ( )Dx b Dy c 1 2 2 + = .
Nhn xt rng do 0 > Dx nn du ca biu thc
2 1
d d cng chnh l du ca
i
p . Hay ni mt cch khc, nu ti
bc th i ta xc nh c du ca
i
p th xem nh ta xc nh c im cn chn bc (i+1). Vn cn li l lm th
no tnh c
i
p ti mi bc tht nhanh.
Ta c :
( ) ( ) c Dxy Dyx c Dxy Dyx p p
i i i i i i
+ + =
+ + +
2 2 2 2
1 1 1

( ) ( )
i i i i i i
y y Dx x x Dy p p =
+ + + 1 1 1
2 2
( ) 1 do , 2 2
1 1 1
+ = =
+ + + i i i i i i
x x y y Dx Dy p p
T y ta c th suy ra cch tnh
1 + i
p t
i
p nh sau :
- Nu 0 <
i
p th Dy p p
i i
2
1
+ =
+
do ta chn
i i
y y =
+1
.
- Ngc li, nu 0 >
i
p , th Dx Dy p p
i i
2 2
1
+ =
+
, do ta chn 1
1
+ =
+ i i
y y .
Gi tr
0
p c tnh t im v u tin ( )
0 0
, y x theo cng thc :
( )Dx b Dy Dxy Dyx c Dxy Dyx p 1 2 2 2 2 2 2
0 0 0 0 0
+ = + =
Do ( )
0 0
, y x l im nguyn thuc v on thng nn ta c b x
Dx
Dy
b mx y + = + =
0 0 0
. Th vo phng trnh trn ta
suy ra : Dx Dy p = 2
0
.
Lu thut ton Bresenham
Begin
p=2Dy-Dx;
Const1=2Dy;
Const2=2(Dy-Dx);
x=x1;
y=y1;
putpixel(x, y, c);
x<x2
Yes
No
p<0
Yes
p=p+Const1;
No
p=p+Const2;
y=y+1
x=x+1;
putpixel(x,y,c);
End
17
Ci t minh ha thut ton Bresenham
void LineBres (int x1, int y1, int x2, int y2)
{
int Dx, Dy, p, Const1, Const2;
int x, y;

Dx = x2 - x1;
Dy = y2 - y1;
p = 2*Dy - Dx; // Dy <<1 - Dx
Const1 = 2*Dy; // Dy <<1
Const2 = 2*(Dy-Dx); // (Dy-Dx) <<1
x = x1;
y = y1;
putpixel(x, y, Color);
for(i=x1; i<x2; i++)
{
if (p<0)
p += Const1;
else
{
p += Const2;
y++;
}
x++;
putpixel(x, y, Color);
}
} // LineBres
Nhn xt
- Thut ton Bresenham ch lm vic trn s nguyn v cc thao tc trn s nguyn ch l php cng v php dch bit
(php nhn 2) iu ny l mt ci tin lm tng tc ng k so vi thut ton DDA. tng chnh ca thut ton
nm ch xt du
i
p quyt nh im k tip, v s dng cng thc truy hi
i i
p p
+1
tnh
i
p bng cc php
ton n gin trn s nguyn.
- Thut ton ny cho kt qu tng t nh thut ton DDA.
5.1.3. Thut ton MidPoint
Thut ton MidPoint a ra cch chn
1 + i
y l
i
y hay 1 +
i
y bng cch so snh
im thc Q( ) y x
i
, 1 + vi im MidPoint l trung im ca S v P. Ta c :
- Nu im Q nm di im MidPoint, ta chn S.
- Ngc li nu im Q nm trn im MidPoint ta chn P.
Hnh 2.14 Minh ha thut ton MidPoint
Ta c dng tng qut ca phng trnh ng thng :
0 = + + C By Ax
vi ( )
2 1 1 2 1 2 1 2
, , y x y x C x x B y y A = = =
t ( ) C By Ax y x F + + = , , ta c nhn xt :
Q(x
i
+1, y)
P
S
x
i
x
i
+1
y
i
y
i
+1
MidPoint
18
( )
( )
( )
( )

>
=
<
thang. ng di pha nam y x, neu , 0
thang ng ve thuoc y x, neu , 0
thang ng tren pha nam y x, neu , 0
, y x F
Lc ny vic chn cc im S, P trn c a v vic xt du ca ( ) |
.
|

\
|
+ + = =
2
1
, 1 2 MidPoint 2
i i i
y x F F p .
- Nu 0 <
i
p , im MidPoint nm pha trn on thng. Lc ny im thc Q nm di im MidPoint nn ta chn S,
tc l
i i
y y =
+1
.
- Ngc li, nu 0 >
i
p , im MidPoint nm pha di on thng. Lc ny im thc Q nm trn im MidPoint nn
ta chn P, tc l 1
1
+ =
+ i i
y y .
Mt khc :
|
.
|

\
|
+ + |
.
|

\
|
+ + =
+ + +
2
1
, 1 2
2
1
, 1 2
1 1 1 i i i i i i
y x F y x F p p
( ) ( )
(

+ |
.
|

\
|
+ + +
(

+ |
.
|

\
|
+ + + =
+ + +
C y B x A C y B x A p p
i i i i i i
2
1
1 2
2
1
1 2
1 1 1
( ) ( )
i i i i i i
y y Dx Dy y y B A p p = + =
+ + + 1 1 1
2 2 2 2
Vy :
- Dy p p
i i
2
1
+ =
+
, nu 0 <
i
p do ta chn
i i
y y =
+1
.
- Dx Dy p p
i i
2 2
1
+ =
+
, nu 0 >
i
p do ta chn 1
1
+ =
+ i i
y y .
Ta tnh gi tr
0
p

ng vi im ban u ( )
0 0
, y x , vi nhn xt rng ( )
0 0
, y x l im thuc v on thng, tc l
c : 0
0 0
= + + C By Ax
( )
(

+ |
.
|

\
|
+ + + = |
.
|

\
|
+ + = C y B x A y x F p
2
1
1 2
2
1
, 1 2
0 0 0 0 0

( ) Dx Dy B A B A C By Ax p = + = + + + + = 2 2 2 2
0 0 0

Nhn xt rng thut ton MidPoint cho kt qu tng t nh thut ton Bresenham.
5.2. Thut ton v ng trn
Phng trnh ng trn c tm l gc ta , bn knh R l :
2 2 2
R y x = + . T phng trnh ny ta c th a v
dng
2 2
x R y = . v cc ng trn c tm ( )
C C
y x , bt k, n gin ch cn tnh tin cc im sau khi v xong
ng trn c tm l gc ta theo vector tnh tin ( )
C C
y x , .
5.2.1. Mt s cch tip cn v ng trn
Do tnh i xng nn v ton b ng trn, ta ch cn v cung ng trn sau ly i xng xc nh cc
im cn li.
Mt trong nhng cch n gin nht l cho x chy t 0 n R, sau tnh y t cng thc trn (ch ly gi tr dng) ri
lm trn xc nh gi tr nguyn tng ng. Cch lm ny khng hiu qu do gp phi cc php ton nhn v ly cn lm
hn ch tc , ngoi ra ng trn v ra theo cch ny c th khng lin nt (tr trng hp R ln) khi x gn R (do ch c
mt gi tr y duy nht cho mt gi tr x). Chng ta c th khc phc iu ny bng cch iu chnh i tng thay i l x (ri
tnh y theo x) hay y (ri tnh x theo y) ty vo gi tr tuyt i ca h s gc ng trn l ln hn hay nh hn 1, nhng cch
lm ny i hi thm cc php tnh ton v kim tra nn lm cho thut ton phc tp thm. (Xem hnh 2.15)
Mt cch tip cn khc l v cc im ( ) ( ) ( ), sin , cos u u R R vi u chy t 0
0
n
90
0
. Cch ny s khc phc hn ch ng khng lin nt ca thut ton trn, tuy nhin
im hn ch chnh ca thut ton ny l chn bc nhy cho u nh th no cho ph
hp khi bn knh thay i.
Hnh 2.15 ng trn v ra khng lin nt theo cch v trn
5.2.2. Thut ton MidPoint
Do tnh i xng ca ng trn (C) nn ta ch cn v cung (C
1/8
) l cung 1/8 ng
(0,17)
(17,0)
19
trn, sau ly i xng. Cung (C
1/8
) c m t nh sau (cung ca phn t xm
trong hnh v) :

s s
s s
R y R
R x
2
2
2
2
0

Hnh 2.16 Cc v tr i xng trn ng trn (C) tng ng vi (x,y)
Nh vy nu c (x, y) e (C
1/8
) th cc im : (y, x), (y,-x), (x,-y), (-x,-y), (-y,-
x), (-y,x), (-x,y) s thuc (C).
Chn im bt u v l im (0,R). Da vo hnh v, nu ( )
i i
y x , l
im nguyn tm c bc th i, th im ( )
1 1
,
+ + i i
y x bc th (i+1) l
s la chn gia S v P.
Nh vy :
{ }

e
+ =
+
+
1 ,
1
1
1
i i i
i i
y y y
x x

Tng t nh thut ton MidPoint v on thng, vic quyt nh chn mt
trong hai im S v P s c thc hin thng qua vic xt du ca mt hm no
ti im MidPoint l im nm gia chng.
Hnh 2.17 Thut ton MidPoint v ng trn
t ( )
2 2 2
, R y x y x F + = , ta c :
( )
( )
( )
( )

>
=
<
tron. ng ngoai nam y x, neu , 0
tron ng tren nam y x, neu , 0
tron ng trong nam y x, neu , 0
, y x F
Xt ( ) |
.
|

\
|
+ = =
2
1
, 1 MidPoint
i i i
y x F F p . Ta c :
- Nu 0 <
i
p , im MidPoint nm trong ng trn. Lc ny im thc Q gn S hn nn ta chn S, tc l
i i
y y =
+1
.
- Ngc li, nu 0 >
i
p , im MidPoint nm ngoi ng trn. Lc ny im thc Q gn P hn nn ta chn P, tc
l 1
1
=
+ i i
y y .
Mt khc :
|
.
|

\
|
+ |
.
|

\
|
+ =
+ + +
2
1
, 1
2
1
, 1
1 1 1 i i i i i i
y x F y x F p p
( ) ( )
(
(

|
.
|

\
|
+ +
(
(

|
.
|

\
|
+ + =
+ + +
2
2
2 2
2
1
2
1 1
2
1
1
2
1
1 R y x R y x p p
i i i i i i

( ) ( )
(
(

|
.
|

\
|
+ +
(
(

|
.
|

\
|
+ + =
+ +
2
2
2 2
2
1
2
1
2
1
1
2
1
2 R y x R y x p p
i i i i i i

( ) ( )
i i i i i i i
y y y y x p p + + =
+ + + 1
2 2
1 1
3 2
Vy :
- 3 2
1
+ + =
+ i i i
x p p , nu 0 <
i
p do ta chn
i i
y y =
+1
.
- 5 2 2
1
+ + =
+ i i i i
y x p p , nu 0 >
i
p do ta chn 1
1
=
+ i i
y y .
Ta tnh gi tr
0
p

ng vi im ban u ( ) ( ) R y x , 0 ,
0 0
= .
R R F y x F p = |
.
|

\
|
= |
.
|

\
|
+ =
4
5
2
1
, 1
2
1
, 1
0 0 0

2
R
(x,y) (-x,y)
(y,x) (-y,x)
(x,-y) (-x,-y)
(-y,-x) (y,-x)
S
P
MidPoint
y
i
y
i
-1
x
i
x
i
+1
Q(x
i
+1, y)
20
Lu thut ton MidPoint v ng trn
Ci t minh ha thut ton MidPoint v ng trn
// Ve 8 diem doi xung
void Put8Pixel(int x, int y)
{

putpixel(x, y, Color);
putpixel(y, x, Color);
putpixel(y, -x, Color);
putpixel(x, -y, Color);
putpixel(-x, -y, Color);
putpixel(-y, -x, Color);
putpixel(-y, x, Color);
putpixel(-x, y, Color);

} // Put8Pixel

void CircleMidPoint (int R)
Begin
p=5/4-R;
x=0;
y=R;
Put8Pixel(x, y, c);
x<y
Yes
No
p<0
Yes
p=p+2*x+3;
No
p=p+2(x-y)+5;
y=y-1
x=x+1;
Put8Pixel(x,y,c);
End
21
{
int x, y;

x = 0;
y = R;
Put8Pixel(x, y);
p = 1 - R; // 5/4-R
while (x < y)
{
if (p < 0)
p += 2*x + 3;
else
{
p += 2*(x -y) + 5;
y--;
}

x++;
Put8Pixel(x, y);
}

} // CircleMidPoint
5.3. Thut ton v cc ng conics v mt s ng cong khc
Phng trnh tng qut ca cc ng conics c dng : 0
2 2
= + + + + + F Ey Dx Cy Bxy Ax . Gi tr ca cc hng s
A, B, C, D, E, F s quyt nh dng ca ng conics, c th l nu:

>
=
= = <

hyperbol. dang , 0
parabol dang , 0
ellipse hay ) 0 B va C A (neu tron ng dang , 0
4
2
AC B
Ta s p dng tng ca thut ton MidPoint v cc ng conics v mt s ng cong khc, theo cc bc tun t
sau:
Bc 1 : Da vo dng iu v phng trnh ng cong, xem th c th rt gn phn ng cong cn v hay khng.
iu ny s lm tng tc v so vi vic phi v ton b ng cong. Mt trong nhng cch n gin nht l da vo tnh
i xng, tnh cht ca hm chn, hm l, .
Bc 2 : Tnh o hm t phn thnh cc vng v :
- Nu 1 ) ( ' 0 s s x f th
{ }

+ e
+ =
+
+
(*) 1 ,
1
1
1
i i i
i i
y y y
x x

- Nu 0 ) ( ' 1 s s x f th
{ }

e
+ =
+
+
(*) 1 ,
1
1
1
i i i
i i
y y y
x x

- Nu 1 ) ( ' > x f th
{ }

+ e
+ =
+
+
(*) 1 ,
1
1
1
i i i
i i
x x x
y y

- Nu 1 ) ( ' < x f th
{ }

e
+ =
+
+
(*) 1 ,
1
1
1
i i i
i i
x x x
y y

y l bc quan trng v vi vic xc nh i tng x hay y bin thin theo dng iu ca ng cong s m bo
ng sau khi c v ra s lin nt, khng b h.
22
Bc 3 : Xc nh cng thc ca
i
p cho tng trng hp quyt nh (*) da trn du ca
i
p .
i
p thng l hm c
xy dng t phng trnh ng cong cho 0 =
i
p nu ( )
i i
y x , thuc v ng cong. Vic chn
i
p cn phi ch sao cho
thao tc tnh
i
p sau ny hn ch php ton trn s thc.
Bc 4 : Tm mi lin quan ca
1 + i
p v
i
p bng cch xt hiu
i i
p p
+1
.
Bc 5 : Tnh
0
p v hon chnh thut ton.
6. CC THUT TON T MU
Cc vng t l mt trong nhng i tng ha c s c hu ht cc cng c lp trnh ha h tr. C hai dng
vng t thng gp l : t bng mt mu thun nht (solid fill) hay t theo mt mu t (fill-pattern) no .
Mt vng t thng c xc nh bi mt ng khp kn no gi l ng bin. Mt trong nhng dng ng bin
n gin nht l a gic.
t mu mt vng t, ngi ta thng chia lm hai cng on : cng on th nht l xc nh cc im no t v
cng on cn li n gin hn l quyt nh t cc im bng gi tr mu no. Cng on th hai ch thc s phc tp
nu ta t theo mt mu t no khng phi l t thun mt mu.
C hai cch tip cn chnh t mu mt vng t i vi thit b hin th dng im l : t theo dng qut (scan-line
fill) v t da theo ng bin (boundary fill).
Phng php t theo dng qut s xc nh cc phn giao ca cc dng qut k tip nhau vi ng bin ca vng t, sau
s t mu cc im thuc v phn giao ny. Cch tip cn ny thng c dng t mu cc a gic, ng trn, ellipse,
v mt s ng cong n gin khc. Phng php t da theo ng bin s bt u t mt im bn trong vng t v t
loang dn ra cho ti khi ta gp cc im bin. Cch tip cn ny thng c dng cho cc vng t c dng ng bin
phc tp hn.
6.1. Thut ton t mu da theo dng qut
Gi s vng t c cho bi mt a gic N nh : ( ) 1 ,... 0 , , = N i y x P
i i i
.
a gic ny c th l a gic li, a gic lm, v c a gic t ct,
Hnh 2.18 sau minh ha tng chnh ca thut ton. Vi mi dng qut, ta
s xc nh phn giao ca a gic v dng qut ri t mu cc pixel thuc on
giao . xc nh cc on giao ta tin hnh vic tm giao im ca dng qut
vi cc cnh ca a gic, sau cc giao im ny s c sp theo th t tng
dn ca honh giao im. Cc on giao chnh l cc on thng c gii hn
bi tng cp giao im mt, v d nh (0,1), (2,3), .
Hnh 2.18 Thut ton scan-line vi mt dng qut no
Ta c th tm bt cc bc chnh ca thut ton :
- Tm
top
y ,
bottom
y ln lt l gi tr ln nht, nh nht ca tp cc tung ca cc nh ca a gic cho
( ) { } P y x y y
i i i top
e = , , max , ( ) { } P y x y y
i i i bottom
e = , , min .
- ng vi mi dng qut k y = , vi k thay i t
bottom
y n
top
y , lp :
+ Tm tt c cc honh giao im ca dng qut k y = vi cc cnh ca a gic.
+ Sp xp cc honh giao im theo th t tng dn : x
0
, x
1
,
+ T mu cc on thng trn ng thng k y = ln lt c gii hn bi cc cp
( ) ( ) ( )
1 2 2 3 2 1 0
, ,..., , , ,
+ k k
x x x x x x .
Nu ch dng mc ny v chuyn sang ci t, chng ta s gp mt s vn sau :
- Nhn xt rng, ng vi mi dng qut, khng phi lc no tt c cc cnh ca a gic cng tham gia ct dng qut. Do
ci thin tc cn phi c mt cch no hn ch c s cnh cn tm giao im ng vi mi dng qut.
- Vic tm giao im ca cnh a gic vi mi dng qut s gp cc php ton phc tp nh nhn, chia, trn s thc
nu ta dng cch gii h phng trnh tm giao im. iu ny s lm gim tc thut ton khi phi lp i lp li
nhiu ln thao tc ny khi dng qut qut qua a gic.
- Nu s giao im tm c gia cc cnh a gic v dng qut l l th vic nhm tng cp giao im k tip nhau
hnh thnh cc on t c th s khng chnh xc. iu ny ch xy ra khi dng qut i ngang qua cc nh ca a
gic. Nu tnh s giao im ti nh dng qut i ngang qua l hai th c th s cho kt qu t khng chnh xc nh
trong trng hp ca hnh 2.19. Ngoi ra, vic tm giao im ca dng qut vi cc cnh nm ngang l mt trng
hp c bit cn phi c cch x l thch hp.
O
y
0 1 2 3
x
y
bottom
y
top
23
gii quyt cc vn trn, cn phi xy dng mt cu trc d liu
v thut ton thch hp i vi chng.
Hnh 2.19 Dng qut y=k2 i ngang qua nh c th s cho kt qu t khng chnh xc so vi
dng qut y=k1
6.1.1. Danh sch cc cnh kch hot AET (Active Edge Table)
hn ch s cnh cn tm giao im ng vi mi dng qut, ta xy
dng mt s cu trc d liu nh sau :
Cnh a gic (EDGE)
Mi cnh ca a gic c xy dng t hai nh k nhau ( )
i i i
y x P , v ( )
1 1 1
,
+ + + i i i
y x P gm cc thng tin sau :
-
Min
y : gi tr tung nh nht trong 2 nh ca cnh.
- xIntersect : honh giao im ca cnh vi dng qut hin ang xt.
- DxPerScan : gi tr 1/m (m l h s gc ca cnh).
- deltaY : khong cch t dng qut hin hnh ti nh
Max
y .
Danh sch cc cnh kch hot AET
Danh sch ny dng lu cc tp cnh ca a gic c th ct ng vi dng qut hin hnh v tp cc im giao tng
ng. N c mt s c im :
- Cc cnh trong danh sch c sp theo th t tng dn ca cc honh giao im c th t mu cc on giao
mt cch d dng.
- Thay i ng vi mi dng qut ang xt, do danh sch ny s c cp nht lin tc trong qu trnh thc hin
thut ton. h tr cho thao tc ny, u tin ngi ta s t chc mt danh sch cha ton b cc cnh ca a gic
gi l ET (Edge Table) c sp theo th t tng dn ca
Min
y , ri sau mi ln dng qut thay i s di chuyn cc
cnh trong ET tha iu kin sang AET.
- Mt dng qut k y = ch ct mt cnh ca a gic khi v ch khi

>
>
0 deltaY
y k
Min
. Chnh v vy m vi cch t chc ca ET (sp theo th
t tng dn ca
Min
y ) iu kin chuyn cc cnh t ET sang AET
s l
Min
y k > ; v iu kin loi mt cnh ra khi AET l
0 s deltaY .
Hnh 2.20 Thng tin ca mt cnh
6.1.2. Cng thc tm giao im nhanh
Nu gi
k
x ,
1 + k
x ln lt l cc honh giao im ca mt cnh no vi cc dng qut k y = v 1 + = k y , ta c :
( ) ( )
m
k k
m
x x
k k
1
1
1
1
= + =
+
hay
m
x x
k k
1
1
+ =
+
.
Nh vy nu lu honh giao im ng vi dng qut trc li, cng vi h s gc
ca cnh, ta c th d dng xc nh honh giao im ng vi dng qut k tip mt
cch n gin theo cng thc trn. iu ny rt gn ng k thao tc tm giao im ca
cnh ng vi dng qut. Chnh v vy m trong thng tin ca mt cnh chng ta c hai
bin DxPerScan v xIntersect.
Hnh 2.21 Cng thc tm giao im nhanh
6.1.3. Gii quyt trng hp dng qut i ngang qua nh
Ngi ta a ra quy tc sau tnh s giao im khi dng qut i ngang qua nh :
- Tnh mt giao im nu chiu ca hai cnh k ca nh c xu hng tng hay gim.
- Tnh hai giao im nu chiu ca hai cnh k ca nh c xu hng thay i, ngha l tng-gim hay gim-tng.
y=k
1
y=k
2
0 1,2
3 4
0
1,2 3
yMin
xIntersect
y=k
deltaY
y=k+1
y=k
x
k
x
k+1
24
Hnh 2.22 Quy tc tnh mt giao im (a) v hai giao im (b)
Khi ci t khi phi xt iu kin ny cho phc tp, khi xy dng d liu cho mi cnh trc khi a vo ET, ngi
ta s x l cc cnh c nh tnh hai giao im bng cch loi i mt pixel trn cng ca mt trong hai cnh nh hnh 2.23 :
Hnh 2.23 Cnh
i i
P P
1
c lu trong ET ch l
*
1 i i
P P


Ci t minh ha sau s dng chung mt danh sch EDGELIST cho c ET v AET. AET c qun l nh vo hai con
tr FirstId v LastId.
Ci t minh ha thut ton t mu scan-line
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
#include <dos.h>
#define MAXVERTEX 20
#define MAXEDGE 20
#define TRUE 1
#define FALSE 0

typedef struct {
int x;
int y;
}POINT;

typedef struct{
int NumVertex;
POINT aVertex[MAXVERTEX];
}POLYGON;

typedef struct {
int NumPt;
float xPt[MAXEDGE];
}XINTERSECT;

typedef struct
{
int yMin; // Gia tri y nho nhat cua 2 dinh
(a) (b)
P
i
P
i-1
P
i+1
P
i
P
i-1
P
i+1
P
i-1
P
i-1
P
i+1
P
i+1
P
i
P
i
y=k
P
i-1
P
i
P
i+1
y=k-1
P
i+1
y=k
P
i-1
P
i
P
i+1
y=k-1
P
i+1
P
i
*
P
i
*
P
i-1
P
i-1
25
float xIntersect; // Hoanh do giao diem cua canh & dong quet
float dxPerScan; // Gia tri 1/m
int DeltaY;
}EDGE;

typedef struct
{
int NumEdge;
EDGE aEdge[MAXEDGE];
}EDGELIST;

/*
Dat 1 canh vao danh sach canh.
Cac canh duoc sap theo thu tu giam dan cua yMin (yMin la gia tri y lon nhat cua 2 dinh 1 canh)
Xu li luon truong hop dong quet di ngang qua dinh ma tai do chi tinh 1 diem giao
*/
void PutEdgeInList(EDGELIST &EdgeList, POINT p1, POINT p2,
int NextY)
{
EDGE EdgeTmp;

EdgeTmp.dxPerScan = float(p2.x-p1.x)/(p2.y-p1.y); // 1/m
if(p1.y < p2.y)
{
/*
Truong hop dong quet di ngang qua dinh la giao diem
cua 2 canh co huong y cung tang
*/
if(p2.y < NextY)
{
p2.y--;
p2.x -= EdgeTmp.dxPerScan;
}
EdgeTmp.yMin = p1.y;
EdgeTmp.xIntersect= p1.x;
EdgeTmp.DeltaY = abs(p2.y-p1.y)+1;
} // if
else
{
/*
Truong hop dong quet di ngang qua dinh la giao diem cua 2 canh co huong y cung giam
*/
if(p2.y > NextY)
{
p2.y++;
p2.x+= EdgeTmp.dxPerScan;
26
}
EdgeTmp.yMin = p2.y;
EdgeTmp.xIntersect= p2.x;
EdgeTmp.DeltaY = abs(p2.y-p1.y)+1;
}//else
// xac dinh vi tri chen
int j = EdgeList.NumEdge;
while((j>0) && (EdgeList.aEdge[j-1].yMin>EdgeTmp.yMin))
{
EdgeList.aEdge[j] = EdgeList.aEdge[j-1];
j--;
}
// tien hanh chen dinh moi vao canh
EdgeList.NumEdge++;
EdgeList.aEdge[j] = EdgeTmp;
} // PutEdgeInList
/*
Tim dinh ke tiep sao cho khong nam tren cung duong thang voi dinh dang xet
*/
int FindNextY(POLYGON P, int id)
{
int j = (id+1)%P.NumVertex;
while((j<P.NumVertex)&&(P.aVertex[id].y == P.aVertex[j].y))
j++;
if(j<P.NumVertex)
return (P.aVertex[j].y);
return 0;
} // FindNextY

// Tao danh sach cac canh tu polygon da cho
void MakeSortedEdge(POLYGON P, EDGELIST &EdgeList,
int &TopScan, int &BottomScan)
{
TopScan = BottomScan = P.aVertex[0].y;
EdgeList.NumEdge = 0;
for(int i=0; i<P.NumVertex; i++)
{
// Truong hop canh khong phai la canh nam ngang if(P.aVertex[i].y != P.aVertex[i+1].y)
PutEdgeInList(EdgeList, P.aVertex[i], P.aVertex[i+1], FindNextY(P, i+1));
//else Xu li truong hop canh nam ngang
if(P.aVertex[i+1].y > TopScan)
TopScan = P.aVertex[i+1].y;
}
BottomScan = EdgeList.aEdge[0].yMin;
} //MakeSortedEdge
// Cap nhat lai hai con tro FirstId, LastId cho biet danhsach cac canh active
27
void UpdateActiveEdgeList(EDGELIST EdgeList, int yScan, int &FirstId, int &LastId)
{
while((FirstId<EdgeList.NumEdge-1) &&(EdgeList.aEdge[FirstId].DeltaY == 0))
FirstId++;
while((LastId<EdgeList.NumEdge-1) &&(EdgeList.aEdge[LastId+1].yMin<=yScan))
LastId++;
} // UpdateActiveEdgeList
void SortOnX(XINTERSECT & aIntersectPt)
{
for(int i=0; i<aIntersectPt.NumPt-1; i++)
{
int Min = i, t;
for(int j=i+1; j<aIntersectPt.NumPt; j++)
if( aIntersectPt.xPt[j] < aIntersectPt.xPt[Min])
Min = j;
t = aIntersectPt.xPt[Min];
aIntersectPt.xPt[Min] = aIntersectPt.xPt[i];
aIntersectPt.xPt[i] = t;
}
} // SortOnX
/*
Tim cac hoanh do giao diem cua cac canh cua da giac voi dong quet yScan. Sau khi tim cac hoanh do giao diem, ta sap xep lai
theo chieu tang cua x
*/
void FindXIntersection(EDGELIST EdgeList, XINTERSECT &aIntersectPt, int FirstId, int LastId)
{
aIntersectPt.NumPt = 0;
for(int i=FirstId; i<=LastId; i++)
{
if(EdgeList.aEdge[i].DeltaY>0)
{
aIntersectPt.xPt[aIntersectPt.NumPt] = EdgeList.aEdge[i].xIntersect;
aIntersectPt.NumPt++;
}
}
SortOnX(aIntersectPt);
} //FindXIntersection
#define Round(x) int(x+0.5)
void FillLine(XINTERSECT aIntersectPt, int yScan)
{
for(int i=0; i<aIntersectPt.NumPt; i+=2)
line(Round(aIntersectPt.xPt[i]), yScan, Round(aIntersectPt.xPt[i+1]), yScan);
} // FillLine

void UpdateEdgeList(EDGELIST &EdgeList,int FirstId,int LastId)
{
28
for(int i=FirstId; i<=LastId; i++)
{
if(EdgeList.aEdge[i].DeltaY>0)
{
EdgeList.aEdge[i].DeltaY--;
EdgeList.aEdge[i].xIntersect += EdgeList.aEdge[i].dxPerScan;
}
}
} //FillLine
void ScanLineFill(POLYGON P)
{
EDGELIST EdgeList;
XINTERSECT aIntersectPt;
int TopScan, BottomScan, FirstId, LastId;

MakeSortedEdge(P, EdgeList, TopScan, BottomScan);
FirstId = LastId = 0;
for(int i=BottomScan; i<=TopScan; i++)
{
// Cap nhat lai danh sach cac canh active - tuc la cac canh cat dong quet i
UpdateActiveEdgeList(EdgeList, i, FirstId, LastId);
// Tim cac hoanh do giao diem cua dong quet voi cac canh cua da giac va sap xep lai cac hoanh do giao diem truc tiep tren
EdgeList
FindXIntersection(EdgeList, aIntersectPt, FirstId, LastId);
FillLine(aIntersectPt, i);
UpdateEdgeList(EdgeList, FirstId, LastId);
}
} //ScanLineFill
29
Lu thut ton t mu theo dng qut
6.2. Thut ton t mu da theo ng bin
Khc vi thut ton t mu da theo dng qut, ng bin ca vng t c xc nh
bi tp cc nh ca mt a gic, ng bin trong thut ton c m t bng mt gi tr
duy nht l mu ca tt c cc im thuc v ng bin.
Bt u t im nm bn trong vng t, ta s kim tra cc im ln cn ca n c
t mu hay c phi l im bin hay khng, nu khng phi l im t v khng phi l
im bin ta s t mu n. Qu trnh ny c lp li cho ti khi no khng cn t c
im no na th dng. Bng cch ny, ton b cc im thuc vng t c kim tra v s
c t ht.
Hnh 2.24 Thut ton t mu da theo ng bin
C hai quan im v cch t ny, l dng bn im ln cn hay tm im ln cn
i vi im ang xt c t bng mu trng (xem hnh 2.25).

Hnh 2.25 4 im ln cn (a) v 8 im ln cn (b)
on chng trnh sau minh ha ci t thut ton t mu da theo ng bin s
dng phng php t 4 im ln cn.
Ci t minh ha thut ton t mu da theo ng bin
void BoundaryFill(int x, int y, int FillColor, int BoundaryColor)
{
(a) (b)
Begin
fcc ccnh cch lcl cc ccc ccnh Lf
i<TopScan
i=BottomScan
Yes
No
Ccp nhcl ccnh cch ccc ccnh
k|ch hccl /Lf
f|m hccnh cc g|cc c|em vc cp xep
lhec lhU lU lcng ccn
fc mcU ccc cccn g|cc cUcc lcc cc|
lUng ccp hccnh cc ke l|ep nhcU
Ccp nhcl |c| lhcng l|n cUc ccc ccnh
ce U cUng chc ccng Uel ke l|ep
i=i+1
End
30
int CurrentColor;

CurrentColor = getpixel(x,y);

if((CurrentColor!=BoundaryColor)&&CurrentColor!= FillColor))
{

putpixel(x,y,FillColor);
BoundaryFill(x-1, y, FillColor, BoundaryColor);
BoundaryFill(x, y+1, FillColor, BoundaryColor);
BoundaryFill(x+1, y, FillColor, BoundaryColor);
BoundaryFill(x, y-1, FillColor, BoundaryColor);
}

} // Boundary Fill
Nhn xt
- Thut ton ny c th s khng hot ng chnh xc khi c mt s im nm trong vng t c mu l mu cn t ca
vng (FillColor). khc phc iu ny, trc khi t mu cn phi m bo rng ton b cc im thuc v vng t
c mu khc mu t.
- Nhn xt rng trong ci t thut ton trn, vic gi thc hin quy thut ton cho bn im ln cn ca im hin
hnh khng quan tm ti mt trong bn im c xt bc trc hay cha. V d khi ta xt bn im ln cn
ca im hin hnh (x,y), th khi gi thc hin quy vi im hin hnh l mt trong bn im ln cn trn, (x,y)
vn c xem l im ln cn ca chng v li c gi thc hin li. Ta s a ra mt ci tin nh khc phc
im ny, bng cch mi ln xt im hin hnh (x,y) ta s gi 4 th tc ring t cc im ln cn v trong 4 th
tc ny ta s trnh gi li vic xt im (x,y).
void BoundaryFillEnhanced(int x, int y, int F_Color, int B_Color)
{
int CurrentColor;

CurrentColor = getpixel(x,y);
if((CurrentColor!=B_Color)&&CurrentColor!= F_Color))
{
putpixel(x,y,F_Color);
FillLeft(x-1, y, F_Color, B_Color);
FillTop(x, y+1, F_Color, B_Color);
FillRight(x+1, y, F_Color, B_Color);
FillBottom(x, y-1, F_Color, B_Color);
}

} // BoundaryFillEnhanced

void FillLeft(int x, int y, int F_Color, int B_Color)
{
int CurrentColor;
CurrentColor = getpixel(x,y);
if((CurrentColor!=B_Color)&&CurrentColor!= F_Color))
{
putpixel(x,y,F_Color);
31
FillLeft(x-1, y, F_Color, B_Color);
FillTop(x, y+1, F_Color, B_Color);
FillBottom(x, y-1, F_Color, B_Color);
}
} // FillLeft

void FillTop(int x, int y, int F_Color, int B_Color)
{
int CurrentColor;

CurrentColor = getpixel(x,y);
if((CurrentColor!=B_Color)&&CurrentColor!= F_Color))
{
putpixel(x,y,F_Color);
FillLeft(x-1, y, F_Color, B_Color);
FillTop(x, y+1, F_Color, B_Color);
FillRight(x+1, y, F_Color, B_Color);
}

} // FillTop

void FillRight(int x, int y, int F_Color, int B_Color)
{
int CurrentColor;

CurrentColor = getpixel(x,y);
if((CurrentColor!=B_Color)&&CurrentColor!= F_Color))
{
putpixel(x,y,F_Color);
FillTop(x, y+1, F_Color, B_Color);
FillRight(x+1, y, F_Color, B_Color);
FillBottom(x, y-1, F_Color, B_Color);
}

} // FillRight

void FillBottom(int x, int y, int F_Color, int B_Color)
{
int CurrentColor;

CurrentColor = getpixel(x,y);
if((CurrentColor!=B_Color)&&CurrentColor!= F_Color))
{
putpixel(x,y,F_Color);
FillLeft(x-1, y, F_Color, B_Color);
32
FillRight(x+1, y, F_Color, B_Color);
FillBottom(x, y-1, F_Color, B_Color);
}

} // FillBottom
- Thut ton ny c tnh quy, do khi ci t thng gy li trn b nh khi vng t
kh ln, do ci tin chng ta s tin hnh loang dn v ln lt t tng on giao
theo dng qut ngang thay v t theo 4 im ln cn. Nh vy chng ta ch cn lu li
thng tin ca im bt u mi on giao ca dng qut ngang thay v phi lu ht tt c
cc im ln cn cha c t ca im hin hnh. Chng ta s cho cc dng qut loang
t im bt u theo hng ln bin trn, sau khi t xong, cc dng qut cn li theo
hng xung bin di s c t. ng vi mi dng qut ngang, ta s loang v tm
pixel tri nht (c honh nh nht) lu li. Trong hnh 2.26, on giao u tin
cha im bt u (t mu trng) s c t trc. Sau cc v tr 1, 2 ng vi cc on
giao ca cc dng qut k tip s c lu li (hnh 2.26a). Bc tip theo, im ng vi
v tr 2 s c ly ra v tin hnh t mu bng cch loang t im ny ra theo chiu
ngang, sau pixel ng v tr 3 ca dng qut k tip s c lu li (hnh 2.26b). Sau
khi dng qut ng vi im 3 c x l tng t nh trn xong, stack lu cc v tr
ca cc im ht ging cho cc dng qut k tip nh trong hnh 2.26c. Hnh 2.26d
minh ha khi thut ton t c ton b mt phn vng pha trn bn phi ca vng
t. Khi pixel ng vi v tr 5 c x l xong, ta c phn cn li pha trn bn tri s c
t. Sau pixel ng vi v tr 4 s c x l, cc dng qut pha di s c t tip
theo.
Hnh 2.26 Thut ton t mu theo dng qut ci tin
TM TT
Cc i tng ha c s cung cp cc cng c c bn nht cho vic xy dng cc nh ha ca cc i tng phc tp. Cc on thng, ng
cong, vng t, k t, l cc i tng ha c s c hu ht tt c cc cng c lp trnh ha h tr.
Mi i tng ha c s c m t thng qua d liu v ta v cc thuc tnh ca n. H ta thng c dng m t i tng l h ta
Descartes. Cc thuc tnh ca i tng nh mu sc, kiu, rng, cho bit kiu cch m i tng c hin th trn thit b.
c th hin th cc i tng ha trn thit b hin th dng im m in hnh l mn hnh, cn phi c mt qu trnh chuyn cc m t hnh hc
ca cc i tng ny trong h ta th gii thc v dy cc pixel tng ng gn vi chng nht trn h ta ca thit b. Qu trnh ny cn c gi l
qu trnh chuyn i bng dng qut. Yu cu quan trng nht i vi qu trnh ny ngoi vic phi cho kt qu xp x tt nht cn phi cho tc ti u.
Ba cch tip cn v on thng gm thut ton DDA, thut ton Bresenham, thut ton MidPoint u tp trung vo vic a ra cch chn mt trong
hai im nguyn k tip khi bit c im nguyn bc trc. Thut ton DDA n gin ch dng thao tc lm trn nn phi dng cc php ton trn s
thc, trong khi thut ton Bresenham v thut ton MidPoint a ra cch chn phc tp hn nhng cho kt qu tt hn. i vi trng hp v on thng,
hai thut ton Bresenham v thut ton MidPoint cho kt qu ging nhau v tc ti u.
Cc i tng khc nh ng trn, ellipse v cc ng conics khc cng c v tng t bng cch s dng thut ton MidPoint. Ring vi cc
ng phc tp hn nh ng spline, s c xy dng t cc on thng xp x vi ng cong thay v phi xp x chng t cc im (xem phn sau).
Cc thut ton t mu cc vng t thng chia lm hai cng on : cng on th nht l xc nh cc im no t v cng on cn li n gin
hn l quyt nh t cc im bng gi tr mu no. Cng on th hai ch thc s phc tp nu ta t theo mt mu t no khng phi l t thun mt
mu. C hai cch tip cn chnh t mu mt vng t i vi thit b hin th dng im l : t theo dng qut v t da theo ng bin. Cch t theo
dng qut thng c dng t mu cc a gic, ng trn, ellipse, v mt s ng cong n gin khc, cn cch t theo ng bin thng c dng
cho cc vng t c dng ng bin phc tp hn.
Thut ton t mu a gic theo dng qut xc nh cc im thuc vng t bng cch xc nh phn giao ca cc dng qut vi cc on thng bin ca
a gic. im c o ca thut ton ny ch a ra cu trc d liu danh sch cc cnh kch hot AET v cch hot ng ca chng c th hn ch ti
a cc cnh cn tm giao im ng vi mi dng qut. y l im mu cht trong vn ci thin tc ca thut ton. Thut ton ny c th c p dng
cho nhiu dng a gic khc nhau nh a gic li, a gic lm, v c a gic t ct,
Thut ton t mu da theo ng bin xut pht t im nm bn trong vng t v tin hnh loang dn ra cc im ln cn cho ti khi gp cc im
thuc bin th dng. Cch lm ny gp hn ch v b nh khi ci t bng quy. Mt phng php ci tin c cp l loang theo tng dng qut.
Vic t mu theo cch ny thc s l thun tin cho cc chng trnh ha ng dng c kh nng tng tc cao.
BI TP
1. Thit k v ci t hm v hnh ch nht, ng gp khc, a gic t hm v on thng.
2. Trong phn trnh by thut ton Bresenham v ng thng, hy cho bit vi cch t d
1
, d
2
nh vy, c khi no d
1
, d
2

ly gi tr m hay khng ? Nu c hy cho v d minh ha.
3. Ti sao phi so snh
i
p vi gi tr 0 trong cc thut ton Bresenham, MidPoint. Bn cht ca vic so snh ny l g?
4. Ci t cc thut ton DDA, Bresenham, MidPoint v on thng qua hai im cho trc trong trng hp tng qut vi
h s gc m ly gi tr bt k.
5. Ngi ta c th ci thin tc ci t thut ton v on thng bng cch ch cn v mt na on thng, phn cn li ly
33
i xng na on thng v. Hy ci t minh ha.
6. Cho bit cc im nguyn v pht sinh khi s dng cc thut ton DDA, MidPoint cho cc on thng i qua cc im ln
lt l A
1
(5,10), B
1
(15,17); A
2
(-2,3), B
2
(-12,7); A
3
(6,3), B
3
(9,13); A
4
(2,4), B
4
(-5,14); A
5
(0,10), B
5
(15,10); A
6
(5,-1), B
6
(5,-
11);
7. Trnh by thut ton MidPoint v cung trn 1/8, bn knh R, tm I(x
C
, y
C
) v c gii hn bi :
8. S dng tng ca thut ton Bresenham, xy dng thut ton v ng trn c tm l gc ta , bn knh R.
9. Gii thch ti sao ch chn cung 1/8 v ri ly i xng m khng m rng cho cung 1/16 hay 1/32.
10. Gii thch ti sao c th thay cng thc p
0
= 5/4 - R bng cng thc p
0
= 1- R khi ci t thut ton MidPoint v ng
trn.
11. Trnh by thut ton Bresenham v ng trn bn knh R, t nhn xt v cch tip cn ca thut ton MidPoint c g
li hn so vi thut ton Bresenham.
12. Xy dng v ci t thut ton v ellipse c tm l gc ta vi bn knh trc chnh, bn knh trc ph ln lt l A, B.
13. Da vo thut ton v ng trn xy dng th tc v mt cung trn (arc) tm (x,y) bn knh R, bit gc bt u v kt
thc ca cung ln lt l o, |..
14. Da vo thut ton v ellipse xy dng th tc v mt cung (pie slice) tm (x,y) v bn knh trc chnh, trc ph ln
lt l A, B, gc bt u v kt thc ca cung ln lt l o, |.
15. Hy tm hiu cc ci t ti u hn cho cc thut ton v on thng v v ng trn, ellipse.
16. Xy dng v ci t thut ton v cc parabol
A
x
y
2
= , v Ax y =
2
vi A l s nguyn bt k.
17. Xy dng v ci t thut ton v cc hyperbol 1
2
2
2
2
=
B
y
A
x
, v 1
2
2
2
2
=
B
y
A
x
vi A, B l cc s nguyn bt k.
18. Xy dng v ci t thut ton v cc ng cong sau :
- ) sin( u e + = x A y , vi A nguyn.
- ) cos( u e + = x A y , vi A nguyn.
-
2
A xy = , vi A nguyn.
- A x y /
3
= , vi A nguyn.
- 0 4 2 4
2 2
= + + + y x y x
- 0 216 18 25 9
2 2
= + x y x
- 0 100 100
2
= + x x y
- 0 74 2 5 = + y x xy
- 0 2500 25 100
2 2
= + y x
-
19. Cc bc chnh ca cc thut ton v ng dng ( ) x f y = . Minh ha cho cc trng hp v ng thng, ng trn.
20. Bn cht ca qu trnh v cc ng n gin theo tng im l ri rc ha v nguyn ha. Hy cho bit l do ti sao,
bc no trong thut ton tng qut th hin hai trn. Minh ha bng cc ng hc.
21. Cc thut ton v ng bao hm rt ln k thut ti u ha chng trnh. Hy minh ha qua cc i tng hc.
22. ngha ca danh sch kch hot AET trong thut ton t mu a gic theo dng qut. Cu trc d liu v nguyn tc hot
ng ca AET.
23. Ci t thut ton t mu a gic theo dng qut bng cch dng xu lin kt thay v dng mng nh ci t minh ha.
24. Ci t thut ton t mu theo ng bin khng dng quy.
25. Xy dng v ci t thut t mu ng trn, ellipse.

s s
s s
2
2
0
2
2
R y
R x R
4
CHNG 3
CC PHP BIN I TRONG HA HAI CHIU
Mt trong nhng u im quan trng ca ha l cho php d dng thao tc ln cc i tng c to ra. Mt nh
qun l c nhu cu thu nh cc biu trong mt bo co, mt kin trc s mun nhn ta nh nhng gc nhn khc nhau,
mt nh thit k mun quan st v chnh sa cc mu i tng trong qu trnh thit k, Tt c cc thao tc ny c th c
h tr mt cch d dng nh vo cc php bin i hnh hc. Cc php bin i hnh hc s lm thay i m t v ta ca
cc i tng, t lm cho i tng b thay i v hng, kch thc v hnh dng. Cc php bin i hnh hc c s bao
gm : tnh tin (translation), quay (rotation) v bin i t l (scaling). Ngoi ra mt s php bin i khc cng thng c
p dng l php i xng (reflection) v bin dng (shearing).
C hai quan im v php bin i hnh hc l : bin i i tng (object transformation) v bin i h ta
(coordinate transformation). Bin i i tng l thay i ta ca cc im m t n theo mt quy tc no , cn bin i
h ta l to ra mt h ta mi v tt c cc im m t i tng s c chuyn v h ta mi. Hai cch ny c
nhng mi lin h cht ch vi nhau v mi cch u c nhng li th ring. Chng ta s bn v php bin i i tng trc.
1. CC PHP BIN I HNH HC C S
Mt php bin i hai chiu s bin i im P trong mt phng thnh im c ta mi Q theo mt quy lut no .
V mt bn cht, mt php bin i im l mt nh x T c nh ngha :
( ) ( ) ' , ' ,
:
2 2
y x Q y x P
T

R R

Ni cch khc, T l hm s ( ) y x T , theo hai bin ( ) y x, :
( )
( )

=
=
y x g y
y x f x
, '
, '

Php bin i affine l php bin i vi ( ) y x f , v ( ) y x g , l cc hm tuyn tnh. Php bin i ny c dng :
0 , , , , , , ,
'
'
= e

+ + =
+ + =
bc ad R f e d c b a
f dy bx y
e cy ax x
.
Ta ch kho st cc php bin i affine nn t nay v sau ta dng cm t "php bin i" thay cho "php bin i
affine".
1.1. Php tnh tin
tnh tin mt im ( ) y x P , t v tr ny sang v tr khc trong mt phng, ta cng thm cc gi tr m t di vo
cc ta ca P. Nu gi
x
tr v
y
tr ln lt l di theo trc honh v trc tung th ta ca im mi ( ) ' , ' y x Q s l :

+ =
+ =
y
x
tr y y
tr x x
'
'
,
( )
y x
tr tr , cn c gi l vector tnh tin hay vector di.
Chng ta c th dch chuyn ton b mt i tng bng cch p
dng quy tc trn cho mi im thuc i tng. tnh tin mt on
thng, n gin ch cn tnh tin hai im u v cui ca n ri sau
v li on thng ni hai im mi. Vi a gic, ta tnh tin cc nh ca
n sau v li a gic vi cc nh mi. Mt cch tng t, tnh tin
cc i tng nh ng trn, ellipse, ta tnh tin tm ca chng ti v tr
mi ri v li.
Hnh 3.1 Php tnh tin mt im (a) v i tng vi vector tnh tin (-4,2) (b)
1.2. Php bin i t l
Php bin i t l lm thay i kch thc i tng. co hay gin ta ca mt im ( ) y x P , theo trc honh v
trc tung ln lt l
x
s v
y
s , ta nhn
x
s v
y
s ln lt cho cc ta ca P.

=
=
y s y
x s x
y
x
. '
. '
,
x
s v
y
s c gi l cc h s t l.
Khi cc gi tr
x
s ,
y
s nh hn 1, php bin i s thu nh i tng, ngc li khi cc gi tr ny ln hn 1, php bin
P
x
y
Q
tr
x
tr
y
(a)
y
x
(2,3) (4,3)
(6,1) (8,1)
(b)
5
i s phng ln i tng. Khi
x
s ,
y
s bng nhau, ta gi l php ng dng
(uniform scaling), php ng dng l php bin i bo ton tnh cn xng ca i
tng.
Tm t l l im khng b thay i qua php bin i t l. Php bin i t l m
t nh trn cn gi l php bin i t l quanh gc ta v c tm t l l gc ta .
Nhn xt rng khi php bin i t l thu nh i tng, i tng s c di v gn
gc ta hn, tng t khi phng ln i tng, i tng s c dch chuyn xa gc
ta hn.
Hnh 3.2 Php bin i t l vi 5 . 2 =
x
s v 5 . 0 =
y
s
1.3. 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 quy c l chiu ngc chiu
kim ng h. Ta c cng thc bin i ca php quay im ( ) y x P , quanh gc ta
mt gc o :

+ =
=
y x y
y x x
. cos . sin '
. sin . cos '
o o
o o

Hnh 3.3 Php quay mt i tng quanh gc ta mt gc 60
0

1.4. Biu din ma trn ca php bin i
Trong nhiu ng dng ha, ngi dng thng xuyn c nhu cu thc hin nhiu php bin i hnh hc khc nhau
trn mt i tng to ra cc hiu qu nh mong mun. V d trong cc ng dng thit k, chng ta cn phi thc hin
nhiu php tnh tin, quay, t l c th khp tng phn ca i tng vo ng v tr ca chng, hay sau khi thc hin cc
php bin i nhng khng c ng , ngi dng mun tr li hin trng trc khi bin i (undo), Do cn phi c
mt cch no c th x l dy cc php bin i trn c nhanh chng v hiu qu.
Nu ta biu din ta ca im ( ) y x P , v ( ) ' , ' y x Q di dng cc vector dng ln lt l ( ) y x v ( ) ' ' y x th cc
php bin i tnh tin, t l, quay c th c biu din di dng ma trn nh sau :
Php tnh tin
( ) ( ) ( )
y x
tr tr y x y x + = ' '
hay T P Q + = vi ( )
y x
tr tr T =
Php bin i t l
( ) ( )
|
|
.
|

\
|
=
y
x
s
s
y x y x
0
0
' '
hay S P Q . = vi
|
|
.
|

\
|
=
y
x
s
s
S
0
0

Php quay quanh gc ta
( ) ( )
|
|
.
|

\
|

=
o o
o o
cos sin
sin cos
' ' y x y x
hay R P Q . = vi
|
|
.
|

\
|

=
o o
o o
cos sin
sin cos
R
Vi cch biu din ny, chng ta s gp kh khn khi mun kt hp cc php bin i li vi nhau v biu din ca php
tnh tin khc vi dng ca cc php bin i t l v quay. Chnh v vy m cn phi c mt cch no biu din ba php
bin i ny v mt dng duy nht c th d dng x l sau ny.
1.4.1. H ta thun nht (hormogeneous coordinates)
Ta thun nht ca mt im trn mt phng c biu din bng b ba s t l ( ) h y x
h h
, , khng ng thi bng 0
v lin h vi cc ta ( ) y x, ca im bi cng thc :
h
y
y
h
x
x
h h
= = ,
y
x
(2,3) (4,3)
(10,1.5) (5,1.5)
y
x
6
Nu mt im c ta thun nht l ( ) z y x , , th n cng c ta thun nht l ( ) z h y h x h . , . , . trong h l s thc
khc 0 bt k. Ta thun nht ca mt im trong khng gian ba chiu hay c s chiu ln hn cng c xc nh mt
cch tng t.
V mt ton hc, vic a ta thun nht vo l do s cn thit phi b sung cho mt phng Euclid cc im xa v tn
( ) 0 , , y x (im phi chnh) c ta th ba bng 0, iu ny dn n khi nim mt phng x nh trong hnh hc x nh. Trong
h ta thun nht, cc im xa v tn khng ng mt vai tr g c bit so vi cc im khc ca mt phng. Vi cc php
bin i hnh hc ang kho st, nu mt im c biu din di dng ta thun nht, c ba php bin i trn u c
biu din di dng tch cc ma trn. iu ny gip cho vic kho st cc tnh cht v s kt hp ca cc php bin i ny
c thun tin do mi php bin i c i din bi mt ma trn duy nht.
B ba cc ta thng biu din cc im trong khng gian ba chiu, nhng y ta s dng chng biu din cc
im trong khng gian hai chiu. Mi lin h y l : nu chng ta xt tt c cc b ba ta thun nht biu din cho cng
mt im, ngha l b ba s c dng ( ) . , . , . h y h x h , vi 0 = h , chng ta s nhn c mt ng thng trong khng gian ba
chiu. n gin ha chng ta c th chn 1 = h , lc ny mi im ( ) y x P , s c biu din di dng ta thun nht
l ( ) 1 , , y x .
1.4.2. Biu din cc php bin i di dng ta thun nht
Php tnh tin
( ) ( )
|
|
|
.
|

\
|
=
1
0 1 0
0 0 1
. 1 1 ' '
y x
tr tr
y x y x
hay ( )
y x T
tr tr M P Q , . = vi ( )
|
|
|
.
|

\
|
=
1
0 1 0
0 0 1
,
y x
y x T
tr tr
tr tr M
Php bin i t l
( ) ( )
|
|
|
.
|

\
|
=
1 0 0
0 0
0 0
. 1 1 ' '
y
x
s
s
y x y x
hay ( )
y x S
s s M P Q , . = vi ( )
|
|
|
.
|

\
|
=
1 0 0
0 0
0 0
,
y
x
y x S
s
s
s s M
Php quay quanh gc ta
( ) ( )
|
|
|
.
|

\
|
=
1 0 0
0 cos sin
0 sin cos
. 1 1 ' ' o o
o o
y x y x
hay ( ) o
R
M P Q . = vi ( )
|
|
|
.
|

\
|
=
1 0 0
0 cos sin
0 sin cos
o o
o o
o
R
M
2. 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 (composing transformation).
2.1. Kt hp cc php tnh tin
Nu ta thc hin php tnh tin ln ( ) y x P , c P , ri li thc hin tip mt php tnh tin khc ln P, ta c im
( ) ' , ' y x Q . Nh vy, Q l nh ca php bin i kt hp hai php tnh tin lin tip ( )
1 1 1
,
y x T
tr tr M v ( )
2 2 2
,
y x T
tr tr M c ta
:
( ) { } ( ) ( ) ( ) { }
2 2 2 1 1 1 2 2 2 1 1 1
, . , . , . , .
y x T y x T y x T y x T
tr tr M tr tr M P tr tr M tr tr M P Q = =
Ta c :
7
( ) ( )
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
1
0 1 0
0 0 1
.
1
0 1 0
0 0 1
, . ,
2 2 1 1
2 2 2 1 1 1
y x y x
y x T y x T
tr tr tr tr
tr tr M tr tr M
|
|
|
.
|

\
|
+ +
=
1
0 1 0
0 0 1
2 1 2 1 y y x x
tr tr tr tr

hay : ( ) ( ) ( )
2 1 2 1 2 2 2 1 1 1
, , . ,
y y x x T y x T y x T
tr tr tr tr M tr tr M tr tr M + + =
Vy kt hp hai php tnh tin l mt php tnh tin. T ta c kt hp ca nhiu php tnh tin cng l mt php tnh
tin.
2.2. Kt hp cc php t l
Tng t nh php tnh tin, ta c ta im ( ) ' , ' y x Q l im c c sau khi kt hp hai php t l ( )
1 1 1
,
y x S
s s M v
( )
2 2 2
,
y x S
s s M l :
( ) { } ( ) ( ) ( ) { }
2 2 2 1 1 1 2 2 2 1 1 1
, . , . , . , .
y x S y x S y x S y x S
s s M s s M P s s M s s M P Q = =
Ta c :
( ) ( )
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
1 0 0
0 0
0 0
.
1 0 0
0 0
0 0
, . ,
2
2
1
1
2 2 2 1 1 1 y
x
y
x
y x S y x S
s
s
s
s
s s M s s M
|
|
|
.
|

\
|
=
1 0 0
0 . 0
0 0 .
2 1
2 1
y y
x x
s s
s s

hay : ( ) ( ) ( )
2 1 2 1 2 2 2 1 1 1
. , . , . ,
y y x x S y x S y x S
s s s s M s s M s s M =
Vy kt hp hai php t l l mt php t l. D dng m rng cho kt qu : kt hp ca nhiu php t l cng l mt php
t l.
2.3. Kt hp cc php quay
Tng t, ta c ta im ( ) ' , ' y x Q l im pht sinh sau khi kt hp hai php quay quanh gc ta ( )
1 1
o
R
M v
( )
2 2
o
R
M l :
( ) { } ( ) ( ) ( ) { }
2 2 1 1 2 2 1 1
. . . . o o o o
R R R R
M M P M M P Q = =
Ta c :
( ) ( )
|
|
|
.
|

\
|

|
|
|
.
|

\
|
=
1 0 0
0 cos sin
0 sin cos
.
1 0 0
0 cos sin
0 sin cos
.
2 2
2 2
1 1
1 1
2 2 1 1
o o
o o
o o
o o
o o
R R
M M
( ) ( )
( ) ( )
|
|
|
.
|

\
|
+ +
+ +
=
1 0 0
0 cos sin
0 sin cos
2 1 2 1
2 1 2 1
o o o o
o o o o

hay : ( ) ( ) ( )
2 1 2 2 1 1
. o o o o + =
R R R
M M M
Vy kt hp hai php quay quanh gc ta l mt php quay quanh gc ta . T d dng suy ra kt hp ca nhiu
php quay quanh gc ta cng l mt php quay quanh gc ta .
2.4. Php quay c tm quay l im bt k
Gi s tm quay c ta ( )
R R
y x I , , ta c th xem php quay quanh tm I mt gco c kt hp t cc php bin
i c s sau:
- Tnh tin theo vector tnh tin ( )
R R
y x , dch chuyn tm quay v gc ta (a v trng hp quay quanh gc
ta ).
8
- Quay quanh gc ta mt gc o .
- Tnh tin theo vector tnh tin ( )
R R
y x ,
a tm quay v li v tr ban u.
Hnh 3.4 Php quay quanh tm l im bt k. i tng
trc khi bin i(a), Sau khi tnh tin v gc ta (b), Sau
khi quay gc o (c), Sau khi tnh tin v tm quay ban u(d).
Ta c ma trn ca php bin i :
( ) ( ) ( ) ( )
R R T R R R T R R R
y x M M y x M y x M , . . , , , o o =
|
|
|
.
|

\
|
|
|
|
.
|

\
|

|
|
|
.
|

\
|

=
1
0 1 0
0 0 1
.
1 0 0
0 cos sin
0 sin cos
.
1
0 1 0
0 0 1
R R R R
y x y x
o o
o o

( ) ( )
|
|
|
.
|

\
|
+ +
=
1 cos 1 . sin . sin cos 1
0 cos sin
0 sin cos
R R R R
y x y x o o o o
o o
o o


3. MT S TNH CHT CA PHP BIN I AFFINE
Php bin i affine bo ton ng thng
nh ca ng thng qua php bin i affine l ng thng.
Tht vy, ta c phng trnh tham s ca ng thng qua hai im A, B l : ( ) ( ) tB A t t P + = 1 . ( ) t Q cc im nhn
c sau php bin i M.
( ) ( ) ( ) | | ( ) tBM AM t M tB A t M t P t Q + = + = = 1 1 .
Nu gi A, B ln lt l nh ca A, B qua php bin i M, ta s c BM B AM A = = ' , ' . Lc ny
( ) ( ) ' ' 1 tB A t t Q + = . y chnh l dng ca phng trnh tham s on thng qua A, B.
T kt qu trn, bin i mt on thng i qua hai im A v B, ta ch cn p dng php bin i cho hai im A, B
ri v li on thng qua hai im mi.
Tnh song song ca cc ng thng c bo ton
nh ca hai ng thng song song l hai ng song song.
Chng ta c th vit li phng trnh tham s ca ng thng di dng tia xut pht t A ng vi t=0 v theo
phng A B = | nh sau : t A | + . Lc ny ta biu din hai ng thng song song di dng tia : ( ) t A t L | + =
1 1
v
( ) t A t L | + =
2 2
c cng phng t | nhng xut pht t hai im khc nhau. Lc ny p dng php bin i ln hai ng
thng song song ny, d dng nhn ra nh ca chng s c phng M | nn chng song song.
Mt h qu quan trng ca tnh cht ny l nh ca cc hnh bnh hnh sau php bin i l cc hnh bnh hnh.
Tnh t l v khong cch c bo ton
Gi s C l im chia on AB theo t s t. Nu A, B, C ln lt l nh A, B, C qua php bin i th C cng s chia
AB theo t s t.
Trong trng hp c bit, nu C l trung im ca AB th C cng l trung im ca AB, t ta c th suy ra mt s
tnh cht sau :
- Trong hnh vung, cc ng cho ct nhau ti trung im ca mi ng nn cc ng cho ca bt c hnh bnh
hnh no cng ct nhau ti trung im ca mi ng.
- Trong tam gic u, giao im ca ba ng trung tuyn chia mi ng theo t s 1:2. Mt khc, mt tam gic bt k
l nh ca tam gic u qua php bin i affine, nn giao im ca cc ng trung tuyn ca n cng s chia chng
theo t l 1:2.
4. MT S PHP BIN I KHC
4.1. Php i xng
Php i xng trc c th xem l php quay quanh trc i xng mt gc 180
0
. Nu trc i xng l trc honh hay trc
tung, chng ta c biu din ca php i xng qua trc honh, trc tung ln lt l :
x
y
x
y
o
x
y
I(x
R
,y
R
)
x
y
I(x
R
,y
R
)
(a) (b) (c) (d)
9
|
|
|
.
|

\
|
=
1 0 0
0 1 0
0 0 1
Rfx
M
|
|
|
.
|

\
|
=
1 0 0
0 1 0
0 0 1
Rfy
M
4.2. Php bin dng
Php bin dng l php bin i lm thay i, mo m hnh dng ca cc i tng. Hai dng php bin dng thng gp
l bin dng theo phng trc x v bin dng theo phng trc y bng cch thay i ta ( ) y x, ca im ban u theo
cch sau :
Bin dng theo phng trc x s lm thay i honh cn tung vn gi nguyn
|
|
|
.
|

\
|
=
1 0 0
0 1
0 0 1
xy Shx
sh M
Bin dng theo phng trc y s lm thay i tung cn
honh vn gi nguyn
|
|
|
.
|

\
|
=
1 0 0
0 1 0
0 1
yx
Shy
sh
M
xy
sh v
yx
sh ln lt c gi l cc h s bin dng.
Hnh 3.5 Php bin dng theo phng trc x vi h s bin dng 3 =
xy
sh
4.3. Php bin i ngc
Chng ta thng dng php bin i ngc c th undo mt php bin i thc hin.
Ta c Q l nh ca P qua php bin i T c ma trn bin i M l : PM Q = , t php bin i ngc T
-1
s c ma
trn bin i l M
-1
vi M
-1
l ma trn nghch o ca ma trn M.
Vi gi thit ban u v ma trn M l 0 = bc ad , ta c cng thc tnh ma trn nghch o M
-1
ca
|
|
|
.
|

\
|
=
1
0
0
f e
d c
b a
M l
:
|
|
|
.
|

\
|

1
0
0
1
1
af be de cf
a c
b d
bc ad
M
Nh vy ta c ma trn ca cc php bin i ngc ca cc php bin i c s tnh tin, t l, quay ln lt nh sau :
( ) ( )
y x T
y x
y x T
tr tr M
tr tr
tr tr M =
|
|
|
.
|

\
|

=

,
1
0 1 0
0 0 1
,
1

( )
|
|
.
|

\
|
=
|
|
|
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
=

y x
S
y
x
x
y
y x
y x S
s s
M
s
s
s
s
s s
s s M
1
,
1
1 0 0
0
1
0
0 0
1
1 0 0
0 0
0 0
1
,
1

x
y
(1,1) (3,1)
(3,3) (1,3)
(4,1) (6,1)
(12,3) (10,3)
10
( ) ( ) o o o
o o
o =
|
|
|
.
|

\
|
=

R R
M M
1 0 0
0 cos sin
0 sin cos
1

4.4. Phn r php bin i
Mt php bin i bt k c th c phn r thnh tch cc php bin i c s nh tnh tin, quay, t l.
Mt php bin dng theo phng trc x c th c phn r thnh tch ca mt php bin i t l v mt php bin dng
n v, v vi mt php bin i t l khc theo cng thc sau :
|
|
|
.
|

\
|
|
|
|
.
|

\
|
|
|
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 0 0
0 1 0
0 0
1 0 0
0 1 1
0 0 1
1 0 0
0 1 0
0 0
1
1 0 0
0 1
0 0 1
xy
xy
xy
sh
sh
sh
Php bin dng n v cn c th c phn r tip :
|
|
|
.
|

\
|

|
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 0 0
0 cos sin
0 sin cos
1 0 0
0
1
0
0 0
1 0 0
0 cos sin
0 sin cos
1 0 0
0 1 1
0 0 1
| |
| |
|
|
o o
o o

trong
( )

=
|
|
.
|

\
|
=
= =

0 1
0 1
72 . 31
1
tan
28 . 58 tan
|
|
| o

T , mt php bin i bt k c th c phn r thnh cc php bin i c s sau :
|
|
|
.
|

\
|
|
|
|
|
|
|
|
.
|

\
|

|
|
|
|
.
|

\
|

|
|
|
|
.
|

\
|
+
=
|
|
|
.
|

\
|
1
0 1 0
0 0 1
1 0 0
0
0
1 0 0
0 0
0 0
1 0 0
0 1
0 0 1
1
0
0
2
f e
Q
a
Q
b
Q
b
Q
a
Q
bc ad
Q
Q
bd ac
f e
d c
b a

trong
2 2 2
b a Q + = .
Vi cch lp lun trn ta nhn thy : bt k php bin i no cng c kt hp t cc php bin dng, t l, quay, v
tnh tin. Tuy nhin, theo kt qu bc trc, php bin dng l s kt hp ca cc php quay, t l, nn t suy ra bt k
php bin i no cng c kt hp t cc php tnh tin, t l v quay.
5. PHEP BIN DI GIA CAC H TA D
thun tin cho vic m t i tng, thng thng i tng s c m t
trong cc h ta cc b gn vi chng. Tuy nhin c th hin th ton b mt
nh bao gm nhiu i tng thnh phn, cc m t ny phi c chuyn v mt
h ta chung duy nht. Vic chuyn i ny thng c chia lm hai loi :
chuyn t cc h ta khng phi l h ta Descartes nh h ta cc, h ta
cu, h ta elliptic, sang h ta Descartes, v chuyn i gia hai h ta
Descartes. Trong phn ny chng ta s kho st php bin i gia hai h ta
Descartes vi nhau.
Hnh 3.6 Php bin i gia hai h ta
Gi s ta c h ta (I) c gc ta O v cc vector n v ln lt l j i, . H ta
(II) l nh ca h ta (I) qua php bin i T(M), c gc ta l O v cc vector n
v ln lt l v u, . Lc ny mt im ( ) y x P , bt k trong h ta (I) s c bin i
thnh im ( ) b a Q , trong h ta (II). Vn t ra y l mi lin h gia b a, vi
M y x , , nh th no.
Ngi ta chng minh c rng
1
= PM Q .
Hnh 3.7 Ta ca mt im qua php bin i h ta
P
O i
j
O'
u
v
11
TOM TT
Cc php bin i hnh hc cho php d dng thao tc ln cc i tng c to ra. Chng lm thay i m t v ta ca cc i tng, t
i tng s c thay i v hng, kch thc v hnh dng. Cc php bin i hnh hc c s bao gm tnh tin, quay v bin i t l. Ngoi ra mt s
php bin i khc cng thng c p dng l php i xng v bin dng.
C hai quan im v php bin i hnh hc l : bin i i tng v bin i h ta . Bin i i tng thay i ta ca cc im m t n
theo mt quy tc no , cn bin i h ta s 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 u c biu din di dng ma trn thun nht 3x3 tin cho vic thc hin cc thao tc kt hp gia chng. Trong h
ta thun nht, ta ca mt im c m t bi mt vector dng bao gm ba gi tr, hai gi tr u tng ng vi ta Descartes ca im , v gi
tr th ba l 1. Vi cch biu din ny, ma trn ca php bin i c c t s kt hp ca cc php bin i c s s bng tch ca cc ma trn ca cc php
bin i thnh phn.
Cc php bin i khng lm thay i kt cu v tnh cn xng ca i tng nh tnh tin, quay c gi l cc php bin i bo ton kt cu i
tng, thut ng ting Anh gi l rigid-body transformation.
Vic chuyn i gia hai h ta Descartes vi nhau thng gp trong cng on chuyn cc m t ta ca cc i tng thnh phn trong cc h
ta cc b v cc v tr tng ng trong mt h ta chung. Gia hai h ta Descartes vi nhau, ngi ta thng s dng cc php bin i bo ton
kt cu nh l tnh tin, quay.
BI TP
26. Cho bit ma trn cc php bin i dng bin i mt hnh trn thnh hnh ellipse v ngc li.
27. Cho bit ma trn cc php bin i dng bin i mt hnh vung thnh hnh ch nht, hnh bnh hnh v ngc li.
28. Xy dng v ci t cu trc d liu v cc hm dng thc hin mt php bin i affine bt k.
29. Cho bit ma trn ca php t l vi tm t l l im bt k.
30. Cho bit ma trn ca php ly i xng qua ng thng y=mx+b bt k.
31. Cho bit ma trn ca php ly i xng qua tm l im bt k.
32. Cho bit ma trn ca php bin dng theo phng ca ng thng y=mx+b.
33. Chng minh rng ma trn ca php ly i xng qua ng thng x y = tng ng vi kt hp ca php ly i xng
qua trc honh v php quay quanh gc ta mt gc 90
0
.
34. Chng minh rng ma trn ca php ly i xng qua ng thng x y = tng ng vi kt hp ca php ly i
xng qua trc tung v php quay quanh gc ta mt gc 90
0
.
35. Trong php bin i t l,
y x
s s , c gi l cc h s t l theo phng ca trc honh v phng ca trc tung. Hy cho
bit cng thc ca php bin i t l theo phng ca cc trc nghing so vi trc honh (cc trc ny trc giao vi nhau)
mt gc o vi cc h s t l theo cc phng trn l
y x
s s , .
36. Chng minh rng cp hai php t l l giao hon, ngha l
1 2 2 1 S S S S
M M M M = . Tng t cho cp hai php quay.
37. Chng minh rng php ng dng v php quay to thnh mt cp thao tc c tnh giao hon, nhng php bin i t l
thng v php quay th khng vy.
38. Trnh by ma trn ca php bin dng di dng tch ma trn ca cc php quay v cc php t l.
39. Trnh by ma trn ca php quay di dng tch ma trn ca cc php bin dng v t l.
40. Chng minh rng php quay quanh gc ta c th c phn tch thnh ba php bin dng. y l cch quay mt
nh nhanh v php bin dng thng c thc hin bng cch di chuyn ton b cc khi im nh (block pixels).
41. Chng minh mt php bin i affine bt k c th c phn tch thnh tch ca cc php tnh tin, t l v quay.
42. Chng minh cng thc tnh ta ca mt im khi thc hin php bin i gia cc h ta
43. H ta ' ' ' y O x nhn c bng cch quay quanh gc ta mt gc o ri tnh tin theo vector tnh tin ( )
y x
tr tr , h
ta xOy. Hy cho bit cng thc ta ca im P trong h ta ' ' ' y O x nu ( ) y x P , l ta ca P trong h ta
xOy.
44. Vit chng trnh minh ha cc bc kt hp cc php bin i c s to thnh php quay mt im quanh tm bt k.
Thc hin tng t cho php t l c tm t l l im bt k.
45. Vit chng trnh cho php ngi dng s dng cc php bin i hc thao tc ln mt i tng cho trc.

12
CHNG 4
HIN TH I TNG HAI CHIU
Chng ny s cp ti cc k thut hin th cc i tng hai chiu trn cc thit b nh mn hnh, my in,
Cc h ha cho php ngi dng m t cc hnh nh bng h ta th gii thc. N c th l bt k h ta
Descartes no m ngi dng cm thy thun tin nht khi s dng. Cc hnh nh c m t trong h ta thc sau s
c cc h ha nh x vo h ta thit b. Thng thng cc h ha cho php ngi dng xc nh vng no ca
hnh nh c hin th v n s c hin th u trn mn hnh. Ta c th chn mt vng hay mt s vng hin th cng
mt lc, cc vng ny c th t cc ni khc nhau trn mn hnh hay lng vo nhau. Qu trnh bin i ny i hi cc php
bin i nh dch chuyn, quay, bin i t l; v cc thao tc loi b cc vng hnh nh nm ngoi vng c nh ngha, .
6. QUY TRNH HIN TH I TNG HAI CHIU
6.1. Mt s khi nim
Ca s (window) l mt vng c chn hin th trong h ta th gii thc.
Vng quan st (viewport) l vng c chn trn thit b hin th cc i tng trong ca s nh x vo.
Ca s xc nh ci g c thy trn thit b hin th, cn vng quan st xc nh ni no n s c hin th.
y chng ta nn phn bit khi nim ca s c dng trong phn ny vi khi nim ca s c dng trong cc
chng trnh ng dng trn cc h iu hnh nh Windows.
Thng thng ca s v vng quan
st c dng hnh ch nht, c cc cnh song
song vi cc trc ta . Tuy nhin chng
cng cn c mt s dng khc nh a gic,
hnh trn,
Qu trnh nh x mt vng nh ngha
trong h ta th gii thc vo mt vng
trong h ta thit b c gi l php
bin i h quan st (viewing
transformation).
Hnh 4.1 Php bin i h quan st vi ca s v vng quan st c dng l cc hnh ch nht
Quy trnh hin th cc i tng trong ha hai chiu c th c m t qua s sau :
Trc tin, cc i tng s c m t bng cc i tng ha c s v cc thuc tnh ca chng trong tng h ta
cc b (modeling coordinates - MC) nhm n gin ha v tn dng cc c trng ring ca tng loi. Sau , chng ta s
dng cc php bin i h ta chuyn cc m t t cc h ta cc b ny sang mt h ta th gii thc (world
coordinates - WC) duy nht cha ton b cc i tng thnh phn. Php chuyn i ny c gi l php chuyn i m hnh
(modeling coordinates transformation).
Tip theo, chng ta s nh mt h ta quan st (viewing coordinates - VC), l h ta m t v tr ca ngi quan
st i tng. Nh vic s dng h ta ny m cng mt m t, cc i tng c th c quan st nhiu gc v v tr
khc nhau.
Sau khi chuyn cc m t i tng t h ta th gii thc sang h ta quan st, chng ta s nh ngha ca s
trong h ta ny, ng thi nh ngha vng quan st trong h ta thit b chun (normalized device coordinates - NDC)
c ta cc chiu thay i trong khong t 0 n 1.
Sau khi thc hin php nh x t
ca s sang vng quan st, tt c cc
phn ca i tng nm ngoi vng quan
st s b xn (clip) v ton b nhng g
nm trong vng quan st s c nh x sang h ta thit b (device coordinates - DC). Vic a ra h ta thit b chun
nhm gip cho vic tng thch d dng vi nhiu loi thit b hin th khc nhau.
Hnh 4.2 Quy trnh hin th i tng hai chiu
Bng cch thay i v tr ca vng quan st chng ta c th quan st cc i tng ti cc v tr khc nhau trn mn hnh
hin th, ng thi, bng cch thay i kch thc ca vng quan st, chng ta c th thay i kch thc v tnh cn xng ca
cc i tng c hin th. Chng ta c th thc hin cc hiu ng thu phng bng cch nh x cc ca s c kch thc
khc nhau vo vng quan st c kch thc c nh. Khi cc ca s c thu nh, phn nm trong ca s s c phng to
gip chng ta d dng quan st cc chi tit m khng th thy c trong cc ca s ln hn.
xw
min
xw
max
yw
min
yw
max
Window
xv
min
xv
max
yv
min
yv
max
Viewport
MC WC
ChUyen cc| lU he
lcc cc lhe g|c| lhUc
cng he lcc cc
Ucn cl
ChUyen cc| lU he
lcc cc cUc cc
cng he lcc cc
lhe g|c| lhUc
VC
ChUyen cc| lU he lcc
cc Ucn cl cng he
lcc cc lh|el c| chUcn
NDC
/nh xc lU he lcc
cc lh|el c|
chUcn cng he
lcc cc lh|el c|
DC
13
6.2. H ta quan st v h ta thit b chun
6.2.1. H ta quan st
thit lp h ta quan st, trc tin ta s chn mt
im ( )
0 0 0
, y x P trong h ta th gii thc lm gc ta .
Sau chng ta s s dng mt vector V m t hng quan st
nh hng cho trc tung
v
y ca h ta . Vector V c
gi l view-up vector.
T V chng ta c th tnh c cc vector n v
( )
y x
v v v , = v ( )
y x
u u u , = tng ng cho cc trc tung
v
y
v trc honh
v
x ca h ta . Cc vector n v ny s c
dng to thnh hai dng u tin ca ma trn quay
R
M
a cc trc
v v
y x trng vi cc trc
w w
y x ca h trc ta th gii thc.
Hnh 4.3 Php bin i mt im t h ta quan st sang h ta thc
Ma trn ca php chuyn mt im trong h ta th gii thc sang h ta quan st l tch ca hai ma trn ca cc
php bin i : php tnh tin gc ta h quan st v gc ta h ta th gii thc, php quay a cc trc ca h ta
quan st trng vi cc trc ca h ta th gii thc.
R T VC WC
M M M =
,
.
6.2.2. H ta thit b chun
Do cch nh ngha ca cc h ta thit b khc nhau nn mt hnh nh hin th
c trn thit b ny cha chc hin th chnh xc trn thit b kia. Chnh v vy cn phi
xy dng h ta thit b chun i din chung cho cc thit b c th m t cc hnh
nh ca th gii thc m khng ph thuc vo bt c thit b no.
Trong h ta ny, cc ta x, y s c gn cc gi tr trong khong t 0 n 1.
Nh vy, vng khng gian ca h ta thit b chun chnh l hnh vung n v c gc
tri di l (0,0) v gc phi trn (1,1).
Hnh 4.4 H ta thit b chun
6.3. Chuyn i t ca s sang
vng quan st
Php chuyn i t ca s sang
vng quan st bao gm 3 php bin i
: php tnh tin dch chuyn gc tri
di v gc ta (hnh 4.5a), php
bin i t l chnh kch thc ca
ca s v cng kch thc ca vng
quan st (hnh 4.5b, hnh 4.5c), cui cng l php tnh tin dch chuyn v gc tri di ca vng quan st (hnh 4.5d).
Hnh 4.5 Php chuyn i t ca s sang vng quan st
Ta c ma trn ca php bin i :
( ) ( )
min min
min max
min max
min max
min max
min min
, , , v u M
y y
v v
x x
u u
M y x M M
TV S TW WV
|
|
.
|

\
|

=
|
|
|
|
|
|
|
.
|

\
|
+

=
1
0 0
0 0
min
min max
min max
min min
min max
min max
min
min max
min max
min max
min max
v
y y
v v
y u
x x
u u
x
y y
v v
x x
u u

Nh vy nu ( ) y x P , l im trong ca s th n s c ta trong vng quan st l
: ( ) ( ) ( )
min min min min
, v y y sy u x x sx + + vi
min max
min max
x x
u u
sx

= ,
min max
min max
y y
v v
sy

= .
sy sx, l cc h s t l ca cc kch thc ca ca s v vng quan st. Khi 1 = = sy sx , cc i tng qua php
chuyn i s c gi nguyn hnh dng v tnh cn xng.
R
yworld yview
xview
xworld
(b)
xworld
yworld
y
0
x
0
x
v
ie
w
y
v
ie
w
(a)
T
x
y
(x
max
,y
max
)
(x
min
,y
min
)
(a)
x
y
(b)
u
v
(c)
u
v
(d)
(u
min
,v
min
)
(u
max
,v
max
)
1
1
x
y
(1,1)
14
6.4. Cc thut ton xn hnh
Thao tc loi b cc phn hnh nh nm ngoi mt vng cho trc c gi l xn hnh. Vng c dng xn hnh gi
l ca s xn (clip window).
Ty thuc vo tng ng dng c th m ca s xn c th c dng l a gic hay l ng cong khp kn. Trong phn
ny chng ta s kho st cc thut ton xn hnh vo ca s xn l hnh ch nht trc, sau s kho st cc ca s xn c
dng khc. n gin, trong cc thut ton xn hnh, ca s xn c gi l ca s.
7. CC THUT TON XN IM, ON THNG
Gi s ca s xn l ca s hnh ch nht c ta ca cc im di bn tri v im trn bn phi ln lt l
( )
min min
, y x v ( )
max max
, y x .
Mt im ( ) y x P , c coi l nm bn trong ca s nu
tha h bt phng trnh :

s s
s s
max min
max min
y y y
x x x

By gi, ta s xt bi ton xn on thng c cho bi hai
im ( )
1 1 1
, y x P v ( )
2 2 2
, y x P vo ca s hnh ch nht trn.
Hnh 4.6 Minh ha thao tc xn cc on thng vo mt ca s hnh ch nht. Trc khi xn (a). Sau khi xn (b).
Thao tc xn hnh l mt trong nhng thao tc c bn ca qu trnh hin th i tng, do vn ti u tc lun l
ch cho cc thut ton nhm n. tng chung ca cc thut ton xn on thng l loi b php ton tm giao im gia
on thng vi bin ca ca s mt cch nhanh nht i vi cc on thng c bit nh nm hon ton trong hoc hon ton
bn ngoi ca s (v d nh on P
1
P
2
v P
3
P
4
trong hnh 4.6). i vi cc on thng c kh nng ct ca s, cn phi a ra
cch tm giao im tht nhanh.
Nhn xt rng, cc on thng m c c hai im nm hon ton trong ca s th c on thng nm trong ca s, y
cng chnh l kt qu sau khi xn (v d nh on thng P
1
P
2
), mt khc i vi cc on thng m c hai im nm v cng
mt pha ca ca s th lun nm ngoi ca s v s b mt sau khi xn (v d nh on thng P
3
P
4
). Vi cc on thng c kh
nng ct ca s (v d nh on thng P
5
P
6
v P
7
P
8
) vic tm giao im nhanh cn rt gn vic tm giao im vi nhng
bin ca s khng cn thit xc nh phn giao nu c ca on thng v ca s.
Ngi ta thng s dng phng trnh tham s ca on thng trong vic tm giao im gia on thng vi ca s.
( )
( ) 1 0 , ,
,
1 2 1 1 2 1
1 2 1 1 2 1
s s = + = + =
= + = + =
t y y Dy tDy y y y t y y
x x Dx tDx x x x t x x

Nu giao im ng vi gi tr t nm ngoi on | | 1 , 0 th giao im s khng thuc v ca s.
7.1. Thut ton Cohen-Sutherland
y l mt trong nhng thut ton ra i sm nht v thng dng nht.
Bng cch ko di cc bin ca ca s, ngi ta chia mt phng thnh chn vng gm ca s v tm vng xung quanh n.
Khi nim m vng (area code)
Mt con s 4 bit nh phn gi l m vng s c gn cho mi vng m t v tr tng i ca vng so vi ca s.
Bng cch nh s t 1 n 4 theo th t t phi qua tri, cc bit ca m vng c dng theo quy c sau ch mt trong
bn v tr tng i ca vng so vi ca s bao gm : tri, phi, trn, di.
Bit 1 : tri (LEFT)
Bit 2 : phi (RIGHT)
Bit 3 : trn (TOP)
Bit 4 : di (BOTTOM)
Gi tr 1 tng ng vi v tr bit no
trong m vng s ch ra rng im v
tr tng ng, ngc li bit s c t
bng 0. V d mt vng c m l 1001, th n s nm pha di (bit 4 bng 1), bn tri (bit 1 bng 1) so vi ca s, vng c
m l 0000 chnh l ca s.
Hnh 4.7 M vng quy nh v tr tng i ca vng so vi ca s
Cc gi tr bit trong m vng c tnh bng cch xc nh ta ca im ( ) y x, thuc vng vi cc bin ca ca s.
Bit 1 c t l 1 nu
min
x x < , cc bit khc c tnh tng t.
(a)
Window
P
1
P
2
P
3
P
4
P
5
P
6
P
7
P
8
(b)
Window
P
1
P
2
P'
5
P'
6
0100
Window
0110 0101
0001
1001
0010
1010 1000
0000
1 2 3 4
LEFT
RIGHT
TOP
BOTTOM
TOP
LEFT RIGHT
BOTTOM
15
Thut ton
Gn m vng tng ng cho cc im u cui
2 1
, P P ca on thng cn xn ln lt l
2 1
, c c . Ta c nhn xt :
- Cc on thng nm hon ton bn trong ca s s c 0000
2 1
= = c c , ng vi cc on ny, kt qu sau khi xn l
chnh n.
- Nu tn ti { } 4 ,.., 1 e k , sao cho vi bit th k ca
2 1
, c c u c gi tr 1, lc ny on thng s nm v cng pha ng
vi bit k so vi ca s, do nm hon ton ngoi ca s. on ny s b loi b sau khi xn. V d, nu
0101 , 1001
2 1
= = c c , r rng bit 1 ca chng u bng 1 (ng vi bin tri), do on thng nm hon ton v
bin tri ca ca s. xc nh tnh cht ny, n gin ch cn thc hin php ton logic AND trn
2 1
, c c . Nu kt
qu khc 0000, on thng s nm hon ton ngoi ca s.
- Nu
2 1
, c c khng thuc v hai trng hp trn, on thng c th hoc khng ct ngang ca s (v d on
8 7 6 5
, P P P P trong hnh 4.6) chc chn s tn ti mt im nm ngoi ca s, khng mt tnh tng qut gi s im
l
1
P . Bng cch xt m vng ca
1
P l
1
c ta c th xc nh c cc bin m on thng c th ct t chn
mt bin v tin hnh tm giao im '
1
P ca on thng vi bin . Lc ny, on thng ban u c xn thnh
'
1 1
P P . Ti y chng ta li lp li thao tc xt cho on thng mi '
1 1
P P cho ti khi xc nh c phn nm
trong hoc loi b ton b on thng.
Chng ta minh ha thut ton bng hnh v 4.8. Vi on thng
2 1
P P , ta s
kim tra
1
P ln lt vi cc bin tri, phi, di, trn v tm ra im ny nm
di ca s, sau chng ta tm giao im '
1
P ca on thng vi bin di.
Lc ny on thng ban u c xn ngn li thnh
2 1
' P P . V
2
P nm ngoi
ca s nn bng cch xt tng t, chng ta s tin hnh tm giao im '
2
P ca
2 1
' P P vi bin trn v lc ny on ' '
2 1
P P , chnh l phn nm hon ton trong
ca s.
Trong trng hp on
4 3
P P ,
3
P nm bn tri ca s nn chng ta c th
xc nh im giao '
3
P , v t loi b on thng '
3 3
P P . Bng cch kim tra
m vng, chng ta d dng xc nh c on thng
4 3
' P P nm hon ton bn di ca s nn c th b i ton b.
Hnh 4.8 Minh ha thut ton Cohen - Sutherland
Cc im giao vi cc bin ca s ca on thng c th c tnh t phng trnh tham s nh cp phn trn.
Tung y ca im giao on thng vi bin ng ca ca s c th
tnh t cng thc ( )
1 1
x x m y y + = , trong x c th l
min
x hay
max
x . Tng t, honh x ca im giao on thng vi bin ngang
ca ca s c th tnh t cng thc : ( ) m y y x x /
1 1
+ = , trong y
c th l
min
y hay
max
y .
Lu thut ton Cohen-Sutherland dng xn mt on thng
qua hai im (x
1
,y
1
) v (x
2
,y
2
) vo ca s hnh ch nht cho trc
Ci t minh ha thut ton Cohen - Sutherland
#define TRUE 1
#define FALSE 0
#define LEFT 1
#define RIGHT 2
#define TOP 4
#define BOTTOM 8
typedef struct {
int x, y;
}POINT;

typedef struct {
int Left, Top, Right, Bottom;
}RECT;
P
1
P
2
P'
2
P'
1
P
4
P
3
P'
3
Begin
EnCode(P1,c1);
EnCode(P2,c2)
(c1!=0000) || (c2!=0000)
Yes
(c1&c2 == 0000)
Yes
Xcc c|nh g|cc c|em cUc cccn
lhcng vc| c|en cUc cUc c
ccng ccch xel mc vUng cUc
c|em ncm ngcc| cUc c
No
No
End
16

typedef int CODE;

#define Accept(a,b) (!(a|b))
#define Reject(a,b) (a&b)

// Tra ve ma vung cua p la c
void EnCode(POINT p, CODE &c, RECT rWin)
{
c = 0;
if(p.x < rWin.Left)
c |= LEFT;
if(p.x > rWin.Right)
c |= RIGHT;
if(p.y > rWin.Top)
c |= TOP;
if(p.y < rWin.Bottom)
c |= BOTTOM;
}

// Hoan vi hai diem p1 va p2 sao cho p1 luon nam ngoai cua so
void SwapPoint(POINT& p1, POINT &p2, CODE &c1, CODE &c2)
{

if(!c1) // Neu p1 nam hoan toan trong cua so
{
POINT p;
p = p1;
p1 = p2;
p2 = p;

CODE c;
c = c1;
c1 = c2;
c2 = c;
}
}

// Tra ve TRUE neu co cat cua so. Nguoc lai tra ve FALSE
int CohenSutherlandClipping(POINT P
1
, POINT P
2
, POINT &Q
1
, POINT &Q
2
, RECT rWin)
{
int fStop = FALSE, fResult = FALSE;
CODE c1, c2;

while(!fStop)
{
17

EnCode(P
1
, c1, rWin);
EnCode(P
2
, c2, rWin);

// Neu duong thang nam hoan toan ben trong cua so
if(Accept(c1, c2))
{
fStop = TRUE; // break
fResult = TRUE;
} // Accept

else
{
// Neu duong thang nam hoan toan ben ngoai cua so
if(Reject(c1,c2))
{
fStop = TRUE; // break
} // Reject
else // Xet truong hop duong thang co the cat cua so
{
SwapPoint(P
1
, P
2
, c1, c2);
float m;

if(P
2
.x!=P
1
.x)
m = float(P
2
.y-P
1
.y)/(P
2
.x-P
1
.x);
if(c1 & LEFT)
{
P
1
.y += (rWin.Left-P
1
.x)*m;
P
1
.x = rWin.Left;
} // Left
else
{
if(c1 & RIGHT)
{
P
1
.y += (rWin.Right-P
1
.x)*m;
P
1
.x = rWin.Right;
} // Right
else
{
if(c1 & TOP)
{
if(P
2
.x!=P
1
.x)
P
1
.x += (rWin.Top - P
1
.y)/m;
P
1
.y = rWin.Top;
} // Top
else // Bottom
18
{
if(P
2
.x!=P
1
.x)
P
1
.x += (rWin.Bottom - P
1
.y)/m;
P
1
.y = rWin.Bottom;
} // Bottom
}
}
} // Xet truong hop duong thang co the cat cua so
}
} //while

Q
1
= P
1
;
Q
2
= P
2
;
return (fResult);
} //CohenSutherlandClipping
7.2. Thut ton Liang-Barsky
Thut ton Liang-Barsky c pht trin da vo vic phn tch dng tham s ca phng trnh on thng.
( )
( ) 1 0 , ,
,
1 2 1 1 2 1
1 2 1 1 2 1
s s = + = + =
= + = + =
t y y Dy tDy y y y t y y
x x Dx tDx x x x t x x

ng vi mi gi tr t, ta s c mt im P tng ng thuc ng thng.
- Cc im ng vi 1 > t s thuc v tia P
2
x.
- Cc im ng vi 0 s t s thuc v tia P
2
x.
- Cc im ng vi 1 0 s s t s thuc v on thng
2 1
P P .
Hnh 4.9 Phng trnh tham s ca on thng
Tp hp cc im thuc v phn giao ca on thng v ca s ng vi cc gi tr t tha h bt phng trnh :

s s
s + s
s + s
1 0
max 1 min
max 1 min
t
y tDy y y
x tDx x x

t
1 max 4 4
min 1 3 3
1 max 2 2
min 1 1 1
,
,
,
,
y y q Dy p
y y q Dy p
x x q Dx p
x x q Dx p
= =
= =
= =
= =

Lc ny ta vit h phng trnh trn di dng :
{ }

s s
e s
1 t 0
4 , 3 , 2 , 1 , k q t p
k k

Nh vy vic tm on giao thc cht l tm nghim ca h bt phng trnh ny. C hai kh nng xy ra l :
- H bt phng trnh v nghim, ngha l ng thng khng c phn giao vi ca s nn s b loi b.
P1(x
1
, y
1
)
P
2
(x
2
, y
2
)
t=0
t=1
t>1
x
x'
t<0
19
- H bt phng trnh c nghim, lc ny tp nghim s l cc gi tr t tha | | | | 1 , 0 ,
2 1
_ e t t t .
Ta xt cc trng hp :
- Nu { } ) 0 ( ) 0 ( : 4 , 3 , 2 , 1 < . = e -
k k
q p k th r rng bt phng trnh ng vi k trn l v nghim, do h v
nghim.
- Nu { } ) 0 ( ) 0 ( : 4 , 3 , 2 , 1 > v = e
k k
q p k th vi cc bt phng trnh m ng vi p
k
= 0 l cc bt phng trnh hin
nhin, lc ny h bt phng trnh cn gii tng ng vi h bt phng trnh c p
k
= 0.
- Vi cc bt phng trnh
k k
q t p s m 0 <
k
p , ta c
k k
p q t / > .
- Vi cc bt phng trnh
k k
q t p s m 0 >
k
p , ta c
k k
p q t / s .
Vy nghim ca h bt phng trnh l | |
2 1
, t t vi :
{ }
{ }

s
)
`

> =
)
`

< =
2 1
2
1
) 1 0 , min(
) 0 0 , max(
t t
p
p
q
t
p
p
q
t
k
k
k
k
k
k


Nu h trn c nghim th on giao
2 1
Q Q s l ) , ( ), , (
2 1 2 1 2 1 1 1 1 1
Dy t y Dx t x Q Dy t y Dx t x Q + + + + .
Nu xt thut ton ny kha cnh hnh hc ta c :
- Trng hp { } ) 0 ( ) 0 ( : 4 , 3 , 2 , 1 < . = e -
k k
q p k tng ng vi trng hp
on thng cn xt song song vi mt trong cc bin ca ca s ( 0 =
k
p ) v
nm ngoi ca s ( 0 <
k
q ) nn s b loi b sau khi xn.
- Vi 0 =
k
p , gi tr
k k k
p q r t / = = s tng ng vi giao im ca on
thng vi bin k ko di ca ca s. Trng hp 0 <
k
p , ko di cc bin
ca s v on thng v v cc, ta c ng thng ang xt s c hng i t
bn ngoi vo bn trong ca s. Nu 0 >
k
p , ng thng s c hng i t
bn trong ca s i ra. Do hai u mt ca on giao s ng vi cc gi tr
2 1
, t t c tnh nh sau : Gi tr
1
t chnh l gi tr ln nht ca cc
k k k
p q r / = m 0 <
k
p (ng thng i t ngoi vo trong ca s) v 0; gi tr
2
t chnh l gi tr nh nht ca cc
k k k
p q r / = m 0 >
k
p (ng thng i t trong ca s i ra) v 1.
Hnh 4.10 Xt vi bin tri on thng P1P2 c hng i t ngoi vo trong, nhng so vi bin phi on thng P1P2 li c hng i t trong ca s i ra
Khi ci t thut ton Liang-Barsky, ban u cc gi tr t
1
, t
2
c khi ng 1 , 0
2 1
= = t t . Vi mi ln xn on thng
vi mt bin ca ca s, cc gi tr q p, s c truyn cho hm ClipTest xc nh on thng c b loi b hay b xn bt
mt on hay khng. Khi 0 < p , tham s p q r / = s c xem xt cp nht
1
t , khi 0 > p , r dng cp nht
2
t . Khi
cp nht
1
t v
2
t nu
2 1
t t > , on thng s b loi b. Ngoi ra nu (p=0 v q<0), chng ta cng s loi b on thng v n
song song v nm ngoi ca s. Nu on thng khng b loi b sau bn ln gi vi cc tham s p, q tng ng vi cc bin
ca ca s, cc gi tr
1
t v
2
t s c dng suy ra ta hai im u mt ca on giao.
Ci t minh ha thut ton Liang - Barsky

// Tra ve TRUE neu khong xay ra truong hop nam ngoai cua so
int ClipTest(int p, int q, float &t
1
, float &t
2
)
{
float r;

if (p<0)
{
P
1
P
2
P'
1
P'
2
20
r = float(q)/p;
if (r>t
2
)
return FALSE;
else
if (r>t
1
)
t
1
= r;
}
else
{
if (p>0)
{
r = float(q)/p;
if (r<t
1
)
return FALSE;
else
if (r<t
2
)
t
2
= r;
}
else // p=0
{
if (q<0)
return FALSE;
}
}
return TRUE;
}

int LiangBarskyClipping(POINT P
1
, POINT P
2
, RECT R, POINT *Q
1
, POINT *Q
2
)
{
float t
1
, t
2
;
int Dx, Dy, x
1
, y
1
, x
2
, y
2
, x
min
, y
min
, x
max
, y
max
;

t
1
= 0;
t
2
= 1;
x
1
= P
1
.x; y
1
= P
1
.y;
x
2
= P
2
.x; y
2
= P
2
.y;
Dx = x
2
- x
1
; Dy = y
2
- y
1
;
x
min
= R.Left; y
min
= R.Top;
x
max
= R.Right; y
max
= R.Bottom;
if (ClipTest(-Dx, x
1
- x
min
, t
1
, t
2
)) // Giai he bat phuong trinh 1
{
if (ClipTest(Dx, x
max
- x
1
, t
1
, t
2
)) // Giai he bat phuong trinh 2
{
if (ClipTest(-Dy, y
1
- y
min
, t
1
, t
2
)) // Giai he bat phuong trinh 3
{
if (ClipTest(Dy, y
max
- y
1
, t
1
, t
2
)) // Giai he bat phuong trinh 4
21
{
Q
1
.x = x
1
+ t
1
. Dx;
Q
1
.y = y
1
+ t
1
. Dy;
Q
2
.x = x
1
+ t
2
. Dx;
Q
2
.y = y
1
+ t
2
. Dy;
return TRUE;
} // Giai he bat phuong trinh 4
} // Giai he bat phuong trinh 3
} // Giai he bat phuong trinh 2
} // Giai he bat phuong trinh 1
return FALSE;
} // LiangBarskyClipping
Nhn xt
Thng thng, thut ton Liang-Barsky cho tc tt hn thut ton Cohen-Sutherland v rt gn c s giao im cn
tnh. Mi ln cp nht cc gi tr
2 1
, t t , ch cn mt php chia, v giao im ca on thng vi ca s ch c tnh duy nht
mt ln sau khi tm ra c gi tr
2 1
, t t . Trong khi thut ton Cohen-Sutherland i lc phi tnh giao im cho cc
im khng nm trong bin ca ca s i hi nhiu php ton hn.
8. THUT TON XN A GIC
Chng ta c th hiu chnh cc thut ton xn on thng xn a gic bng cch xem a gic nh l mt tp cc on
thng lin tip ni vi nhau. Tuy nhin, kt qu sau khi xn nhiu khi li l tp cc on thng ri nhau. iu chng ta mong
mun y l kt qu sau khi xn phi l mt cc a gic sau ny c th chuyn thnh cc vng t.
Hnh 4.11 Kt qu sau khi xn a gic ban u. a gic ban u (a). Kt qu l cc on ri nhau (b) v kt qu l cc a gic (c)
Trong phn ny chng ta s kho st mt trong cc thut ton xn a gic l thut ton Sutherland-Hodgeman.
Hnh 4.12 Qu trnh xn mt a gic vo ca s
Thut ton ny s tin hnh xn a gic ln lt vi cc bin ca s. u tin, a gic s c xn dc theo bin tri ca
ca s, kt qu sau bc ny s c dng xn tip bin phi, ri c tng t nh vy cho cc bin trn, di. Sau khi xn
ht vi bn bin ca ca s, ta c kt qu cui cng.
Vi mi ln xn a gic dc theo mt bin no ca ca s, nu gi
1
,
+ i i
V V l hai nh k cnh
1 + i i
V V , ta c 4 trng
hp c th xy ra khi xt tng cp nh ca a gic ban u vi bin ca ca s nh sau:
- (i) Nu
i
V nm ngoi,
1 + i
V nm trong, ta lu giao im I ca
1 + i i
V V vi bin ca ca s v
1 + i
V .
- (ii) Nu c
i
V ,
1 + i
V u nm trong, ta s lu c
i
V ,
1 + i
V .
- (iii) Nu
i
V nm trong,
1 + i
V nm ngoi, ta s lu
i
V v I.
- (iv) Nu c
i
V ,
1 + i
V u nm ngoi, ta khng lu g c.
(a) (b) (c)
V
i
V
i+1
I V
i
V
i+1
V
i
V
i+1
I
(i)
V
i
V
i+1
(ii) (iii) (iv)
22
Hnh 4.13 Cc trng hp khi xt
1
,
+ i i
V V vi cc bin ca ca s
Ci t minh ha thut ton Sutherland-Hodgeman
#include <graphics.h>
#include <mem.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define LEFT 1
#define RIGHT 2
#define TOP 4
#define BOTTOM 8

typedef struct {
int x, y;
}POINT;

typedef struct {
int Left, Top, Right, Bottom;
}RECT;

// Xac dinh p co nam ben trong cua so neu xet theo mot canh b
int Inside(POINT p, int Edge, RECT rWin)
{
switch(Edge)
{
case LEFT :
if(p.x < rWin.Left)
return FALSE;
break;
case RIGHT :
if(p.x > rWin.Right)
return FALSE;
break;
case TOP :
if(p.y > rWin.Top)
return FALSE;
break;
case BOTTOM :
if(p.y < rWin.Bottom)
return FALSE;
break;
}
return TRUE;
23
} //Inside

// Tra ve giao diem cua doan noi p1&p2 voi canh b
POINT Intersect(POINT p1, POINT p2, int Edge, RECT rWin)
{
POINT iPt;
float m;

if(p1.x != p2.x)
m = float(p2.y-p1.y)/(p2.x-p1.x);
switch(Edge)
{
case LEFT :
iPt.x = rWin.Left;
iPt.y = p2.y + (rWin.Left-p2.x)*m;
break;
case RIGHT :
iPt.x = rWin.Right;
iPt.y = p2.y + (rWin.Right-p2.x)*m;
break;
case TOP :
iPt.y = rWin.Top;
if(p1.x != p2.x)
iPt.x = p2.x + (rWin.Top-p2.y)/m;
else
iPt.x = p2.x;
break;
case BOTTOM :
iPt.y = rWin.Bottom;
if(p1.x != p2.x)
iPt.x = p2.x + (rWin.Bottom-p2.y)/m;
else
iPt.x = p2.x;
break;
}
return (iPt);
} // Intersect

// Tien hanh cat da giac voi mot canh nao do cua cua so.
void ClipEdge(POINT *pIn, int N, POINT *pOut, int &Cnt, int Edge,
RECT rWin)
{
int FlagPrevPt = FALSE;
Cnt = 0;
POINT pPrev;

24
pPrev = pIn[0];
if(Inside(pPrev, Edge, rWin)) // Save point
{
pOut[Cnt] = pPrev;
Cnt++;
FlagPrevPt = TRUE;
}

for(int i=1; i<N; i++)
{
if(FlagPrevPt) // Diem bat dau nam trong
{
if(Inside(pIn[i], Edge, rWin)) // Save point P
{
pOut[Cnt] = pIn[i];
Cnt++;
}
else // Save I
{
FlagPrevPt = FALSE;
pOut[Cnt] = Intersect(pPrev, pIn[i], Edge, rWin);
Cnt++;
}
}
else // Diem bat dau canh nam ngoai
{
if(Inside(pIn[i], Edge, rWin)) // Save point I, P
{
FlagPrevPt = TRUE;
pOut[Cnt] = Intersect(pPrev, pIn[i], Edge, rWin);
Cnt++;
pOut[Cnt] = pIn[i];
Cnt++;
}
}
pPrev = pIn[i];
}

// Neu Diem cuoi va dau giao voi bien cua cua so Save point I
if(!(Inside(pIn[N], Edge, rWin) == Inside(pPrev, Edge, rWin)))
{
pOut[Cnt] = Intersect(pPrev, pIn[N], Edge, rWin);
Cnt++;
}
pOut[Cnt] = pOut[0];
} // Intersect
25

void ClipPolygon(POINT *pIn, int N, POINT *pOut, int &Cnt,
RECT rWin)
{

POINT pTmp[20];

_fmemcpy(pTmp, pIn, (N+1)*sizeof(POINT));
ClipEdge(pTmp, N, pOut, Cnt, LEFT, rWin);
N = Cnt;
_fmemcpy(pTmp, pOut, (N+1)*sizeof(POINT));
ClipEdge(pTmp, N, pOut, Cnt, RIGHT, rWin);
N = Cnt;
_fmemcpy(pTmp, pOut, (N+1)*sizeof(POINT));
ClipEdge(pTmp, N, pOut, Cnt, TOP, rWin);
N = Cnt;
_fmemcpy(pTmp, pOut, (N+1)*sizeof(POINT));
ClipEdge(pTmp, N, pOut, Cnt, BOTTOM, rWin);
} // ClipPolygon
Nhn xt
Thut ton Sutherland-Hodgeman cho kt qu rt chnh xc khi lm vic vi cc a gic li, tuy nhin vi cc a gic
lm kt qu hin th c th s c on tha nh hnh 4.11. iu ny xy ra khi a gic sau khi xn b tch thnh hai hay nhiu
vng. Do chng ta ch lu kt qu xut trong mt danh sch cc nh nn nh cui ca danh sch ng vi a gic trc s ni
vi nh u ca danh sch ng vi a gic sau. Mt trong nhiu cch khc phc im ny l phn a gic lm thnh hai
hay nhiu a gic li v x l mi a gic li ring.
TM TT
Hin th i tng l qu trnh a cc m t i tng t th gii thc sang mt thit b xut c th no . Quy trnh ny bt u bng cch nh
ngha tng i tng thnh phn trong h ta cc b v kt thc bng vic chuyn ton b i tng ln h ta thit b. Bng cch a ra nh ngha h
ta quan st v cc khi nim ca s, vng quan st; mi i tng c th c quan st nhiu v tr v gc khc nhau. Thng thng mi hnh nh m
chng ta quan st c trn mn hnh thit b c gi l mt th hin (view) ca i tng.
Qu trnh nh x mt vng nh ngha trong h ta th gii thc vo mt vng trong h ta thit b c gi l php bin i h quan st. y
thc cht l php bin i h ta . Qu trnh loi b cc phn hnh nh nm ngoi mt vng cho trc c gi l xn hnh. Vng c dng xn hnh
gi l ca s xn.
Cc thut ton xn on thng Cohen-Sutherland, Liang-Barsky u tp trung gii quyt hai vn chnh nhm ti u tc thut ton l : loi b
vic tm giao im i vi cc on thng chc chn khng ct ca s (nh nm hon ton trong, nm hon ton ngoi), v vi cc on c kh nng ct ca
s, cn phi tm cch hn ch s ln cn tm giao im vi cc bin khng cn thit. Thut ton Cohen-Sutherland gii quyt hai ny thng qua kiu d liu
m vng m v mt bn cht ch l s m t v tr tng i ca vng ang xt so vi cc bin ca ca s. Cn thut ton Liang-Barsky th tuy da vo
phng trnh tham s ca on thng lp lun nhng thc cht l da trn vic xt cc giao im c th c gia on thng ko di vi cc bin ca ca s
(cng c ko di). Cc giao im ny tng ng vi cc gi tr
k k k
p q r / = . C hai thut ton ny u c th c m rng cho vic xn hnh trong
ha ba chiu.
BI TP
46. Phn tch cc h ta dng trong quy trnh hin th i tng hai chiu.
47. Vit on chng trnh minh ha qu trnh chuyn i t ca s sang vng quan st.
48. ngha ca m vng trong thut ton Cohen-Sutherland.
49. Hy cho mt on thng minh ha m trong trng hp ny thut ton phi thc hin vic tm giao im 4 ln theo th t
LEFT, TOP, RIGHT, BOTTOM.
50. Ci t thut ton Cohen-Sutherland xn mt a gic. Phn tch cc trng hp thut ton ny cho kt qu l cc on
thng ri rc.
51. So snh hai thut ton Cohen-Sutherland v Liang-Barsky v s php ton thc hin trong cc trng hp chnh.
52. Ci t thut ton Liang-Barsky v so snh vi tc thut ton Cohen-Sutherland.
26
53. Hiu chnh cc thut ton xn on thng hc c th xn on thng vo ca s hnh ch nht nghing vi trc
honh mt gc o .
54. Trnh by v ci t thut ton phn mt a gic lm thnh cc a gic li.
55. Da trn kt qu ca bi tp trn, hiu chnh thut ton Sutherland-Hodgeman xn cc a gic lm c chnh xc.
27
CHNG 5

GII THIU HA BA CHIU
Cc i tng trong th gii thc phn ln l cc i tng ba chiu, nn vic th hin cc i tng ba chiu trn my
tnh l mt cng vic ht sc cn thit a tin hc gn gi vi thc t hn. Cng ging nh cc cch biu din cc i tng
ba chiu trn mt phng khc (nh ca my nh, camera, ... ), biu din bng my tnh cng phi tun theo cc quy lut v phi
cnh, sng, ti, ... nhm gip ngi xem c th tng tng li hnh nh mt cch gn ng nht. Ngoi ra biu din trn my
tnh c u th gip ta c th quan st i tng nhiu gc cnh khc nhau, cc khong cch khc nhau.
Chng ny s gii thiu mt s k thut biu din cc i tng ba chiu trn my tnh, t cc i tng n gin nh
cc hnh khi, cc a din, ... n cc i tng tng i phc tp nh cc mt c tm hiu cc chng trc.
9. TNG QUAN V HA BA CHIU
Khi chng ta m hnh ha v hin th mt cnh ba chiu, ta cn phi xem xt
rt nhiu kha cnh v vn khc nhau ch khng n gin l thm vo ta
th ba cho cc i tng. B mt i tng c th xy dng bi nhiu t hp khc
nhau ca cc mt phng v cc mt cong. Ngoi ra, i khi chng ta cng cn m
t mt s thng tin v bn trong cc i tng. Cc cng c h tr ha
(graphics package) thng cung cp mt s hm hin th cc thnh phn bn
trong, nhng ng nt tiu biu hoc hin th mt phn ca i tng ba chiu
(solid object). Ngoi ra, cc php bin i hnh hc thng c s dng nhiu
hn v a dng hn trong ha ba chiu so vi trong ha hai chiu. Php
bin i h quan st trong khng gian ba chiu phc tp hn nhiu so vi trong
khng gian hai chiu do chng ta phi chn la nhiu tham s hn khi m t mt
cnh ba chiu s xut hin trn mn hnh nh th no.
Hnh 5.1 Mt cnh ha ba chiu
Cc m t v mt cnh ba chiu phi i qua mt quy trnh x l gm nhiu cng on nh php bin i h ta quan
st v php chiu chuyn cnh t h ta quan st ba chiu xung h ta thit b hai chiu. Nhng phn nhn thy c
ca cnh, ng vi mt h quan st c chn no , phi c xc nh v cui cng, cc thut ton v mt s c p dng
nhm to ra hnh nh trung thc (gn vi thc t) ca cnh.
9.1. S lc v quy trnh hin th
Quy trnh x l thng tin trong ha ba chiu l mt chui cc bc ni tip nhau, kt qu ca mi bc s l u vo
ca bc tip theo.
Hnh 5.2 Quy trnh hin th i tng ba chiu
28
Quy trnh bt u bng vic xy dng cc m hnh i tng. Cc m hnh ny thng c m t trong khng gian ba
chiu (x,y,z). Cc m hnh thng th hin vt th (solid) hoc b mt (boundaries) ca i tng. Nh vy ta c hai kiu m
hnh ha. Trong solid modeling cc i tng ha c s thng c dng m t cc i tng c th tch (volume).
Trong boundary representations(B-reps), cc i tng c nh ngha bi b mt ca chng.
Cc m hnh thng c biu din trong mt h ta cc b, m ta gi l h ta i tng. Trong h ta ny ch
c bn thn i tng c nh ngha, v vy gc ta v n v o lng thng c chn sao cho vic biu din i
tng tin li nht.
Bc u tin trong quy trnh hin th l bin i i tng t khng gian i tng (object-space) vo mt khng gian
chung gi l khng gian thc (world space). Trong khng gian ny cc i tng, ngun sng, v ngi quan st cng tn ti.
Bc ny c gi l giai on bin i m hnh (modeling transformation).
Bc tip theo l mt bc ti u ha. Trong giai on loi b n gin (trivial rejection) ta cn loi tr tt c cc i
tng khng th nhn thy. iu ny gip chng ta trnh c vic x l mt s phn khng cn thit ca cnh (scene) m ta
ang chun b hin th cc bc sau.
Tip theo ta phi chiu sng (illumination) cc i tng c th nhn thy c bng cch gn cho chng mu sc da
trn cc c tnh ca cc cht to nn vt v cc ngun sng tn ti trong cnh.
Sau khi chiu sng, ta phi thc hin mt php bin i h ta t v tr quan st (viewing position) v gc ta
v mt phng quan st (viewing plane) v mt v tr mong c. Bc ny gi l bc i h quan st. Sau bc ny, cc i
tng c chuyn t khng gian thc sang khng gian quan st (eye space).
Trong khng gian quan st, ta phi thc hin vic xn cc i tng trong cnh cnh nm gn trong mt phn khng
gian chp ct m ta gi l viewing frustum. Bc ny s loi b hon ton cc i tng (cc mnh i tng) khng nhn
thy c trong nh.
Bc tip theo ta s chiu cc i tng xung mt phng hai chiu. Bc Projection thc hin php bin i t khng
gian quan st sang khng gian mn hnh (screen-space).
Trong bc ri rc ha (rasterization) ta s chuyn i tng thnh cc pixel. Cui cng, ton cnh s c hin th ln
mn hnh.
9.2. M hnh khung ni kt (Wireframe Model)
9.2.1. Khi nim
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 ni gia cc nh . Khi th hin bng m hnh
ny, cc i tng ba chiu c v rng v khng ging thc t lm. hon thin hn, ngi ta dng cc k thut to bng v
loi b cc ng v mt khut. (Chng ta s cp vn ny cc chng sau). Tuy nhin v bng m hnh ny thng
nhanh nn ngi ta thng dng n trong vic xem phc tho (preview) cc i tng, c bit l trong cc h CAD.
9.2.2. Biu din cc vt th ba chiu bng m hnh khung ni kt
Vi m hnh khung ni kt, hnh dng ca i tng ba chiu c biu din bng hai danh sch (list) : danh sch cc
nh (vertices) v danh sch cc cnh (edges) ni cc nh . Danh sch cc nh cho bit thng tin hnh hc l v tr cc
nh, cn danh sch cc cnh xc nh thng tin v s kt ni, n cho bit cp cc nh to ra cnh. Chng ta hy quan st mt
vt th ba chiu c biu din bng m hnh khung ni kt nh sau :
Bng danh sch cc cnh v nh biu din vt th
Vertex List Edge List
Vertex x y z Edge Vertex1 Vertex2
1 0 0 0 back side 1 1 2
2 0 1 0 2 2 3
3 0 1 1 3 3 4
4 0 0.5 1.5 4 4 5
5 0 0 1 5 5 1
6 1 0 0 front side 6 6 7
7 1 1 0 7 7 8
8 1 1 1 8 8 9
9 1 0.5 1.5 9 9 10
10 1 0 1 10 10 6
11 1 6
29
12 2 7
13 3 8
14 4 9
15 5 10
16 2 5
17 1 3

30
Hnh 5.3 Vt th ba chiu c biu din bng m hnh khung ni kt
C nhiu cch c t m hnh khung ni kt trn my tnh nh dng xu, mng, ... v mi cch u c cc u im
ring trong tng ng dng c th. y ta minh ha cc biu din m hnh khung ni kt bng cu trc d liu mng nh sau
:
#define MAXVERTS 50 //s nh ti a c th biu din
#define MAXEDGES 100 //s cnh ti a

typedef struct {
float x, y, z;
} POINT3D;

typedef struct {
int NumVerts; //S nh trong m hnh
int NumEdges; //S cnh trong m hnh
POINT3D Vert[MaxVerts];
int Edge[MaxEdges][2];
}WIREFRAME;
Ngoi ra, i khi trong m hnh wireframe ngi ta cn m t cc mt (phng) ca i tng. Mi mt c nh ngha
bi mt a gic bao. V d, i tng trong hnh 5.3 c 7 mt.
9.3. V cc i tng theo m hnh khung ni kt bng cch s dng cc php chiu
v cc i tng biu din bng m hnh khung ni kt, n gin chng ta ch cn v cc cnh trong danh sch cc
cnh m thi. Tuy nhin do cc nh v cnh u c nh ngha trong ba chiu nn vn t ra y l lm th no v
cc ng thng ba chiu trong mt phng hai chiu. lm iu ny, chng ta phi thc hin php chiu t ba chiu vo hai
chiu b bt mt chiu. C hai loi php chiu n gin thng dng l php chiu song song (parallel projection) v
php chiu phi cnh (perspective projection). Php chiu song song s dng cc ng thng song song i qua cc nh ca
i tng, trong khi php chiu phi cnh dng cc ng thng qua cc nh ca i tng hi t v mt im gi l tm
chiu (center of projection). Cc ng thng trn c gi l tia chiu v giao im ca cc ng thng ny vi mt phng
chiu (hay cn gi l mt phng quan st (view plane)) chnh l cc hnh chiu ca cc nh hay cn gi l im chiu. Trong
phn ny, chng ta gi s rng mt phng chiu l mt phng z=0.
Php chiu song song bo ton c mi quan h gia cc chiu ca i tng, y chnh l k thut c dng trong
phc tho to ra phn khung ca i tng ba chiu. Ngi ta dng phng php ny quan st chnh xc cc mt khc
nhau ca i tng. Tuy nhin, php chiu song song khng cho mt biu din thc ca i tng ba chiu.
Trong khi , php chiu phi cnh to ra c biu din thc hn nhng li khng bo ton c mi lin h gia cc
chiu. Cc ng thng cng xa s c cc nh chiu nh hn.
Ni chung, k thut v mt ng thng ba chiu l :
- Chiu mi im u mt thnh cc im hai chiu.
z
1
1
x y
1
1
2
3
4 5
6
7
8
9
10
31
- V ng thng ni hai im nh qua php chiu.
Hnh 5.4 Php chiu song song (a) v php chiu phi cnh (b)
S d chng ta lm c iu ny v cc php chiu m chng ta s dng bo ton ng thng.
9.4. Php chiu song song (parallel projection)
Khi hng ca tia chiu vung gc vi mt phng chiu ta c php chiu trc giao (orthographic projection). Ngc li,
ta c php chiu xin (oblique projection).
9.4.1. Php chiu trc giao
Xt im ba chiu, ( )
z y x
P P P P , , = , cch n gin nht l b i thnh phn z chiu P thnh ( )
y x
P P P , ' = . iu ny
tng ng vi chiu im ln mt phng xy theo phng ca trc z. Mt phng xy l mt phng quan st. Xem hnh v
minh ha 5.5, y im chiu chnh l giao im ca tia a qua P v song song vi trc z vung gc vi mt phng xy. Tia a
l tia chiu.
D dng thy rng php chiu ny bo ton ng thng.
Hnh 5.5 Php chiu trc giao
Php chiu trc giao trn thng c gi l php nhn t trn xung (top-view) hoc di ln (bottom-view). C hai
php chiu khc cng kh thng dng l:
- Php nhn t pha trc (front-view): Tia chiu song song vi trc x v mt phng quan st l yz. Php chiu ny loi
b thnh phn x ca P.
- Php nhn t pha bn cnh (side-view): Tia chiu song song vi trc y v mt phng quan st l xz. Php chiu ny
loi b thnh phn y ca P.
Hnh 5.6 minh ha ba php chiu trc giao cp trn ln mt vt th l ngi nh. Nhn xt rng vi php chiu
nhn t pha trc ta khng phn bit c tng trc v tng sau v chng nm chng ln nhau, cng tng t cho trng
hp php chiu nhn t pha bn cnh.

lcl phcng ch|eU
f|c ch|eU
fcm ch|eU
(a) (b)
lcl phcng ch|eU
O
x y
z
lcl phcng ch|eU
P(P
x
,P
y
,P
z
)
P'(P
x
,P
y
)
a
32
Hnh 5.6 Kt qu ca ba php chiu trc giao
9.4.2. Php chiu xin
Hnh 5.7 Php chiu xin
Hnh 5.7 minh ha mt php chiu xin. im ( )
z y x
P P P P , , qua php chiu xin s nhn c im ( )
P P
y x P , ' .
( )
y x
P P , l hnh chiu ca P qua php chiu trc giao. o l gc hp bi tia chiu v on ni ( )
P P
y x , v ( )
y x
P P , . Gi s
on ni ny c di l L. | l gc gia on ni trn vi trc y.
9.5. Php chiu phi cnh (perspective projection)
9.5.1. Php chiu phi cnh n gin nht
Php chiu phi cnh ph thuc vo v tr tng i ca hai i tng l mt nhn v mt phng quan st.
Quan st hnh sau, vi mt phng quan st l yz v mt nhn ( ) 0 , 0 , E E c t dc theo trc x. Khong cch gia mt
E v mt phng quan st c gi l tm nhn (eye distance). xc nh hnh chiu ca ( ) z y x P , , , ta ni P vi E v tm giao
im P ca ng thng ny vi mt phng quan st. Lc ny P chnh l im cn tm.
Hnh 5.8 Php chiu phi cnh n gin
Trong php chiu phi cnh cc tia chiu khng song song vi nhau m hi t v mt im duy nht l mt.
z
y
x
z
y
x
z
x
y Nh|n lU
ph|c lren
Nh|n lU
mcl cen
Nh|n lU
ph|c lrUcc
O
x y
z
lcl phcng ch|eU
P(P
x
,P
y
,P
z
)
(P
x
,P
y
)
(x
P
,y
P
)
o
o
|
x
y
z P(x,y,z)
E
P'
33
Chng ta gi s P khng nm pha sau mt nhn, tc l E x < . P c th nm sau mt phng quan st, hay trn mt phng
quan st, hay gia mt v mt phng quan st. Ta c, tia t mt n P c dng :
( ) ( )( ) ( )t z y x t E t r , , 1 0 , 0 , + =
Tia ny giao vi mt quan st (mt phng x=0) khi x = 0 nn gi tr t ng vi trng hp ny l :
( ) E x
t
/ 1
1
'

=
Suy ra cc ta ca im chiu l :
( ) E x
y
y
/ 1
'

=
( ) E x
z
z
/ 1
'

=
Php chiu phi cnh gn ging php chiu trc giao ch khc l hai ta y, z c nhn ln thm mt lng l
( ) E x
t
/ 1
1
'

= . H s t l ny dn n khi nim phi cnh theo lut xa gn (perspective foreshortening) ngha l : vt cng
xa mt (theo chiu m ca trc x, lun c E x < ) th t cng nh dn n y, z cng nh do vt s thy nh hn, ngc
li nu vt cng gn mt th s thy ln hn.
Cng tng t nh trn, ta c th d dng kim chng php chiu phi cnh cng bo ton ng thng.
Nhn xt rng php chiu song song l mt trng hp c bit ca php chiu phi cnh. Nu chng ta cho tm nhn E
cng ngy cng ln tin dn n v cc th cc tia chiu qua mt s tr nn song song v h s
( ) E x
t
/ 1
1
'

= tr thnh 1.
Lc ny php chiu phi cnh tr thnh php chiu song song.
9.5.2. Cc trng hp khc
Trng hp trn c mt nhn nm trn trc x v mt phng quan st l yz. Cng nh trong php chiu trc giao ta cng
c th hon i v tr ca mt v mt phng quan st c th nhn i tng cc gc cnh khc nhau. V d trong trng
hp mt nm trn trc z v mt phng quan st l xy th cc kt qu s tng t :

E z
y
y
E z
x
x
E z
t
/ 1
'
/ 1
'
/ 1
1
'

=

=

=

10. BIU DIN I TNG BA CHIU
Cc cnh ha c th cha nhiu dng i tng khc nhau: cy, hoa, my, ni, nc, st thp, c, Chnh v vy,
khng ngc nhin khi c nhiu phng php khc nhau c th s dng m t cc i tng sao cho ph hp vi thuc tnh
ca cc loi i tng ny. Cc mt a gic v mt bc hai cung cp cho chng ta mt m t gn ng ca cc i tng
Euclid n gin nh l cc khi ellipse, khi a din; cc mt trn xoay, v cc i tng dng thit k cc m hnh my
bay, bnh rng v cc cu trc cng ngh khc thng c biu din thng qua mt cong (curves); cc phng php tip cn
th tc (procedural method) nh Fractal cho php chng ta biu bin mt cch chnh xc cc i tng nh my, thm c v
cc i tng t nhin khc.
S biu din mt i tng lp th thng c chia ra lm hai loi, d khng phi tt c cc biu din u c th
c phn chia mt cch r rng thuc loi no trong hai loi ny. Phng php biu din b mt ((B-reps)) m t cc i
tng ba chiu bng mt tp hp cc b mt gii hn phn bn trong ca i tng vi mi trng bn ngoi. V d kinh in
ca B-reps l vic biu din cc mt a gic v cc mnh trn xoay. Phng php biu din theo phn hoch khng gian
(space-partitioning representation) thng c dng m t cc thuc tnh bn trong ca i tng bng cch phn hoch
phn bn trong ca i tng thnh mt tp hp nhiu i tng nh hn.
Trong ha my tnh, cc i tng lp th c th c m t bng cc b mt (surfaces) 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 ch t mt mt cong. Thng thng biu din mt i tng bt k , ngi ta dng cc phng
php xp x a cc mt v dng cc mt a gic (polygon faces). Tuy nhin trong trng hp cc i tng thc s phc
tp, ngi ta thng dng mt hay nhiu mt cong trn (smoothly curved surfaces) ghp ni li vi nhau. Mi thnh phn
dng ghp ni c gi l patch (mt v).
34
10.1. Biu din mt a gic
Phng php B-reps chung nht thng dng biu din cc i tng ba chiu l dng mt tp hp cc mt a gic
xc nh b mt ca i tng. Rt nhiu h thng ha lu tr cc i tng nh l mt tp hp cc mt a gic. Vi cch
biu din ny ta c th n gin ha vic biu din v tng tc hin th cc i tng bi v tt c cc b mt u c m
t bi cc phng trnh tuyn tnh. V l do ny, m t cc i tng thng qua cc mt a gic thng c dng cho cc i
tng ha c s.
Trong mt s trng hp, ta ch c mt kh nng chn la l s dng biu din a gic. Tuy nhin, mt s h thng
ha cn cho php cc kh nng biu din khc v d nh bng cc mt cong spline.
Hnh 5.9 M hnh wireframe ca mt hnh tr
Biu din bng mt a gic ca cc a din cho chng ta mt nh ngha chnh xc v cc c tnh ca cc i tng ny.
Nhng i vi nhng i tng khc ta ch nhn c mt biu din gn ng. Hnh 5.9 cho chng ta biu din mt hnh tr
nh l mt tp hp cc mt a gic. Biu din dng wireframe cho php chng ta hin th i tng rt nhanh. Khi cn th hin
i tng thc hn, ta c th dng k thut to bng ni suy (interpolating shading).
10.1.1. Biu din bng bng a gic
Ta 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 trong 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: cc bng hnh hc v cc bng thuc tnh. Cc bng lu tr d liu hnh hc
cha ta ca 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 texture ca i tng.
Mt cch t chc thun tin lu tr cc d liu hnh hc l to ra ba danh sch: mt bng lu nh, mt bng lu cnh
v mt bng lu a gic. Cc gi tr ta cho mi nh trong i tng c cha trong bng lu nh. Bng cnh cha cc
con tr tr n bng nh cho bit nh no c ni vi mt cnh ca a gic. V cui cng, bng lu a gic cha cc con
tr tr ti bng lu cnh cho bit nhng cnh no to nn a gic.
Ngoi ra, ta cng c th thm mt s thng tin b sung vo cc bng trn x l nhanh hn khi cn truy xut thng tin.
V d, ta c th thm mt con tr t mt cnh n cc a gic cha n. Tng t, ta c th thm thng tin trong bng lu nh
bit nhng cnh no k vi mt nh cho trc .
V cc bng lu thng tin v i tng c th rt phc tp nn vic kim tra tnh ng n v y ca d liu l rt
quan trng.
10.1.2. Phng trnh mt phng
thc hin vic hin th mt i tng ba chiu, ta phi x l d liu nhp thng qua mt quy trnh gm nhiu bc.
Trong mt s bc ny, i khi ta cn thng tin v nh hng ca i tng v c thng tin v nh hng ca tng mt ca
i tng trong khng gian. Nhng thng tin ny c th ly c thng qua ta ca cc nh v phng trnh m t cc mt
a gic ca i tng.
Phng trnh biu din mt phng c dng:
0 = + + + D Cz By Ax (5.1)
trong ( ) z y x , , 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.
Nh bit, xc nh phng trnh mt phng, ta ch cn bit ba im khng thng hng trn mt phng ny. Nh vy,
xc nh phng trnh mt phng qua mt a gic, ta s s dng ta ca ba nh u tin ( )
1 1
, y x , ( )
2 2
, y x , ( )
3 3
, y x ,
trong a gic ny. T (5.1) ta c:
3 , 2 , 1 , 0 , 0 = = + + + k D Cz By Ax
k k k
(5.2)
Dng quy tc Cramer, ta c th xc nh A, B, C, D theo cng thc:
35
3 3
2 2
1 1
z y 1
z y 1
z y 1
A =
3 3
2 2
1 1
z 1 x
z 1 x
z 1 x
B =

(5.3)
1 y x
1 y x
1 y x
C
3 3
2 2
1 1
=
3 3 3
2 2 2
1 1 1
z y x
z y x
z y x
D =


Khai trin cc nh thc trn ta c cng thc tng minh ca cc h s:
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )
( ) ( ) ( )

=
+ + =
+ + =
+ + =
1 2 2 1 3 3 1 1 3 2 2 3 3 2 1
2 1 3 1 3 2 3 2 1
2 1 3 1 3 2 3 2 1
2 1 3 1 3 2 3 2 1
z y z y x z y z y x z y z y -x D
(5.4) y y x y y x y y x C
x x z x x z x x z B
z z y z z y z z y A
Hng ca mt phng thng c xc nh
thng qua vector php tuyn ca n. Vector php tuyn ( ) C B A n , , = , trong A, B, C l cc h s ca phng trnh mt
phng ta va tnh trong (5.4).
Hnh 5.10 Vector php tuyn ca mt phng
V ta thng lm vic vi cc mt bao quanh i tng nn ta cn phn bit hai mt ca mt phng. Mt tip gip vi
phn bn trong ca i tng ta gi l mt trong, mt kia l mt ngoi. Nu cc cnh ca a gic c m t theo chiu ngc
chiu kim ng h, vector php tuyn ca mt phng s hng t trong ra ngoi (gi s h ta biu din i tng l h ta
bn tay phi). V d, trong hnh 5.11, vector php tuyn ca mt phi ca khi lp phng n v (mt c t) c phng
trnh mt phng l x-1=0 v c vector php tuyn tng ng l (1,0,0);
Hnh 5.11 Vector php tuyn hng t trong ra ngoi
Phng trnh mt phng cn c th dng xc nh v tr tng i gia mt im trong khng gian vi mt phng.
Nu im P(x,y,z) khng nm trn mt phng, lc ta c:
Ax + By + Cz + D = 0
Ta c th xc nh P nm pha trong hay nm pha ngoi ca mt phng nh vo du ca biu thc Ax + By + Cz + D:
- Nu Ax + By + Cz + D < 0, im P(x,y,z) nm trong.
- Nu Ax + By + Cz + D > 0, im P(x,y,z) nm ngoi.
Du hiu kim tra trn ng cho h ta bn tay phi v phng trnh mt phng c tnh t ta cc nh a gic
cho theo chiu ngc chiu kim ng h.
x
n=(1,0,0)
y
z
1
1
1
( ) C B A n , , =
36
i khi, s rt hu ch nu ta kho st cc ng v mt thng qua phng trnh tham s ca n.
Phng trnh tham s ca mt mt l mt phng trnh c hai tham s u, v. Mt im bt k trn mt s c ta c
biu din di dng vector tham s : p(u, v) = (x(u, v), y(u, v), z(u, v)). Vi mi cp gi tr (u, v) ta s c mt b cc ta (x,
y, z) biu din mt im trn b mt cho. Cc mt s c phn bit vi nhau bng cc b hm x(), y(), z() khc nhau.
gii hn khng gian ca cc mt, thng thng ngi ta nh li cc ta bin sao cho u, v tng ng bin i trong
on | | 1 , 0 . V d, mt mt cu vi bn knh r, tm ti gc ta c th biu din bng cc phng trnh sau :
x(u, v) = r sin(tu) cos(2tv)
y(u, v) = r sin(tu) sin(2tv)
z(u, v) = r cos(tu)
Trong u, v thay i trong on | | 1 , 0 .
Mt mt phng c th c xc nh bng mt im vi vector v tr c v hai vector a, b khng cng phng (xem hnh
5.12).
Hnh 5.12 Minh ha cch xc nh mt phng
Nhn xt rng bt k im no trn mt phng cng c th c biu din bng mt vector tng sau : p(u, v) = c + au +
bv. y chnh l phng trnh tham s ca mt phng.
Trong phng trnh trn u, v c th bin i trong khong ( ) + , , do mt phng s tri di n v tn. Tuy nhin
trong cc trng hp c th ta ch mun dng mt phn ca mt phng, mt hnh bnh hnh thi chng hn. Cc phn nh vy
c gi l planar patch, lc ta c th tng tng mt phng nh l s ghp ni ca cc planar patch ny.
Mt planar patch c xc nh bng cch gii hn khong bin i ca cc tham s u, v trong phng trnh trn. V d
nu cho u, v bin i trong on [0, 1] ta s c mt patch nh hnh v 5.13.
Trong hnh v ny u, v c bin i trong mt khong khng gian gi l khng gian tham s (parametric space), vic
nh x tng ng cc gi tr u, v c gii hn trn s to ra mt patch trong khng gian tng ng gi l khng gian i
tng.
Hnh 5.13 Cch to ra mt patch
10.1.3. Li a gic (polygon meshes)
Mt s h ha cung cp mt s hm cho php m hnh ha cc i tng. Mt mt phng c th c din t thng
qua mt hm nh fillArea. Nhng khi ta cn lp nhiu planar patch lin tip, dng cc hm li (mesh function) s thun tin
hn. Mt dng thng dng ca li a gic l dy cc tam gic (triagle strip). Hm ny v n-2 tam gic k nhau khi bit n nh.
Dng ny ca li a gic dng trong hu ht cc th vin ha chun hin nay nh OpenGL hay DirectX. Mt dng hm
tng t l li cc t gic (quardrilateral mesh). Hm ny v mt li (n-1)x(m-1) t gic li t dy nxm nh.
c
a
b
c
a
b
(1,0)
(1,1)
(0,1)
(0,0)
Khcng g|cn cc| lUcng
1
1 u
v
Khcng g|cn
lhcm c
37
Khi a gic c m t bi nhiu hn ba nh, cc nh ca n c th khng ng phng. iu ny c th dn n cc li
tnh ton. Mt phng php n gin l phn a gic ny thnh cc tam gic.
Hnh 5.14 - Triangle strip v quadrilateral mesh
10.2. Cc ng cong v mt cong
Hnh nh ca cc ng cong v mt cong c th c to ra t mt tp hp cc hm ton hc nh ngha cc i tng
hoc t mt tp hp cc im trn i tng. Khi i tng c m t bng cc hm ton hc, thng cc th vin ha
cung cp sn nhng hm cho php chiu cc i tng ln mt phng hin th. i vi cc ng cong, cc hm ny s v mt
lot cc im dc theo hnh chiu ca ng m t bi hm ton hc. i vi cc mt cong, mt li a gic xp x vi mt
cong s c to ra. Thng th cc h ha to ra cc li tam gic m bo tnh ng phng ca cc cnh thuc cng
mt polygon patch.
Mt ng cong hoc mt cong c th c din t bng phng trnh ton hc dng tham s hoc khng tham s. Tuy
nhin, trong ha my tnh, thng th dng tham s s thun tin cho x l hn.
Khi i tng c m t bi mt tp hp cc im ri rc, i tng s c hin th thng qua mt mt cong xp x
no da trn nhng im cho. Cc loi ng cong v mt cong dng spline hoc Bezier l nhng ng cong v mt
cong xp x thng dng.
Cc mt cong c th c hnh dng rt phc tp, c bit khi n bao gm nhiu patch kt hp li vi nhau. Trc tin,
chng ta ch kho st cc mt cong kh n gin, k tip chng ta s kho st cc mt phc tp hn.
10.3. Cc mt c quy lut (ruled surfaces)
10.3.1. nh ngha
Ta c hai nh ngha tng ng :
- Mt mt c quy lut l mt mt c to bng cch qut (sweep) mt ng thng trong khng gian theo mt cch
no .
- Mt mt c gi l c quy lut nu qua bt k im no thuc n u c t nht mt ng thng nm hon ton
trn n.
Hnh 5.15 Minh ha mt mt c quy lut
10.3.2. Phng trnh tham s
V mt c quy lut hon ton da trn c s l ng thng vi phng trnh dng tham s l ( ) ( )
1 0
1 vp p v v p + = ,
nn ta c th suy ra dng ca n mt cch tng t nh sau:
( ) ( ) ( ) ( ) u vp u p v v u p
1 0
1 , + = (5.5)
Nu u bin i t u
start
n u
end
, ta thy mt cong s l tp hp ca cc ng thng ni cc cp im tng ng p
0
(u)
(thuc ng cong p
0
(u)) v p
1
(u) (thuc ng cong p
1
(u)) vi u nm trong (u
start
, u
end
).
Nu khng gii hn u, v ta s c mt cong tri di ra v tn, cc mt cong ruled patch s c to bng cch gii hn u,
v trong on [0, 1].
10.3.3. Kho st cc m hnh minh ha
Hnh tr (Cylinder)
38
Hnh tr l hnh c to ra khi mt ng thng L, gi l ng sinh (generator) c qut dc theo mt ng cong
p
0
(u), gi l ng chun (directrix), ng cong p
0
(u) nm trn mt mt phng no .
Hnh 5.16 Minh ha mt hnh tr
T phng trnh tng qut ca mt cong c quy lut :
( ) ( ) ( ) u vd u p v u p + =
0
, , trong ( ) ( ) ( ) u p u p u d
0 1
= (5.6)
do khi qut cc ng thng lun song song vi nhau nn ta c d l hng s, v phng trnh tham s ca hnh tr l :
( ) ( ) vd u p v u p + =
0
,
Mt trong nhng dng quen thuc ca hnh tr l hnh tr trn (circular cylinder) ng vi trng hp ng chun l
hnh trn. Nu ng trn nm trn mt phng xy chng ta s c ( ) ( ) ( ) ( ) 0 , sin , cos
0
u u u p =
Hnh 5.17 Minh ha mt hnh tr trn
Hnh nn (Cone)
Hnh nn l hnh c to ra khi mt ng thng di chuyn dc theo mt ng cong phng cho trc (plane curve),
cc ng thng ny cn c thm tnh cht na l lun i qua mt im c nh gi l nh ca hnh nn.
Hnh 5.18 Minh ha hnh nn
Phng trnh tham s ca hnh nn c dng tng t dng tng qut nhng ( ) u p
0
l hng s :
( ) ( ) ( ) u vp p v v u p
1 0
1 , + = (5.7)
Trong trng hp ny tt c cc ng thng s i qua p
0
ng vi v = 0. ng cong phng m tt c cc ng thng
i qua ng vi v = 1.
10.4. Cc mt trn xoay (surfaces of revolution)
cUcng chUcn
cUcng |nh
y
x
z
cUcng chUcn
cUcng |nh
c|nh ncn
39
Mt trn xoay c to ra khi chng ta quay trn mt ng cong phng C no quanh mt trc. Hnh v 5.19 minh
ha mt ng cong C nm trong mt phng xz v quay quanh trc z. C thng c gi l mt ct nghing v c cho bi
phng trnh tham s ( ) ( ) ( ) ( ) v z v x v c , = trong v bin i trong khong ( )
end start
v v , no .
Hnh 5.19 Minh ha mt mt trn xoay
i vi mt trn xoay, mi im ( ) ( ) ( ) v z v x , thuc C c qut xung quanh mt trc ta di s kim sot ca tham
s u, u l gc m mi im c quay quanh trc. Cc v tr khc nhau ca ng cong C quanh trc c gi l cc ng
kinh tuyn (meridians). Khi im ( ) ( ) ( ) v z v x , 0 , c quay bi u radian, n s tr thnh ( ) ( ) ( ) ( ) ( ) ( ) v z u v x u v x , sin , cos . Nu
quay im ny mt vng quanh trc chng ta s nhn c mt hnh trn. Nh vy, ng vi v l hng s, ng bin s l
cc ng trn v cc ng ny c gi l cc ng v tuyn ca mt. Kinh tuyn ti v c bn knh l x(v) v nm trn
cao z(v) so vi mt phng xy, do mt im bt k trn mt dng ny s c vector v tr :
( ) ( ) ( ) ( ) ( ) ( ) ( ) v z u v x u v x v u p , sin , cos , = (5.8)
Nhn xt : Nu ng cong c(v) l ng thng song song vi trc z v cch z mt n v, tc l c(v) = (1, v) th khi
ng ny qut quanh trc z s to ra mt hnh tr.
Mt cu l trng hp n gin nht ca dng mt trn xoay. ng cong C trong trng hp ny chnh l na ng
trn cho bi cc im ( ) ( ) ( ) v R v R sin , cos , v chy trong khong t -t/2 n t/2. Lc ny phng trnh hnh cu s c dng :
( ) ( ) ( ) ( ) ( ) ( ) ( ) v R u v R u v R v u p sin , sin cos , cos cos , = (5.9)
trong -t/2 s v s t/2, 0 s u s 2t.
Hnh 5.20 - Minh ha mt cu
10.5. Cc mt cong bc hai
Mt lp mt cong rt thng dng l cc mt cong bc hai. Chng c biu din bi cc phng trnh bc hai. Mt cu
cng thuc lp mt cong ny. Ngoi ra cn c mt ellipsoid, paraboloid v hyperboloid. Cc mt bc hai thng l cc i
tng c s ca cc h ha. Nhng i tng khc phc tp hn c th c to ra t nhng i tng ny. Phng trnh
tng qut biu din cc mt cong loi ny l:
Ax
2
+ By
2
+ Cz
2
+ Dxy + Eyz + Fzx + Gx + Hy + Iz + J = 0
10.5.1. Mt cu
Trong h ta Decartes, mt cu bn knh R vi tm t ti gc ta xc nh bi tp cc im c ta (x,y,z) tha
phng trnh:
x
2
+ y
2
+ z
2
= R
2
(5.10)
Phng trnh (5.10) thng gi l phng trnh chnh tc ca mt cu.
Nh phn trc cp, ta c th biu din mt cu bng phng trnh tham s:
z
y x
v| lUyen
k|nh lUyen
x
y=p
z
y=p
40
x = Rcos cosu, -t/2 s s t/2
y = Rcos sinu, -t s u s t (5.11)
z = Rsin
Hnh 5.21 Cc tham s biu din mt cu
10.5.2. Ellipsoid
Ellipsoid c th coi l mt m rng ca mt cu vi ba bn knh khc nhau R
x
, R
y
, R
z
(xem hnh 5.22). Phng trnh
chnh tc ca mt ellipsoid c dng:
1
2
2
2
2
2
2
= + +
z y x
R
z
R
y
R
x
(5.12)
V phng trnh tham s ca ellipsoid theo hai gc v u c dng:
x = R
x
cos cosu, -t/2 s s t/2
y = R
y
cos sinu, -t s u s t (5.13)
z = R
z
sin
Hnh 5.22 - Ellipsoid vi cc bn knh Rx, Ry, Rz
10.6. V NG CONG V MT CONG BNG BEZIER V B-SPLINE
Chng ta kho st cc ng cong v mt cong tng i n gin v tm ra cc cng thc ton hc tng ng
biu din chng. Tuy nhin trong thc t vic tm ra cc cng thc biu din cc ng v mt phc tp khng n gin
cht no. Trong phn ny chng ta s kho st cc phng php cho php to ra cc ng cong v mt cong khc nhau da
trn d liu m t chng.
Bi ton t ra y l : Vi mt ng cong cho trc m ta cha xc nh c cng thc hay cng thc rt phc tp,
v tp nh cc im phn bit p
1
, p
2
, ... m t hnh dng ca ng cong ny, lm th no xy dng c ng cong ban
u vi mt chnh xc no .
C hai cch gii quyt l :
- nh ta ca mt s im no thuc ng cong, sau tm cc phng trnh ton hc v hiu chnh chng
chng i qua ht cc im trn v trng khp vi ng cong ban u.
- Cch khc l xc nh mt s cc im gi l im kim sot (control points) v dng mt gii thut no xy
dng ng cong da trn cc im ny. Do ng cong nguyn thy v ng cong do my tnh to ra thng
khng ng nht ln u to ra, chng ta s di chuyn mt s im iu khin v cho pht sinh li ng cong mi
da trn tp cc im mi to. Qu trnh ny lp i lp li cho ti khi tm ra ng cong tha mn ph hp vi ng
cong ban u th thi. Lc ny, ng cong c xy dng bi mt tp rt t cc im iu khin v c th c pht
sinh li khi cn.
Trong phn ny chng ta s nghin cu theo hng tip cn th hai xy dng cc ng cong v mt cong l xy
dng da trn cc ng cong Bezier v B-Spline.
z
y
x
r
x
r
z
r
y
z
x
y
P=(x,y,z)
u

41
10.6.1. V cc ng cong Bezier
Thut ton Casteljau
Thut ton ny da trn tp cc im cho trc tm ra cc gi tr p(t) khi t thay i. Lc ny do ng cong c xy
dng ph thuc vo tp cc im cho trc nn khi thay i cc im ny ng cong s thay i theo.
Chng ta bt u qu trnh vi vic xy dng ng cong t ba im cho trc p
0
, p
1
, p
2
nh hnh v 5.23.
Hnh 5.23 - Thut ton Casteljau cho ba im
Chn mt gi tr t no trong on | | 1 , 0 , chia on
1 0
p p theo t s t c ( ) t p
1
0
, chia
2 1
p p theo t s t c ( ) t p
1
1
.
Ta c :
( ) ( )
1 0
1
0
1 tp p t t p + =

(5.14a)
( ) ( )
2 1
1
1
1 tp p t t p + =

(5.14b)
Lp li bc ni suy tuyn tnh trn vi cc im ( ) t p
1
0
v ( ) t p
1
1
ta c ( ) t p
2
0
. Bng cch ny khi cho t chy trong
on [0,1], ta s c ng cong ( ) ( ) t p t p
2
0
= .
Ta c :
( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
( ) ( )
2
2
1 0
2
2 1 1 0
1
1
1
0
2
0
1 2 1
1 1 1
1
p t tp t p t
tp p t t tp p t t
t tp t p t t p
+ + =
+ + + =
+ =


y l hm bc hai theo t nn ng cong s c dng parabol.
Tng qut, cho (L+1) im p
0
, p
1
, .., p
L
, bng phng php ni suy tng t, ng vi mi t thay i trong [0, 1] ta s tm
ra c mt gi tr p(t) qua L bc. Trong cc im bc th r c to ra t cc im bc th (r-1) theo phng trnh
sau :
( ) ( ) ( ) ( ) t tp t p t t p
r
i
r
i
r
i
1
1
1
1

+

+ = (5.15)
vi r = 1, .., L; i = 0, .., L-r; v p
i
0
= p
i.

Cc im to ra bc cui cng p
0
L
(t) c gi l ng cong Bezier ca cc im p
0
, p
1
, ..., p
L
. Cc im p
0
, p
1
, ..., p
L

c gi l cc im kim sot (control points) hay im Bezier (Bezier points) v a gic to bi cc im ny c gi l a
gic kim sot (control polygon) hay a gic Bezier (Bezier polygon).
Dng Bernstein ca ng cong Bezier
Cng thc ng cong Bezier da trn (L+1) im p
0
, p
1
, ..., p
L
c th c vit li nh sau :
( ) ( ) t B P t P
L
0 k
L
k k
=
= (5.16)
trong B
k
L
c gi l a thc Bernstein (Bernstein polynomial) c cho bi cng thc sau :
( ) ( ) ( )
k k L k
L
k k L
t t C t t
k
L

=
|
|
.
|

\
|
= 1 1 t B
L
k
(5.17)
( )! !
!
k L k
L
C
k
L

=
khi L>=k v bng 0 cho cc trng hp cn li.
D dng nhn thy a thc Bernstein B
k
L
(t) chnh l cc thnh phn khi khai trin biu thc ((1-t)+t)
L
, do tng ca
cc B
k
L
(t) lun c gi tr 1vi mi gi tr ca t.
( ) 1 t B
L
0 k
L
k
=

=
(5.18)
P
1
P
0
P
2
P
1
1
(t)
P
0
1
(t)
P
0
2
(t)
42
Hnh v sau minh ha bn a thc Bernstein bc ba khi t bin i trong [0, 1]
Hnh 5.24 Cc a thc Bernstein bc ba
Cc hm B
k
L
(t) thng c gi l cc hm trn (blending functions) v vector p(t) c th c xem c pha trn t
cc vector p
0
, p
1
, ..., p
L
. Vi mi gi tr t, mi a thc Bernstein xc nh mt t l hay trng lng cho cc vector tng ng.
Theo di hnh v 5.25, ta thy khi t = 0.3, bn a thc tng ng vi p
0
, p
1
, p
2
, p
3
, p
4
cho cc gi tr 0.343, 0.441, 0.189, 0.027.
Tng ca bn vector c gia trng bi cc trng lng ny chnh l vector p(0.3).
Hm trn ny l mt a thc c bc nh hn s lng cc im kim sot . Ba im s cho mt parabol, bn im s cho
mt ng cong bc ba.
Thng thng, s lng cc im kim sot c th nh l ty cho vic xy dng ng cong Bezier , tuy nhin iu
ny i hi nhng tnh ton phc tp khi lm vic vi cc hm a thc bc cao. Chng ta khc phc iu ny bng nhn xt :
Mt ng cong phc tp bao gi cng c th ghp t nhng on khc nhau, do trn nhng on con ny chng ta xy
dng cc ng cong Bezier c bc nh hn.
Hnh 5.25 Hm trn ca cc a thc
Vic to cc ng cong phc tp bng cch ghp ni cc on nh hn cho php ngi dng kim sot nhng thay i
cc b (local variation) ca ng cong tt hn. V ng cong Bezier i qua
hai im u v cui, nn rt d dng kt hp cc on cong (lin tc bc 0).
Hn na, ng cong Bezier cn c mt tnh cht quan trng na l tip
tuyn vi ng cong ti mt im u hoc cui th nm trn ng thng
ni im vi im kim sot k n. Do , nhn c s lin tc bc
mt gia cc on cong, ta ch cn t cc im kim sot sao cho cc im
p
n-1
v p
n
ca mt on cong trc v cc im p
0
v p
1
ca on cong k tip
nm trn cng mt ng thng. Hnh v 5.26 minh ha qu trnh nhn c
s lin tc bc 0 v lin tc bc 1 khi ghp ni hai on cong Bezier bng
cch cho P
0
= P
2
v cho cc im P
1
, P
2
v P
1
thng hng. i vi cc
ng cong Bezier thng khng i hi tnh lin tc bc hai.
Hnh 5.26 Ghp ni hai on cong
Ci t minh ha thut ton v ng cong Bezier qua (N+1) im kim sot
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>

1
1 t
f(t)
B
0
3
(t)
B
1
3
(t)
B
2
3
(t)
B
3
3
(t)
y
x
p
0
p
1
p
2
p
3
p
1
p
2
p
0
p'
0
p'
1
p'
2
p'
3
43
#define MAXPOINTS 100 // So diem kiem soat toi da
#define MAXSEG 100 // So diem toi da thuoc duong cong

typedef struct
{
int x;
int y;
}POINT;

// Kieu mang cac diem thuoc duong cong
typedef POINT BEZPOINT[MAXSEG+1];

// Kieu mang cac diem kiem soat
typedef POINT CTRLPOINT[MAXPOINTS+1];

// Kieu mang luu he so C(k, N)
typedef long COEFF[MAXPOINTS+1];

// Tinh he so aCoeff[i] = C(k, n) = N!/k!*(N-k)! = (k+1)(k+2)....N)/(N-k)!;
// aCoeff co (N+1) phan tu danh so tu 0 den N
void ComputeCoefficient(COEFF aCoeff, int N)
{
for(int k=0; k<=N; k++)
{
aCoeff[k] = 1;
for(int j=N; j>k; j--)
aCoeff[k] *= j;
for(j=2; j<=N-k; j++)
aCoeff[k] /= j;
}
}

// Tinh t^k*(1-t)^N-k
float BlendingFunc(float t, int N, int k)
{
float fRes;

fRes = 1;
for(int i=0; i<k; i++) // Tinh t^k
fRes *=t;
for(i=0; i<N-k; i++) // Tinh (1-t)^N-k
fRes *=(1-t);
return fRes;
}

/*
44
Phat sinh mot diem thuoc duong cong ung voi mot gia tri t nao do
aCtrlPt : Mang cac diem kiem soat (N+1)
N : So diem kiem soat
aCoeff : Mang luu he so C(k, N) da duoc tinh truoc khi goi
t : gia tri thuc.
*/

POINT FindBezPt(CTRLPOINT aCtrlPt, int N, COEFF aCoeff, float t)
{
POINT BezPt;
float B, x, y;

x = 0;
y = 0;

for(int k=0; k<=N; k++)
{
B = BlendingFunc(t, N, k);
x += aCtrlPt[k].x*aCoeff[k]*B; // pk*B(k, N)
y += aCtrlPt[k].y*aCoeff[k]*B;
}

BezPt.x = x;
BezPt.y = y;

return BezPt;
}

// Phat sinh cac diem thuoc duong cong Bezier voi (N+1) diem kiem soat
void BezCurve(BEZPOINT aBezPt, int NumBezPt, CTRLPOINT aCtrlPt,
int N)
{
COEFF aCoeff;
POINT Pt;

ComputeCoefficient(aCoeff, N);

for(int i=0; i<=NumBezPt ; i++)
{
aBezPt[i] = FindBezPt(aCtrlPt, N, aCoeff, (1.0*i)/NumBezPt);
}
}

// Ve da giac kiem soat
void DrawCtrlPt(CTRLPOINT aCtrlPt, int N)
{
45

for(int i=0; i<N; i++)
line(aCtrlPt[i].x, aCtrlPt[i].y, aCtrlPt[i+1].x, aCtrlPt[i+1].y);
}

// Ve duong cong Bezier
void DrawBezCurve(BEZPOINT aBezPt, int NumBezPt)
{

for(int i=0; i<NumBezPt; i++)
line(aBezPt[i].x, aBezPt[i].y, aBezPt[i+1].x, aBezPt[i+1].y);
}
Cc ng cong Bezier bc ba
Nh nhn xt trn, phc tp tnh ton ca cc ng cong Bezier tng nhanh theo bc ca chng. Trong thc t,
nhiu h ha ch cung cp cc hm v ng cong Bezier bc ba, cc ng cong ny c pht sinh bi bn hm trn
) (
3
0
t B , ) (
3
1
t B , ) (
3
2
t B , ) (
3
3
t B . Ta c cng thc tng minh ca cc a thc ny nh sau:
3 3
3
2 3
2
2 3
1
3 3
0
) (
) 1 ( 3 ) (
) 1 ( 3 ) (
) 1 ( ) (
u t B
t t t B
t t t B
t t B
=
=
=
=
(5.19)
Khai trin cc a thc biu din cc hm trn trn, ta c th vit hm Bezier bc ba di dng ma trn nh sau:
( )
|
|
|
|
|
.
|

\
|
=
3
2
1
0
2 3
1 ) (
p
p
p
p
M t t t t p
Bez
(5.20)
trong ma trn Bezier c gi tr:
|
|
|
|
|
.
|

\
|



=
0 0 0 1
0 0 3 3
0 3 6 3
1 3 3 1
Bez
M (5.21)
Ti hai u cui ca ng cong Bezier bc ba, phng tip tuyn (o hm bc mt) c gi tr:
p(0) = 3(p
1
- p
0
), p(1) = 3(p
3
- p
2
)
o hm bc hai ti cc im ny ln lt s l:
p(0) = 6(p
0
- 2p
1
+ p
2
), p(1) = 6(p
1
- 2p
2
+ p
3
)
Ta c th dng cc biu thc trn to ra cc ng cong c trn bc mt hoc bc hai t cc on cong v bng
hm Bezier bc ba.
Cc tnh cht ca ng cong Bezier
- Lun i qua im u v im cui
ng cong Bezier da trn cc im kim sot p
0
, p
1
, .., p
L
khng hon ton i qua hay ni suy t tt c cc im kim
sot nhng n lun lun i qua im u v im cui. y l tnh cht cc k th v bi v n cho php chng ta bit chnh
xc ni bt u v kt thc ca ng cong Bezier.
Tht vy, ta c a thc Bernstein cho cc im u p
0
v cui p
L
ln lt l B
0
L
(t) = (1-t)
L
v B
L
L
(t) = t
L
. Do , vi t=0,
ta c : p(0) = p
0
v vi t =1 th p(1) = p
L
.
- Tnh bt bin affine (Affine invariance)
Khi thc hin php bin i affine cho mt ng cong Bezier ta khng cn phi bin i ht cc im thuc ng cong
m ch cn bin i cc im kim sot, sau to li ng cong Bezier da trn tp cc im kim sot mi ny. iu ny
46
c ngha l ng cong Bezier bt bin vi php bin i affine.
Tht vy : Xt ng cong
( ) ( ) t B p ) (
L
0 k
L
k k
=
+ = tr M t q (5.22)
q(t) l ng cong Bezier c to ra bi tp im kim sot q
k
=(p
k
M+tr) l nh ca p
k
qua php bin i affine vi ma
trn bin i M v vector tnh tin tr. Ta s chng minh ng cong ny cng chnh l nh ) ( ' t p
: ( ) tr M t p +
|
|
.
|

\
|
=

=
t B p ) ( '
L
0 k
L
k k
(5.23) ca ng cong Bezier p(t).
T (5.15) ta c :
( ) ( ) ( ) t rB t B p
L
0 k
L
k
L
0 k
L
k k
= =
+ = t M t q
( ) ( ) ( ) t B t B p
L
0 k
L
k
L
0 k
L
k k
= =
+ = tr M t q
nhng tng ( ) 1 t B
L
0 k
L
k
=

=
nn ta suy ra iu cn chng minh.
- Tnh cht bao li (Convex hull property)
ng cong Bezier khng bao gi nm ngoi bao li ca n.
Ta bit bao li ca mt tp cc im p
0
, p
1
, ..., p
L
l mt a gic li nh nht cha tt c cc im . N cng chnh l
tp tt c cc t hp li :

=
L
k
k k
p
0
o trong o
k
> 0 v

=
=
L
k
k
0
1 o (5.24)
p(t) chnh l t hp li ca cc im kim sot ca n vi mi gi tr ca t v cc gi tr ca cc a thc Bernstein khng
m v c tng l 1 nn mi im ca ng cong Bezier s lun nm trong bao li ca cc im kim sot.
- Tnh cht chnh xc tuyn tnh (Linear precision)
ng cong Bezier c th tr thnh mt ng thng khi tt c cc im kim sot nm trn mt ng thng, bi v lc
ny bao li ca ng cong Bezier l ng thng.
S giao im ca mt ng thng hay mt phng bt k vi ng cong Bezier lun nh hn s giao im ca n vi a
gic kim sot.
Dng ma trn ca ng cong Bezier
Ta biu din li tp cc a thc Bernstein v tp cc im kim sot di dng vector nh sau :
( ) ( ) ( ) ( ) ( ) t B t B t B t B
L
L
L L L
,..., ,
1 0
=
( )
L
p p p P ,..., ,
1 0
=
Lc ny ( ) ( ) P t B t p
L
. =
Hay vit di dng nhn ma trn l ( ) ( )
T L
P t B t p . = . Vi P
T
l chuyn v ca P.
Ta c th vit li a thc Bernstein di dng sau :
( )
( )( )
L
L
L
L
L
k
a a a t t t
t a t a t a a t B
,..., , ,..., ,
...
1 0
1 0
2
2 1 0
=
+ + + + =

Do ta c : ( ) ( )
T L L
P Bez t Pow t p =
Trong : ( ) ( )
L L
t t t t Pow ,..., ,
1 0
= .
v
L
Bez l ma trn m mi dng i ca n chnh l b ( )
L
a a a ,..., ,
1 0
ca biu din a thc ( ) t B
L
i
. Ta s tnh c :
( ) ( )
|
|
.
|

\
|
|
|
.
|

\
|
= =

j
i
i
L
m Bez
i j
ij
L
1 (5.25)
47
10.6.2. ng cong Spline v B-Spline
Vi ng cong Bezier, ta c th to ra cc dng ng cong khc nhau bng cch hiu chnh cc im kim sot cho ti
khi c c dng ng cong tha mn yu cu t ra ban u. Tuy nhin, vic hiu chnh tht khng n gin cht no nu ta
quan st qu trnh c m t bng hnh 5.27, trong mt phn ca ng cong Bezier ng v phn cn li th cn phi
hiu chnh thm.
Chng ta c 5 im kim sot v ng cong Bezier c to ra t chng c nt lin so vi ng cong m ta cn phi
v c nt gch t qung. Ta nhn thy rng vi t gn 0 th ng cong Bezier c v khp so vi ng cong cn v nhng li
lch khi t gn 1. Chng ta s di chuyn p
2
, p
3
ln mt t ng cong Bezier khp vi ng cn v, tuy nhin iu ny li
gy ra hiu ng lm cho phn u ca ng cong lch i.
Hnh 5.27 Hiu chnh mt ng cong
Nh vy, kh khn y l do khi ta thay i bt k mt im kim sot no th ton b ng cong cng s b thay i
theo. iu ny tht d hiu do tt c cc a thc Bernstein u khc 0 trn ton on [0,1].
gii quyt bi ton ny ta s s dng mt tp cc hm trn khc nhau R
0
(t), R
1
(t), ... ch khng phi ch mt hm
B
k
L
(t) nh trong trng hp Bezier. Cc hm trn ny c gi mang (on trn hm ly gi tr khc 0) ch l mt phn ca
on [0, 1], ngoi gi mang ny chng c gi tr l 0. Bng cch ny, ng cong ch ph thuc vo mt s im kim sot m
thi.
Cc hm trn m ta cp n y chnh l tp cc a thc c nh ngha trn cc on k nhau khi ni li vi
nhau to nn mt ng cong lin tc. Cc ng cong nh vy c gi l a thc ring phn (piecewise polynomials).
V d ta nh ngha hm g(t) bao gm ba a thc a(t), b(t), c(t) nh sau :
( )
( )
( )
( ) ( )

=
|
.
|

\
|
=
=
=
2
2
2
3
2
1
2
3
4
3
2
1
t t c
t t b
t t a
t g (5.26)
Gi mang ca g(t) l [0, 3], ca a(t) l [0, 1], ca b(t) l [1, 2], ca c(t) l [2, 3].
Cc im ti cc on ng cong gp nhau c gi l cc im ni (joints), v gi tr t ti cc im c gi l nt
(knot).
C th kim chng c g(t) lin tc ti mi ni trn gi mang ca n, nn ng cong ti cc ch ni l trn. g(t) l mt
v d ca hm Spline.
Ucng ccng
h|eU ch|nh
P
1
P
0
P
2
P
3
P
4
Ucng ccng
h|eU ch|nh
Ucng
mUcn ve
(b)
P
1
P
0
P
2
P
3
P
4
Ucng
mUcn ve
(a)
48
Hnh 5.28 Cc thnh phn ca mt a thc ring phn
nh ngha hm Spline
Mt hm Spline cp M l mt a thc ring phn cp M c cc o hm cp (M-1) lin tc mi nt.
R rng theo nh ngha th g(t) l mt Spline bc hai.
nh ngha ng cong Spline
Ta xy dng ng cong p(t) da trn (L+1) im kim sot bng cch s dng cc hm Spline lm cc hm trn nh
sau :
- Xy dng tp cc nt t
0
, t
1
, .., vi t
i
e R v t
i
s t
i+1
.
- Vector T = (t
0
, t
1
, ... ) c gi l vector nt.
- Vi mi im kim sot p
k
ta kt hp n vi mt hm trn tng ng l R
k
(t). R
k
(t) l a thc ring phn lin tc trn
mi on con [t
i
, t
i+1
] v lin tc ti mi nt.
Khi : ( ) ( )

=
=
L
k
k k
t R p t p
0

Cc on ng cong ring phn ny gp nhau ti cc im nt v lm cho ng cong lin tc. Ta gi nhng ng
cong nh vy l ng cong Spline.
Vn c t ra tip y : Cho trc mt vector nt, c tn ti hay khng h cc hm trn sao cho chng c th pht
sinh ra mi ng cong Spline c nh ngha trn vector nt . Mt h cc hm nh vy c gi l c s cho Spline,
ngha l bt k ng cong Spline no cng c th c a v cng mt cng thc bng cch chn a gic kim sot ph hp.
Cu tr li l c nhiu h hm nh vy, nhng c bit c mt h hm trn c gi mang nh nht l B-Spline (B l t
vit tt ca basis).
nh ngha ng cong B-Spline
Mt ng cong B-Spline cp m xy dng da trn vector nt T v (L+1) im kim sot p
k
c dng :
( ) ( )

=
=
L
k
m k k
t N p t p
0
,

Trong N
k,m
(t) l a thc c bc (m-1) c cng thc quy :
( ) ( ) ( ) t N
t t
t t
t N
t t
t t
t N
m k
k m k
m k
m k
k m k
k
m k 1 , 1
1
1 ,
1
. +
+ +
+

+
|
|
.
|

\
|

+
|
|
.
|

\
|

= ,
k=0, 1, .., L
vi ( )

< s
=
+
lai con neu 0
t neu 1
1 k
1 ,
t
t t
t N
k
k

g(t)
t 1 2 3
1/2
3/4
join
b(t)
a(t)
Knot
c(t)
span
Support
49
Cc im t
i
c th c xc nh theo nhiu cch khc nhau. Mt trong cc cch l cho t
i
= i, lc ny khong cch
gia cc im nt l bng nhau. Hay ta c mt cch nh ngha khc :

> +
s s + =
L i neu 2, m L
L i m neu 1, m L
m < i neu 0,
i
t
vi i = 0, ,L+m.
10.6.3. Thit k cc mt cong da trn Bezier v B-Spline.
m t v v cc mt cong ta cng c th dng cc hm trn Bezier v B-Spline tng t nh trong trng hp ng
cong.
Cc mnh Bezier (Bezier surface patches)
Xt ng cong Bezier nh l mt hm theo tham s v v c cc im kim sot thay i theo u. Ta c cng thc :
( ) ( ) ( )

=
=
L
k
L
k k
v B u p v u p
0
,
Lc ny, khi u thay i ta s c cc im kim sot thay i ko theo ng cong Bezier cng thay i theo. S bin
thin ca cc ng cong Bezier ny trong khng gian s to ra mt mt cong.
Khi u thay i, cc im p
k
(u) s thay i trn mt ng cong no . Nu cho cc ng cong ny chnh l cc ng
cong Bezier, mi ng cong da trn (M+1) im kim sot th :
( ) ( )

=
=
M
i
M
i k i k
u B p u p
0
,

Lc ny :
( ) ( ) ( )

= =
=
M
i
L
k
L
k
M
i k i
v B u B p v u p
0 0
,
,
Ta gi y l dng tch tensor ca mnh Bezier.
Dn cc mnh Bezier li vi nhau
Mc ch l to ra mt dng mt cong phc tp gm nhiu mnh Bezier kt hp li vi nhau sao cho trn tru ti cc
bin chung.
Khi dn hai mnh Bezier li vi nhau (mi mnh c mt khi a din kim sot ring v cng s dng cng thc trn
vi u,v bin thin trong on [0, 1]), vn l lm sao chng c th dn vo nhau mt cch trn tru ?
Hai mnh s gn vo nhau tt c cc im dc bin chung nu cc a din kim sot ca chng trng khp vi nhau
bin. iu ny c c l do dng ca ng cong Bezier bin ch ph thuc vo a gic kim sot nm bin ca khi a
din kim sot. Do , dn c ta ch cn chn cc a gic kim sot bin cho hai mt l trng nhau.
Hnh 5.29 - Minh ha hai mnh Bezier dn li vi nhau
V tnh lin tc ti tip tuyn, iu kin l mi cp cnh ca cc khi a din ti bin phi l cng tuyn.
Cc mnh B-Spline (B-Spline patches)
Cc hm B-Spline c th dng dng tch tensor thay cho dng a thc Bernstein t c tnh kim sot cao hn khi
thit k mt cong :
lcnh T
lcnh 2
u
v
u
v
50
( ) ( ) ( ) v N u N p v u p
M
i
m k
L
k
m i k i
= =
=
0
,
0
, ,
,
Khi a din kim sot c (M+1)x(L+1) nh v u, v bin thin t 0 ti gi tr ln nht ca nt trong cc vector nt tng
ng ca chng.
Thng thng thit k, ngi ta vn dng cc B-Spline cp 4 (tc l cubic B-Spline) v do vic chn s im kim
sot khng hn ch (s lng cc im khng nh hng n bc ca a thc nh i vi ng cong Bezier) nn ngi ta c
th to ra cc dng mt cong rt phc tp. Tt nhin trc , ngi ta phi chn ra mt a din nt (knot polyhedron) to
ra mt cong c dng mong mun.
TM TT
Chng ta va tm hiu mt trong cc m hnh dng v cc i tng ba chiu trn my tnh : l m hnh khung ni kt. Theo m hnh ny, mt
i tng ba chiu c th c m t bi tp cc nh v tp cc cnh, do cc i tng c th hin cha c gn thc t lm, n mi ch l khung rng
ca i tng m thi. Sau ny bng cc k thut t mu, kh cc ng v mt khut chng ta s khc phc c cc hn ch ny.
v cc i tng ba chiu bng m hnh khung ni kt, mi cnh phi c chiu theo mt cch no t ta ba chiu sang hai chiu. Qua
chng ta cng tm hiu hai php chiu kh n gin lm vic ny l php chiu trc giao v php chiu phi cnh. Php chiu trc giao ch n gin
l b i mt trong ba ta ca im chiu bng cch cho cc tia chiu song song vi mt trong cc trc ta . Php chiu phi cnh th s dng mt im c
nh gi l mt v hnh chiu ca cc im c xc nh bng giao im ca tia chiu (ni im chiu v mt ) vi mt phng quan st. Php chiu phi cnh
hi t ti mt nn i tng cng xa trng cng nh v ngc li.
Cc php chiu trc giao v phi cnh u bo ton ng thng, y l mt tnh cht rt hay gip ta v cc ng thng ba chiu n gin hn v ch
cn xc nh hai hnh chiu ca hai im u v cui m thi.
Biu din cc mt trong ha my tnh l mt vn lun c t ra khi mun m t cc i tng lp th trong th gii thc. Chng ta kho st
v cc phng php biu din mt phng v mt cong thng qua dng phng trnh tham s. Trong , phng trnh tham s ca mt mt c dng l mt
phng trnh tham s hai bin p(u, v) v mt im bt k trn mt s c biu din di dng p(u, v) = (x(u, v), y(u, v), z(u, v)). Chng ta kho st mt s
mt n gin nh cc mt c quy lut v cc mt trn xoay minh ha cho vic xc nh cc hm x(), y(), z() trong biu din trn.
Vic to ra cc ng cong theo mun cng l vn thng gp khi lm vic vi ha my tnh. Chng ta kho st cch tip cn v ng
cong bng Bezier v B-Spline. Cch tip cn ny da trn c s v ng cong bng mt tp im m t hnh dng ca ng cong gi l tp im kim
sot. Khi thay i tp im ny, hnh dng ca ng cong s thay i theo. Cch tip cn ny cho thy s thun li v linh hot khi cn phi v cc ng
cong phc tp v do n c dng nhiu trong thit k.
Mt nhc im trong cch v ng cong bng Bezier l khi mt phn ng cong t yu cu, nhng khi hiu chnh phn cn li s lm mt i
phn t yu cu. khc phc vn ny ta c cch tip cn ci tin v ng cong bng B-Spline.
Trn c s ca vic v cc ng cong bng Bezier v B-Spline chng ta cng c th xy dng c cc mt cong Bezier v B-Spline.
BI TP
56. Vit chng trnh cho php ngi dng nh ngha mt vt th ba chiu bng m hnh khung ni kt. V vt th trn dng
ln lt php chiu trc giao v php chiu phi cnh.
57. Vit chng trnh v cc mt n gin c kho st nh hnh tr, hnh nn, hnh cu, .
58. Nhn xt cch tip cn v ng trong thut ton Casteljau khc vi cch tip cn v cc i tng ha c s chng
trc nh th no ?
59. Ci t thut ton v ng cong bng Bezier cho php ngi dng nh ngha tp im kim sot m t hnh dng ng
cong v cho php ngi dng hiu chnh mt s im kim sot hiu chnh ng cong theo mun.
60. Vit chng trnh v ng Spline
61. Vit chng trnh v cc mt Bezier.



51
CHNG 6
CC PHP BIN I TRONG HA BA CHIU
Cc php bin i trong ha ba chiu l s m rng ca cc php bin i trong ha hai chiu bng cch thm vo
vic xem xt ta th ba, ta z. By gi, chng ta s tnh tin mt i tng thng qua vic m t mt vector tnh tin ba
chiu. Vector ny xc nh di ca vt theo ba chiu trong khng gian. Tng t nh vy, ta c th thu phng i tng vi
cc t l bin i theo c ba chiu. S m rng ca php quay t hin nhin hn hai php bin i c s trn. Khi kho st cc
php quay trong mt phng hai chiu Oxy, ta ch cn kho st php quay quanh mt tm, hay ni cch khc, php quay quanh
mt trc vung gc vi mt phng Oxy. Trong khng gian ba chiu, ta c th chn mt trc quay c phng bt k. Phn ln
cc h ha x l php quay trong khng gian ba chiu nh l t hp ca ba php quay vi trc quay l cc trc ta x, y v
z. Nh vy, ngi dng c th d dng xy dng mt php quay bt k bng cch m t trc quay v gc quay.
Cng nh khi trnh by cc php bin i trong ha hai chiu, trong chng ny, ta s kho st cc php bin i
trong ha ba chiu di dng ma trn. Mt chui bt k cc php bin i s c biu din bng mt ma trn duy nht l
tch ca cc ma trn tng ng vi cc php bin i thnh phn.
11. CC PHP BIN I HNH HC
Hnh 6.1 Mt cnh ba chiu c to nh cc php bin i
Php tnh tin, quay, bin i t l, v php bin dng l cc v d ca cc
php bin i hnh hc. Chng cn c bit ti nh l cc php bin i affine
c s. Trong s , php quay c th ni l quan trng v hu dng nht v n
cho php chng ta nhn cc i tng theo cc hng khc nhau, iu ny cho
php chng ta cm nhn cc hnh v ba chiu trc quan hn, d chu hn.
Ta c th to ra nhiu phin bn ca cng mt i tng bng cch v i
tng ny sau khi p dng mt dy cc php bin i hnh hc ln n (xem hnh 6.1).
11.1. Mt s khi nim lin quan
11.1.1. Php bin i affine
Php bin i affine l php bin i tuyn tnh, kh nghch. Php bin i ny bo ton tnh song song ca cc ng
thng cng nh bo ton tnh t l v khong cch ca cc on thng. Tuy nhin, php bin i ny khng bo ton gc
nghing v chiu di cc on thng. Cc php bin i ny cng bo ton t l v khong cch (xem thm chng 3)
Cc h trc ta theo quy c bn tay phi v bn tay tri
Hnh 6.2 Cc h ta theo quy c bn tay phi (a)
v quy c bn tay tri (b)
H ta Descartes ba chiu c th nh ngha theo quy c bn tay tri hoc bn tay phi (xem hnh 6.2).
nh ngha
- H ta theo quy c bn tay phi l h ta vi cc trc x, y, z tha iu kin: Nu bn tay phi sao cho ngn
ci hng cng chiu vi trc z, khi nm tay li, chiu cc ngn tay chuyn ng theo hng t trc x n trc y.
- H ta theo quy c bn tay tri l h ta vi cc trc x, y, z tha iu kin: Nu bn tay tri sao cho ngn
ci hng cng chiu vi trc z, khi nm tay li, chiu cc ngn tay chuyn ng theo hng t trc x n trc y.
y
x z
(a)
z y x = .
x
y
z
z x y = .
(b)
52
H ta thun nht
Trong h ta thun nht, mi im ( ) z y x , , trong khng gian Descartes c biu din bi mt b bn ta trong
khng gian 4 chiu thu gn ( ) h hz hy hx , , , . tin li, ngi ta thng chn h=1. Nh vy, mt im (x, y, z) trong h ta
Descartes s bin thnh im (x, y, z, 1) trong h ta thun nht; cn im (x, y, z, w) trong h ta thun nht (vi w = 0)
s tng ng vi im (x/w, y/w, z/w) trong h ta Descartes (xem hnh 6.3).
Hnh 6.3 Cc im trong h ta thun nht v Descartes
Dng ma trn ca php bin i affine trong h ta thun nht
Hnh 6.4 Dng tng qut ca php bin i affine ba chiu
Php bin i affine ba chiu bin im P thnh im Q c dng : M P Q . = , trong ( ) 1 , , ,
z y x
Q Q Q Q = ,
( ) 1 , , ,
z y x
P P P P = v M l ma trn bin i 4x4 trong h ta thun nht ( )
z y x
tr tr tr tr , , = l vector tnh tin.
Mt s tnh cht ca cc php bin i ba chiu :
- Tnh cht ng thng c bo ton. Ngha l, mt ng thng trong khng gian ba chiu khi bin i s thnh mt
ng thng.
- Tnh song song c bo ton. Ngha l, hai ng thng song song khi bin i cng s thnh hai ng thng song
song.
- Tnh t l v khong cch c bo ton. Ngha l, nh ca mt im P chia on thng AB theo t l f, s chia on
thng AB theo t l f, vi AB l nh ca on thng AB.
11.2. Php tnh tin
Hnh 6.5 Php tnh tin vi vector tnh tin tr=(tr
x
, tr
y
, tr
z
)
Vector tnh tin tr trong php bin i ba chiu c mt tc ng rt trc quan: mi im c dch i mt khong l tr
x
,
tr
y
, tr
z
theo ba trc. Ma trn M cho php tnh tin c dng nh sau:
|
|
|
|
|
.
|

\
|
=
1
0 1 0 0
0 0 1 0
0 0 0 1
z y x
z y x
tr tr tr
) ,tr ,tr tr(tr (6.1)
11.3. Php bin i t l
Php bin i t l trong ba chiu l mt s m rng ca php bin i t l trong hai chiu :
x
w
w=1
homogeneous
(x,y,z,w)
projected
homogeneous
(x/w,y/w,z/w,1)
Descartes
(x/w,y/w,z/w)
( ) ( )
|
|
|
|
|
.
|

\
|
=
1
0
0
0
. 1 1 ' ' '
z y x
tr tr tr
i h g
f e d
c b a
z y x z y x
l| |e, Ucy, c|en ccng
l|nh l|en
y
z
x
(x,y,z)
(x',y',z')
tr =(tr
x
,tr
y
,tr
z
)
53
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0 0 0
0 0 0
0 0 0
z
y
x
z y x
s
s
s
) ,s ,s S(s (6.2)
Trong cc hng s
z y x
s s s , , l cc h s t l tng ng theo cc trc x, y, z.
Hnh 6.6 Php bin i t l
Nh hnh 6.6, i tng c phng to gp i, ng thi vi tc ng ca php bin i lm cho i tng b y ra xa
gc ta hn.
Khi cc h s t l
z y x
s s s , , bng nhau, ta c php bin i ng dng.
Trong php bin i ( )
z y x
s s s S , , , gc ta O s c nh l chnh n. Ta gi gc ta l im bt ng (fixed point)
ca S, hay cn gi O l tm ca php bin i.
Tng qut hn, ta c th m t mt php bin i t l theo mt tm ( )
f f f
z y x , , bt k bng mt dy ba php bin i
sau:
- Tnh tin im bt ng ( )
f f f
z y x , , v gc ta .
- Thc hin php bin i t l theo cng thc (6.2).
- Tnh tin ngc im bt ng t gc ta tr v v tr ban u.
Nh vy, kt hp ba bc bin i trn ta c c ma trn bin i ca php bin i t l theo tm ( )
f f f
z y x , , vi h s
t l
z y x
s s s , , l:
( ) ( ) ( )
|
|
|
|
|
.
|

\
|
=
1 1 1 1
0 0 0
0 0 0
0 0 0
f z f y f x
z
y
x
z y x f
z -s y -s x -s
s
s
s
) ,s ,s (s S (6.3)
11.4. Php bin dng
Bin dng theo bt k trc ta no cng b nh hng bi ta ng vi hai trc cn li. Ma trn ca php bin dng
nh sau:
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0 1
0 1
0 1
yz xz
zy xy
zx yx
h h
h h
h h
Sh
(6.4)
Ta c mi quan h Q
x
vi P :
z xz y xy x x
P h P h P Q + + = .
y c th hiu h
xy
l lng m ta y ca P tc ng ln ta x ca Q.
Hnh 6.7 - Php bin dng theo trc x : hxy= hxz = 1, cc h s khc bng 0
y
z
x
y
z
x
y
z
x
54
Tng t nh trong trng hp php bin i t l, php bin dng Sh (6.4) cng c im bt ng l gc ta O. Ta
cng c th xy dng php bin dng vi tm bin dng ti mt im ( )
f f f
z y x , , bt k.
Ma trn bin i ca php bin dng vi tm ti ( )
f f f
z y x , , l:
|
|
|
|
|
.
|

\
|

=
1
0 1
0 1
0 1
zy f zx f yz f yx f xz f xy f
yz xz
zy xy
zx yx
h y h -x h z h -x h z h -y
h h
h h
h h
Sh (6.5)
11.5. Php quay
11.5.1. Php quay quanh mt trc ta
Khc vi php quay trong hai chiu quanh mt im bt k, trong ba chiu ta c php quay quanh mt trc ta . y
ta s dng h ta theo quy c bn tay phi v quy nh chiu quay dng l ngc chiu kim ng h.
Ta c cc ma trn biu din cc php quay quanh trc x, y, z mt gc u ln lt l R(z, u), R(y,u), R(x, u):
Quay quanh trc z :
( )
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin cos
-

z, R (6.6)
Hnh 6.8 - Php quay quanh trc z
Quay quanh trc y :
( )
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0 cos 0 sin
0 0 1 0
0 sin 0 cos

-
y, R (6.7)
y
z
x
55
Hnh 6.9 - Php quay quanh trc y
Quay quanh trc x :
( )
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0 cos sin - 0
0 sin cos 0
0 0 0 1
x, R
u u
u u
u (6.8)
Nhn xt rng cc gi tr nm trn dng v ct tng ng vi trc x trong ma trn R(x,u) s c gi tr l 0 ngoi tr gi tr
nm trn ng cho chnh l 1. iu ny m bo cho ta x ca cc im l khng b thay i qua php bin i. Nhn xt
ny cng tng t cho trng hp cc ma trn cn li.
Hnh 6.10 - Php quay quanh trc x
Ghi ch:
Cc nh ngha v chiu quay c dng chung cho c h ta theo quy c bn tay phi v bn tay tri. C th chiu
dng c nh ngha nh sau:
- Quay quanh trc x: t trc dng y n trc dng z.
- Quay quanh trc y: t trc dng z n trc dng x.
- Quay quanh trc z: t trc dng x n trc dng y.


Hnh 6.11- Cch xc nh chiu quay dng
x
z
y
z
y
x
56
11.5.2. Php quay quanh mt trc bt k
Gi s trc quay i qua hai im P
0
, P
1
no vi phng c biu din bi vector n v k. Quay im (x, y, z) quanh
trc k theo mt gc u s bin thnh im (x, y, z) (xem hnh 6.12).
Hnh 6.12 - Php quay quanh trc k
thc hin php quay quanh k mt gc u, ta c th thc hin mt chui cc thao tc sau:
- Tnh tin trc k v gc ta : tr(-P
0
) (thnh trc k').
- Quay quanh trc x mt gc o t trc k' nm trn mt phng Oxz: rot(x,o) (thnh trc k).
- Quay quanh trc y gc | a trc k v trc z: rot(y,-|).
- Thc hin php quay quanh trc z mt gc u: rot(z,u).
- Thc hin chui cc php bin i ngc li qu trnh trn.
Gc quay o c xc nh da trn chiu ca k' ln mt phng yz. Ta khng cn tnh o c th. Thay vo ta tnh sin(o)
v cos(o) mt cch trc tip.
T hnh 6.12 ta c:
1 0
1 0
P P
P P
k =
,
2
z
2
y
k k d + =
cos(o) = k
z
/d, sin(o) = k
y
/d.
Tng t, t hnh 6.13 ta c:
( ) ( )
x x
k k d d = = = = 1 / sin , 1 / cos | |
Nh vy, php quay quanh mt trc P
0
P
1
bt k mt gc u, rot(P
0
P
1
, u), c th c phn r thnh chui cc bin i c
s sau: tr(-P
0
) rot(x,o) rot(y, -|) rot(z, u) rot(y, |) rot(x, -o) tr(P
0
)
Hnh 6.13 - Tnh gc |
11.6. Kt hp cc php bin i affine ba chiu
kt hp cc php bin i affine ba chiu, chng ta cng thc hin tng t nh php bin i hai chiu bng cch
dng h ta thun nht.
Bng cch ny chng ta cng c cc kt qu tng t nh trong trng hp bin i hai chiu. Nu M1 bin i P thnh
Q v M2 bin i Q thnh S th M1M2 s bin i P thnh S, do ma trn kt hp ca nhiu php bin i c th c tnh
t vic nhn cc ma trn ca cc php bin i thnh phn.
x
y
z
d
" k
P
0
P
1
k
' k
k
y
o
x
y
z
k
x
" k
|
57
12. PHP BIN I M HNH V PHP BIN I H TRC TA
Cho n thi im ny, chng ta kho st cc php bin i ba chiu nh l thao tc dch chuyn mt im (mt i
tng) t v tr ny sang v tr khc trong mt h trc ta . Tuy nhin, nhiu khi, ta cn xem xt cc i tng trong cc h
ta khc nhau, mun chuyn t mt h ta ny sang h ta khc. V d, trong quy trnh hin th i tng ba chiu, ta
cn t mt i tng vo h ta chung cho tt c cc i tng trong cnh (h ta th gii thc), sau , xc nh tia
nhn, ta chuyn i t h ta th gii thc sang h ta quan st, v cui cng ta phi chuyn t h ta quan st sang
h ta thit b, ni cc i tng s c hin th.
Khi m hnh ha i tng, ta thng m t chng trong mt h ta cc b, thun tin nht cho vic m hnh ha. Sau
, bng cc php bin i ta s t chng vo cnh cn hin th. Cch tip cn ny cho php ta khng cn m hnh ha qu
nhiu i tng m ch m hnh ha theo chng loi i tng. V d to cnh trong hnh 6.1 ta ch cn m hnh ha mt
tri banh, mt con ki, bn, Sau pht sinh ra nhiu con ki nh thy trong hnh v. Mt v d khc c th xem trong hnh
6.14.
Vic chuyn i cc m t i tng t h ta ny sang h ta khc thc hin theo quy trnh tng t nh trong
ha hai chiu. Ta cn xy dng ma trn bin i khp c cc trc ta ca hai h. Trc tin, ta cn thc hin php tnh
tin hai gc ta trng nhau. Sau , ta phi thc hin tip mt dy cc php quay khp cc trc ta tng ng ln
nhau. Nu cc h ta s dng cc t l o lng khc nhau, ta phi thc hin thm mt php bin i t l na ng nht
cc h ta .
Hnh 6.14 - M hnh ha v php bin i h ta
Nu h ta th hai c gc ta t ti (x
0
, y
0
, z
0
) v cc vector c s c m t nh trong hnh 6.15 (tng ng h
ta th nht), trc tin ta cn thc hin php tnh tin T(-x
0
,-y
0
,-z
0
). Sau ta xy dng ma trn quay R da trn cc vector
c s. Ma trn ny s bin i cc vector n v u
x
, u
y
, u
z
tng ng thnh cc trc x, y, z.
|
|
|
|
|
.
|

\
|
=
1 0 0 0
0
0
0
3 3 3
2 2 2
1 1 1
z y x
z y x
z y x
u' u' u'
u' u' u'
u' u' u'
R (6.9)
Ma trn ca php bin i h ta chnh l tch T.R. Ma trn ny bin i h ta Descartes ny thnh h ta
Descartes khc, cho d chng l h ta theo quy c bn tay phi hay bn tay tri.

Hnh 6.15 - Chuyn i h ta
TM TT
Chng ta va kho st cc php bin i affine ba chiu nh l s m rng ca cc php bin i affine hai chiu. Cng nh cc php bin i affine
hai chiu, trc tin ta kho st cc php bin i c s: tnh tin, t l, quay; sau kho st cc php bin i phc tp hn. c bit, php quay quanh mt
y
x
z
(0,0,0)
x'
z'
y'
(x
0
,y
0
,z
0
)
u'
x
u'
y
u'
z
Front-Wheel
System
Tractor
System
World
y
W
z
W
x
W
yf
W
zf
W
xf
W
x
t
y
t
z
t
58
trc bt k c kho st chi tit nh l mt minh ha cho cc phn r mt php bin i affine bt k thnh tch ca cc php bin i affine c s. Nh kho
st cc php bin i affine vi biu din dng ma trn trong h ta thun nht nn cng vic kh n gin v nht qun.
Lu mt iu, cc php tnh tin v quay c chung thuc tnh l : sau khi bin i, hnh dng v kch thc ca i tng khng thay i m chng
ch b thay i v tr v nh hng trong khng gian. V vy, ngi ta gi hai php bin i ny l php bin i rigid-body transformations.
Phn cui chng, chng ta xem xt cc php bin i h ta . Cc php bin i ny rt quan trng trong qu trnh hin th i tng ba chiu.
BI TP
62. Hy xc nh ma trn ca php i xng gng qua mt phng Oxy, Oxz, Oyz.
63. Hy xc nh ma trn bin i ca php i xng gng qua mt phng i qua im P(x,y,z) v c vector php tuyn n .
64. Hy xc nh ma trn ca php i xng qua trc ta x, y, z.
65. Hy xc nh ma trn ca php i xng qua trc bt k i qua hai im P
0
, P
1
.
66. Hy xc nh ma trn bin i ca php i xng qua gc ta O.
67. Hy xc nh ma trn bin i ca php i xng qua mt im P(x,y,z) bt k.
68. Ci t chng trnh cho php ngi dng s dng mt trong cc php bin i affine (tnh tin, t l, quay, bin dng, )
bin i i tng, sau hy phc hi li i tng gc.
69. Ci t chng trnh minh ha s kt hp cc php bin i c s to thnh php quay quanh mt trc bt k.
70. Chng minh cng thc (6.3), (6.5).
71. Xy dng ma trn bin i ca php quay quanh mt trc bt k.


59
PH LC
HNG DN S DNG TH VIN HA
TRONG BC
13. MT S LU CHUNG
- Yu cu ti thiu phi c tp tin iu khin mn hnh EGAVGA.BGI (Thng thng cc tp ny thng nm trong th
mc \BC\BGI khi c ci t).
- dng c th vin cc hm ha cn c dng lnh : #include <graphics.h> v t mc chn Graphics library l
ON ([x]) trong menu Options/Linker/Libraries.
- t Model l Large trong mc chn Options/Linker/Code generation
- Khng nn dng cc hm lin quan n mn hnh trong ch vn bn nh printf, scanf, trong khi dng ch
ha.
- Khi cn tham kho c php, cch s dng ca bt k mt hm ha no, a con tr v tn hm trong chng trnh
sau nhn t hp phm CTRL+F1. Mun tham kho danh sch ton b cc hm ca th vin ha nhn t hp
phm CTRL+F1 ngay ti dng ch graphics.h
14. KHI TO V NG CH HA
Nhm cc hm v ngha s dng
Tn hm ngha
initgraph
closegraph
Khi to v ng ch ha. Thng thng vic khi
to ha c vit di dng mt hm.
graphdefaults t cc thit lp ha v gi tr mc nh bao gm v tr
con tr, bng mu (palette color), mu nn, mu v, mu t
(fill pattern), kiu t (fill style),
graphresult Tr v m li ca thao tc ha sau cng khng thc hin
c.
grapherrormsg Tr v con tr ti chui thng bo tng ng vi mt m li
cho trc. (Dng hm ny sau khi c c m li bit
c ti sao thao tc ha thc hin khng thnh cng)
detectgraph Xc nh cc trnh iu khin thit b v ch ha
dng.
Tham kho getgraphmode, getdrivername, getmodename, getmaxmode,
getmoderange, setgraphmode, restorecrtmode,
registerbgidriver, registerbgifont, installuserdriver,
setgraphbufsize.
Xy dng hm khi to ch ha
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void InitGraph(void)
{
int gdriver = DETECT, gmode, errorcode;
/* Goi ham khoi tao che do do hoa voi duong dan den tap tin .BGI la thu muc hien hanh */
initgraph(&gdriver, &gmode, "");

/* Lay ket qua cua thao tac khoi tao */
errorcode = graphresult();
if (errorcode != grOk) // Thao tac khoi tao gap loi
{
60
// In thong bao loi ra man hinh
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); //Ngung han chuong trinh
}
}

Cu trc mt chng trnh ha thng thng
void main (void)
{

InitGraph(); // Khoi tao che do do hoa
// Cac thao tac do hoa tiep theo sau day

closegraph(); // Ngung lam viec tren che do do hoa

}

Chng trnh minh ha
M t CT : Pht sinh ngu nhin cc ng thng vi mu ty trn mn hnh. Chng trnh kt thc khi ngi dng nhn phm bt
k.
// Khai bao cac tap tin INCLUDE
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// Khai bao cac bien toan cuc
int MaxX, MaxY; // Chieu rong va chieu cao toi da cua man hinh
int MaxColors; // So mau toi da

// Khai bao cac ham dung trong chuong trinh
// Ham khoi tao che do do hoa
void InitGraph(void)
{
int gdriver = DETECT, gmode, errorcode;

/* Goi ham khoi tao che do do hoa voi duong dan den tap tin .BGI la thu muc hien hanh */
initgraph(&gdriver, &gmode, "");
/* Lay ket qua cua thao tac khoi tao */
errorcode = graphresult();
if (errorcode != grOk) // Thao tac khoi tao gap loi
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
61
getch();
exit(1); //Ngung han chuong trinh
}
// Lay cac thong tin ve chieu rong va chieu cao toi da cua che do do hoa dang dung
MaxX = getmaxx();
MaxY = getmaxy();
// Lay thong tin ve so mau toi da
MaxColors = getmaxcolor() + 1;
}

// Ham phat sinh ngau nhien cac duong thang voi mau tuy y
void LineDemo(void)
{
int x1, y1, x2, y2; // Toa do diem dau va diem cuoi
int color; // Mau ve duong thang
cleardevice(); // xoa man hinh
do
{
// Phat sinh ngau nhien toa do duong thang
x1 = random(MaxX);
y1 = random(MaxY);
x2 = random(MaxX);
y2 = random(MaxY);
// Phat sinh ngau nhien mau ve duong thang
color = random(MaxColors);
// Goi ham dat mau ve duong thang
setcolor(color);
// Goi ham do hoa thuc hien viec ve duong thang
line(x1, y1, x2, y2);
} while (!kbhit()); // Vong lap ket thuc khi nguoi dung nhan phim bat ki
}

// Ham chinh cua chuong trinh
void main (void)
{

randomize(); // Khoi tao bo phat sinh so ngau nhien
InitGraph(); // Khoi tao che do do hoa

// Cac thao do hoa
LineDemo();
getch();

closegraph(); // Ngung lam viec tren che do do hoa
}

62
15. H THNG TA
Nhm cc hm v ngha s dng
Tn hm ngha
getmaxx
getmaxy
Tr v chiu rng (theo x) v chiu cao (theo y) ti a
ca ch mn hnh ang dng.
getx
gety
Tr v ta hin hnh ca con tr.
getviewsettings Ly thng tin v viewport hin hnh. Thng tin ny c
lu trong kiu struct viewporttype {int left, top, right,
bottom, clip}
cleardevice Xa ton b mn hnh ha bng mu nn v a con
tr v v tr (0, 0) ca mn hnh.
clearviewport Xa ton b viewport v a con tr v v tr (0,0) ca
viewport.
setviewport Thit lp viewport cho cc thao tc ha (vit, v, t,
...).

16. V IM, NG, VNG
Nhm cc hm v ngha s dng
Tn hm ngha
putpixel V ra mn hnh mt pixel ti mt v tr xc nh.
getpixel Tr v mu ca mt pixel ti mt v tr cho trc.
moveto Di chuyn v tr con tr hin hnh.
line V mt on thng.
circle
ellipse
V ng trn, ellipse.
rectangle
drawpoly
V hnh ch nht, a gic.
getlinesettings
setlinestyle
Tr v/thit lp kiu (style), mu t (pattern), b rng
(thickness) c dng cho vic v cc ng ni chung
(ng thng, a gic, hnh ch nht...). Vi hm
getlinesettings, cc thng tin ny c tr v trong mt bin
c cu trc l struct linesettingstype.
getcolor
setcolor
Tr v / t mu v hin hnh. Mu v ny dng cho vic
v cc im (pixel), ng, ...
setwritemode t cch v cc ng mi l COPY_PUT hay XOR_PUT.
Hm ny thng ch lm vic vi line, lineto, linerel,
rectangle, drawpoly.
Tham kho moverel, lineto, linerel, arc, sector, pieslice, setaspectratio,
getaspectratio, getmaxcolor, getbkcolor, setbkcolor,
getpalette, setallpalette, getdefaultpalette, setrgbpalette,
getpalettesize

Mt s im cn lu
- Cc lnh setfillstyle ch nh hng n cc ng trong cc hm line, linerel, lineto, rectangle, drawpoly, ...
- Nu dng ch v l XOR_PUT, th vic v hai ln lin tip s cho kt qu l v v xa i tng .
Chng trnh minh ha
// Ham minh hoa cac kieu duong thang (linestyle)
63
void LineStyleDemo(void)
{
int x1 = 50, y1 = 50, y2 = MaxY-y1, Step = 30;
struct linesettingstype LineInfo;

cleardevice();
// Luu thong tin ve duong cu
getlinesettings(&LineInfo);
setcolor(GREEN);
// Ve duong voi dinh dang mac dinh, do rong la 1 pixel
for (int style=SOLID_LINE; style<=USERBIT_LINE; style++)
{
setlinestyle(style, 1, NORM_WIDTH);
line(x1, y1, x1, y2);
x1 += Step;
}
setcolor(YELLOW);
// Dinh dang duong voi kieu duong ngau nhien, do rong la 3
for (style=SOLID_LINE; style<=USERBIT_LINE; style++)
{
// Chon kieu duong can ve
setlinestyle(style, 1, THICK_WIDTH);
x1 += Step;
line(x1, y1, x1, y2);
}
// Tra lai thong tin ve duong
setlinestyle(LineInfo.linestyle,LineInfo.pattern, LineInfo.thickness);
getch();
}

17. T MU VNG
Nhm cc hm v ngha s dng
Tn hm ngha
fillellipse V v t mu ellipse.
fillpoly V v t mu mt a gic.
floodfill T mu mt vng c bao quanh vi mt bin cho trc.
bar T mu mt vng hnh ch nht
getfillsettings
setfillstyle
Tr v / thit lp mu t (pattern) v mu t dng cho
vic t mu cc i tng. i vi hm getfillsettings,
thng tin v mu t v mu t c tr v trong mt bin
c cu trc struct fillsettingstype
getfillpattern
setfillpattern
Cc hm ny c dng vi mu t do ngi dng nh
ngha. Hm setfillpattern c dng nh ngha mt
mu t t ngi dng, hm getfillpattern c dng tr
v mu t ca ngi dng c nh ngha t hm
setfillpattern.
Tham khao bar3D, pieslice
64

Mt s im cn lu
- Tr hm bar, cc hm nh fillellipse, fillpoly u v ng bin ca i tng trc (thng tin v nh dng dng t
cc hm v ng) sau khi t phn rut bn trong mi s dng cc thng tin v mu t v mu t.
- Tuy nhin vi hm bar3D, hm ny s v ng bin khi hp ba chiu trc, sau mi t phn rut bn trong.
Chng trnh minh ha
// Ham minh hoa cac kieu mau to (fill pattern)
void FillAreaDemo(void)
{
int x = MaxX/2, y = MaxY/2;
int R=MaxY/2;
struct fillsettingstype FillInfo;
// Luu thong tin ve cach to mau lai
getfillsettings(&FillInfo);
clearviewport();
for(int pattern=SOLID_FILL; pattern<USER_FILL;pattern++)
{
// Chon kieu mau to
setfillstyle(pattern, pattern);
// Ve moi cung mot mau va mot mau to khac nhau
pieslice(x, y, (pattern-1)*36, pattern*36, R);
}

// Tra lai thong tin to mau nhu cu
setfillstyle(FillInfo.pattern, FillInfo.color);
getch();
}

18. CC HM V CH
Nhm cc hm v ngha s dng
Tn hm ngha
outtext
outtextxy
Hin th mt chui k t ti mt v tr xc nh trn
mn hnh.
settextstyle Thit lp font ch, hng ca ch, v kch thc ch
dng cho vic hin th chui k t ca hm outtext,
outtextxy.
settextjustify Thit lp ch canh chnh (text justification) cho vic
hin th chui k t ca hm outtext, outtextxy.
gettextsettings Tr v cc thng tin v cc tnh cht ca vic hin th
chui k t ra mn hnh. Cc thng tin bao gm font
ch , hng ch, kch thc ch, vic canh chnh, ...
Thng tin ny c tr v trong mt bin c cu trc
struct textsettingstype.
setusercharsize nh kch thc ca k t.
textwidth
textheight
Tr v kch thc theo chiu ngang (width) v chiu
cao (height) tnh bng pixel ca mt chui cho trc.
Tham khao sprintf, installuserfont, ...
65

Mt s im cn lu
- Ngi ta thng dng hm sprintf trong khi chun b mt chui cho hm outtextxy. V d : in chui Chuc mung
sinh nhat lan thu <n> cua ban <Ten> vi n l mt s nguyn v Ten l mt chui, ta dng kt hp hai lnh sau :
sprintf(szMsg, Chuc mung sinh nhat lan thu %d cua ban %s, n, Ten);
outtextxy(100, 100, szMsg).

Chng trnh minh ha
// Ham minh hoa cac ham ve chu
void TextDemo(void)
{
// horizontal text justification settings
char *szHJust[] = { "LEFT_TEXT",
"CENTER_TEXT",
"RIGHT_TEXT"
};
// vertical text justification settings
char *szVJust[] = { "BOTTOM_TEXT",
"CENTER_TEXT",
"TOP_TEXT"
};
int x = MaxX/2, y = MaxY/2;
char Msg[80];

settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);
for (int hj=LEFT_TEXT; hj<=RIGHT_TEXT; hj++)
for (int vj=BOTTOM_TEXT; vj<=TOP_TEXT; vj++)
{
cleardevice();
// Thiet lap su canh chinh
settextjustify(hj, vj);
// In chuoi thong bao ung voi che do canh chinh
sprintf(msg, "%s %s", szHJust[hj], szVJust[vj]);
// Ve duong chu thap de thay duoc tac dung su canh chinh
line(x-100, y, x+100, y);
line(x, y-100, x, y+100);
// Ve chu ra
outtextxy(x, y, msg);
getch();
}
}

19. CC HM V NH BITMAP
Nhm cc hm v ngha s dng
Tn hm ngha
getimage Lu mt vng nh trn mn hnh vo b nh.
66
Tn hm ngha
putimage a mt nh trong b nh c lu t hm getimage ra mn
hnh.
imagesize Tr v kch thc (tnh bng bytes) dng lu tr mt vng
nh trn mn hnh. Hm ny dng km vi hm getimage .
Tham khao setwritemode

Mt s im cn lu
- Hm getimage ch lu c cc nh c kch thc khng ln hn 64Kb
- Hm putimage lc hin th mt nh c lu trong b nh khi gi hm getimage ra mn hnh ch cn 2 tham s l
ta gc trn bn tri (left, top) thay v phi cn 4 tham s nh lc lu mt vng nh trong hm getimage .
67
TI LIU THAM KHO
72. Francis S. Hill. Computer Graphics. Macmillan Publishing Company, NewYork, 1990, 754 tr.
73. James D.Foley, Andries Van Dam, Feiner, John Hughes. Introduction to Computer Graphics. Addision Wesley, NewYork,
1995, 559 tr.
74. James D.Foley, Andries Van Dam, Feiner, John Hughes. Computer Graphics - Principle and Practice. Addision Wesley,
NewYork, 1996, 1175 tr.
75. Dng Anh c, L nh Duy. Gio trnh ha my tnh. Khoa Cng ngh thng tin, Trng i hc Khoa hc T
nhin (lu hnh ni b), 1996, 237 tr.
76. Hong Kim, Dng Anh c, L nh Duy, V Hi Qun. Gio trnh C s ha My Tnh, NXB Gio dc, 2000.
77. Donald Hearn, M.Pauline Baker. Computer Graphics, C version. Prentice Hall International Inc, Upper Saddle River, New
Jersey, 1997, 652tr.





68
MC LC
LI NI U ......................................................................................... 3
CHNG 1 - GII THIU V HA MY TNH ....................... 3
1. MT S NG DNG CA HA MY TNH ....................... 3
1.1. H tr thit k............................................................................ 3
1.2. Biu din thng tin .................................................................... 3
1.3. Lnh vc gii tr, ngh thut ...................................................... 4
1.4. Gio dc v o to ................................................................... 4
1.5. Giao tip gia my tnh v ngi dng ..................................... 4
2. KHI NIM V MY TNH .......................................................... 4
3. TNG QUAN V MT H HA ............................................ 5
3.1. Phn cng .................................................................................. 5
3.2. Phn mm .................................................................................. 9
CHNG 2 - CC I TNG HA C S .......................... 11
1. CC I TNG HA C S ............................................ 11
1.1. H ta th gii thc v h ta thit b ............................ 11
1.2. im ........................................................................................ 12
1.3. on thng, ng gp khc ................................................... 12
1.4. Vng t .................................................................................... 13
1.5. K t, chui k t ..................................................................... 13
2. CC THUT TON V NG ................................................ 13
2.1. Thut ton v on thng ........................................................ 14
2.2. Thut ton v ng trn ........................................................ 18
2.3. Thut ton v cc ng conics v mt s ng cong khc . 21
3. CC THUT TON T MU ..................................................... 22
3.1. Thut ton t mu da theo dng qut .................................... 22
3.2. Thut ton t mu da theo ng bin .................................. 29
CHNG 3 - CC PHP BIN I TRONG HA HAI CHIU 4
1. CC PHP BIN I HNH HC C S .................................... 4
1.1. Php tnh tin ............................................................................. 4
1.2. Php bin i t l ...................................................................... 4
1.3. Php quay .................................................................................. 5
1.4. Biu din ma trn ca php bin i ......................................... 5
2. KT HP CC PHP BIN I ................................................... 6
2.1. Kt hp cc php tnh tin ......................................................... 6
2.2. Kt hp cc php t l ................................................................ 7
2.3. Kt hp cc php quay .............................................................. 7
2.4. Php quay c tm quay l im bt k ....................................... 7
3. MT S TNH CHT CA PHP BIN I AFFINE ................ 8
4. MT S PHP BIN I KHC .................................................. 8
4.1. Php i xng ............................................................................ 8
4.2. Php bin dng .......................................................................... 9
69
4.3. Php bin i ngc .................................................................. 3
4.4. Phn r php bin i .............................................................. 10
5. PHP BIN I GIA CC H TA .................................. 10
CHNG 4 - HIN TH I TNG HAI CHIU ........................ 12
1. QUY TRNH HIN TH I TNG HAI CHIU .................... 12
1.1. Mt s khi nim ..................................................................... 12
1.2. H ta quan st v h ta thit b chun ........................ 13
1.3. Chuyn i t ca s sang vng quan st ................................ 13
1.4. Cc thut ton xn hnh ........................................................... 14
2. CC THUT TON XN IM, ON THNG ..................... 14
2.1. Thut ton Cohen-Sutherland .................................................. 14
2.2. Thut ton Liang-Barsky ......................................................... 18
3. THUT TON XN A GIC .................................................... 21
CHNG 5 - GII THIU HA BA CHIU ............................ 27
1. TNG QUAN V HA BA CHIU ...................................... 27
1.1. S lc v quy trnh hin th ................................................... 27
1.2. M hnh khung ni kt ............................................................ 28
1.3. V cc i tng theo m hnh khung ni kt bng cch s dng cc php chiu 30
1.4. Php chiu song song .............................................................. 31
1.5. Php chiu phi cnh ............................................................... 32
2. BIU DIN I TNG BA CHIU .......................................... 33
2.1. Biu din mt a gic .............................................................. 34
2.2. Cc ng cong v mt cong .................................................. 37
2.3. Cc mt c quy lut ................................................................. 37
2.4. Cc mt trn xoay ................................................................... 38
2.5. Cc mt cong bc hai............................................................... 39
2.6. V ng cong v mt cong bng Bezier v B-Spline ........... 40
CHNG 6 - CC PHP BIN I TRONG HA BA CHIU51
1. CC PHP BIN I HNH HC ............................................... 51
1.1. Mt s khi nim lin quan ..................................................... 51
1.2. Php tnh tin ............................................................................. 3
1.3. Php bin i t l .................................................................... 52
1.4. Php bin dng ........................................................................ 53
1.5. Php quay ................................................................................ 54
1.6. Kt hp cc php bin i affine ba chiu .............................. 56
2. PHP BIN I M HNH V PHP BIN I H TRC TA 57
PH LC B - HNG DN S DNG TH VIN HA TRONG BC 197
1. MT S LU CHUNG ........................................................... 197
2. KHI TO V NG CH HA ................................ 198
3. H THNG TA .................................................................. 201
4. V IM, NG, VNG ........................................................ 202
5. T MU VNG .......................................................................... 204
6. CC HM V CH .................................................................... 206
70
7. CC HM V NH BITMAP .................................................... 208
TI LIU THAM KHO .................................................................. 210
MC LC ............................................................................................ 211

You might also like