You are on page 1of 185

LI NI U

ho my tnh (Computer Graphics) l mt lnh vc l th v c nhiu ng dng


trong thc t, n gp phn lm cho giao tip gia con ngi v my tnh tr nn thn
thin hn. Giao din kiu vn bn (text) c thay th hon ton bng giao din
ho. Tuy nhin, vic dy v hc k thut ha th khng n gin do ch ny c
nhiu phc tp. K thut ha lin quan n tin hc v ton hc bi v hu ht cc gii
thut v, t cng cc php bin hnh u c xy dng da trn nn tng ca hnh hc
khng gian hai chiu v ba chiu. Hin nay, K thut ha l mt mn hc c ging
dy cho sinh vin chuyn ngnh Cng Ngh Thng Tin.
Trong cun gio trnh ny, ti mun mang li cho bn c cc c s l thuyt v
ho my tnh t n gin nht nh cc thut ton v ng thng, ng trn, a gic, k
t... Tip n cc k thut xn ta, cc php bin i ho trong khng gian 2D v
3D...Chng ta ln lt lm quen vi th gii mu sc thng qua cc h mu: RGB,
CMYK, HSV.... Phc tp hn na l cc php chiu, cc phng php xy dng ng
cong v mt cong cho i tng. Cui chng ta tm hiu v nh sng v hnh hc fractal.
Gio trnh gm chn chng, trong chng mt gip bn c c ci nhn tng
quan v k thut ho t trc n gi cng nh hng tng lai cho lnh vc ny. Cc
chng tip theo, mi chng s l mt vn t n gin n phc tp v c s nn tng
cho ngnh k thut ho. Cui mi chng u c phn bi tp kim tra li kin thc
va c c. Bi tp gm hai dng: dng tnh ton v dng lp trnh, i vi dng lp
trnh bn c th vit bng C/C++ hay BC thm ch bng VB u c. Cui cng l phn
ph lc gm cc hng dn lm bi tp lp trnh, ngn ng hay dng y l C/C++ hay
BC.
B cc r rng, hnh nh phong ph, a dng. Ti hy vng rng gio trnh l mt b
tham kho y cc thng tin hu ch v c tnh thc tin cao cho mn k thut ho.
Trong qu trnh bin son mc d c gng ht sc nhng vn khng trnh khi
nhng sai st, rt mong nhn c s ng gp chn thnh t qu bn c.
Xin chn thnh cm n.

Tc gi

Mc lc

MC LC
LI NI U........................................................................................................................ 1
MC LC .............................................................................................................................. 2
CHNG 1: TNG QUAN V K THUT HO ...................................................... 7
1.1. CC KHI NIM TNG QUAN CA K THUT HO MY TNH
(COMPUTER GRAPHICS)......................................................................................................... 7
1.1.1. L ch s pht trin ................................................................................................. 7
1.1.2. K thut ha vi tnh. ...................................................................................... 8
1.2. CC K THUT HO ....................................................................................... 8
1.2.1. K thut ho im (Sample based-Graphics) ................................................. 8
1.2.2. K thut ho vector.......................................................................................... 9
1.2.3. Phn loi ca ho my tnh........................................................................... 10
1.2.4. Cc ng dng tiu biu ca k thut ha....................................................... 11
1.2.5. Cc chun giao din ca h ho..................................................................... 13
1.3. PHN CNG HO (GRAPHICS HARDWARE)............................................ 13
1.3.1. Cc thnh phn phn cng ca h ho tng tc........................................... 13
1.3.2. My in................................................................................................................. 14
1.3.3. Mn hnh CRT .................................................................................................... 14
1.3.4. Mn hnh tinh th lng (Liquid Crystal Display LCD) ................................... 16
Tm tt chng: ............................................................................................................... 17
Bi tp:.............................................................................................................................. 18
CHNG 2: CC GII THUT SINH THC TH C S............................................ 19
2.1. CC H THNG TO TRONG HO....................................................... 19
2.1.1. H to thc (WCS World Coordinate System)........................................... 19
2.1.2. H to thit b (DCS Device Coordinate System) ...................................... 19
2.1.3. to thit b chun (NDCS Normalized Device Coordinate System)........... 20
2.2. IM V ON THNG....................................................................................... 20
2.2.1. im ................................................................................................................... 20
2.2.2. on thng.......................................................................................................... 20
2.3. CC GII THUT XY DNG THC TH C S ........................................... 21
2.3.1. Gii thut v on thng thng thng .............................................................. 21
2.3.2. Gii thut Bresenham ......................................................................................... 22
2.3.3. Gii thut trung im-Midpoint.......................................................................... 23
2.3.3. Gii thut sinh ng trn (Scan Converting Circles)(Bresenham)................... 25
2.3.5. Gii thut sinh ng trn Midpoint .................................................................. 28
2.3.6. Gii thut sinh ng ellipse ............................................................................. 30
2.3.7. Gii thut sinh k t .......................................................................................... 33
2.3.8. Gii thut sinh a gic (Polygon) ....................................................................... 34
2

Mc lc
Tm tt chng: ............................................................................................................... 39
Bi tp:.............................................................................................................................. 39
CHNG 3: CC PHP BIN I HO.................................................................. 41
3.1. CC PHP BIN I HNH HC HAI CHIU .................................................... 41
3.1.1. Php bin i Affine (Affine Transformations) ................................................. 41
3.1.2. Cc php bin i i tng............................................................................... 41
3.2. TA NG NHT V CC PHP BIN I ............................................. 45
3.2.1. To ng nht ................................................................................................ 45
3.2.2. Php bin i vi to ng nht .................................................................... 46
3.2.3. Ci t c/c++ cho php quay tam gic quanh 1 im (xq,yq): ........................... 47
3.3. CC PHP BIN I HNH HC BA CHIU...................................................... 48
3.3.1.Biu din im trong khng gian 3 chiu............................................................ 48
3.3.2. Php tnh tin ...................................................................................................... 48
3.3.3. Php t l ............................................................................................................. 48
3.3.4. Php bin dng.................................................................................................... 49
3.3.5. Php ly i xng ............................................................................................... 49
3.3.6. Php quay 3 chiu............................................................................................... 49
3.3.7. Ci t bng c/c++ nh sau: ............................................................................... 53
Tm tt: ............................................................................................................................ 54
Bi tp:.............................................................................................................................. 54
CHNG 4: CC GII THUT HO C S .......................................................... 57
4.1. M HNH CHUYN I GIA BA H THNG TO ................................. 57
4.1.1. M hnh chuyn i............................................................................................ 57
4.1.2. Php nh x t ca s vo khung nhn ............................................................... 57
4.2. CC GII THUT XN TI (CLIPPING) ............................................................ 59
4.2.1. Khi nim ........................................................................................................... 59
4.2.2. Clipping im ..................................................................................................... 59
4.2.3. Xn ta on thng.............................................................................................. 59
4.2.4. Gii thut xn ta a gic (Sutherland Hodgman) .............................................. 66
Tm tt chng: ............................................................................................................... 70
Bi tp:.............................................................................................................................. 70
CHNG 5: PHP CHIU PROJECTION...................................................................... 71
5.1. KHI NIM CHUNG............................................................................................... 71
5.1.1.Nguyn l v 3D (three-Dimension) ................................................................... 71
5.1.2. c im ca k thut ho 3D....................................................................... 71
5.1.3.Cc phng php hin th 3D .............................................................................. 71
5.2.PHP CHIU ............................................................................................................. 72
5.3. PHP CHIU SONG SONG (Parallel Projections )................................................. 74
3

Mc lc
5.3.1.Php chiu trc giao (Orthographic projection) .................................................. 74
5.3.2. Php chiu trc lung (Axonometric) ................................................................ 75
5.3.3. Php chiu xin - Oblique .................................................................................. 78
5.4. PHP CHIU PHI CNH (Perspective Projection) .............................................. 79
5.4.1. Php chiu phi cnh mt tm chiu .................................................................. 80
5.4.2. Php chiu phi cnh hai tm chiu ................................................................... 81
5.4.3. Php chiu phi cnh ba tm chiu .................................................................... 83
Tm tt chng: ............................................................................................................... 83
Bi tp:.............................................................................................................................. 83
CHNG 6: MU SC TRONG HO ...................................................................... 85
6.1. NH SNG V MU SC (light and color).......................................................... 85
6.1.1. Quan nim v nh sng....................................................................................... 85
6.1.2. Yu t vt l ....................................................................................................... 85
6.1.3. Cm nhn mu sc ca con ngi (Physiology - Sinh l - Human Vision) ....... 87
6.1.4. Cc c trng c bn ca nh sng..................................................................... 89
6.2. NH SNG N SC ............................................................................................ 89
6.2.1. Cng sng v cch tnh................................................................................ 90
6.2.2. Php hiu chnh gama......................................................................................... 90
6.2.3. Xp x bn tng - halftone .................................................................................. 91
6.2.4. Ma trn Dither v php ly xp x bn tng ....................................................... 93
6.3. CC H MU TRONG MN HNH HA...................................................... 93
6.3.1. M hnh mu RGB (Red, Green, Blue - , lc, lam)........................................ 94
6.3.2. M hnh mu CMY (Cyan, Magenta, Yellow - xanh tm, ti, vng) ......... 94
6.3.3. M hnh mu YIQ.............................................................................................. 95
3.4. M hnh mu HSV (Hue, Saturation,Value) - M thut........................................ 96
6.3.5. Biu mu CIE (1931 Commission Internationale de lEclairage) .............. 97
6.4. CHUYN I GIA CC H MU ................................................................... 100
6.4.1. Chuyn i HSV - RGB ................................................................................... 100
6.4.2. Chuyn i RGB sang XYZ............................................................................. 101
Tm tt: .......................................................................................................................... 102
Bi tp:............................................................................................................................ 102
CHNG 7: NG CONG V MT CONG TRONG 3D ......................................... 104
7.1. NG CONG - CURVE ..................................................................................... 104
7.1.1. im biu din ng cong (curve represents points ) .................................. 104
7.1.2. ng cong a thc bc ba tham bin ............................................................. 104
7.1.3. ng cong Hermite ........................................................................................ 105
7.1.4. ng cong Bezier........................................................................................... 106
7.1.5. ng cong B-spline........................................................................................ 108
4

Mc lc
7.2. M HNH B MT (Surface) V CC PHNG PHP XY DNG ............ 114
7.2.1. Cc khi nim c bn ....................................................................................... 114
7.2.2. Biu din mnh t gic ..................................................................................... 115
7.2.3. M hnh ho cc mt cong (Surface Patches)................................................... 117
7.2.4. Mt t cc ng cong ..................................................................................... 120
Tm tt: .......................................................................................................................... 125
Bi tp:............................................................................................................................ 125
CHNG 8: NH SNG ................................................................................................. 127
8.1. GII THIU............................................................................................................ 127
8.1.1. Mc tiu chnh trong ha my tnh.............................................................. 127
8.1.2. Cc gii php trong ha my tnh ................................................................ 127
8.2. CC K THUT CHIU SNG TRONG HA MY TNH....................... 129
8.2.1. nh gi v cng nh sng........................................................................ 129
8.2.2. Cng nh sng ........................................................................................... 130
8.2.3. Nhng thuc tnh bao quanh ca vt cht ........................................................ 131
8.2.4. Thuc tnh khuch tn ca vt cht .................................................................. 132
8.2.5. S tng tc b mt/nh sng........................................................................... 133
8.2.6. S khc x v s truyn sng ........................................................................... 133
8.3. CC CNG NGH................................................................................................. 134
8.3.1. Raytracing......................................................................................................... 134
8.3.2. Radiosity........................................................................................................... 138
8.3.3. Photon Mapping ............................................................................................... 143
8.4. S SO SNH GIA CC K THUT (COMPARISON OF TECHNIQUES) .. 147
8.4.1. Raytracing......................................................................................................... 148
8.4.2. Radiosity........................................................................................................... 148
8.4.3. Photon mapping................................................................................................ 148
Tm tt.148
CHNG 9: HNH HC FRACTAL ............................................................................... 150
9.1. S RA I V CC NG DNG CA HNH HC PHN HNH .................. 150
9.1.1. S ra i ca l thuyt hnh hc phn hnh ...................................................... 150
9.1.2. Cc ng dng tng qut ca hnh hc phn hnh.............................................. 151
9.2. MT S K THUT CI T HNH HC PHN HNH................................. 151
9.2.1 H ng VONKOCK ...................................................................................... 151
9.2.2. ng SIERPINSKI ........................................................................................ 154
9.3. CY FRACTAL...................................................................................................... 155
9.3.1. CC CY THC T: ..................................................................................... 155
9.3.2. BIN DIN TON HC CA CY:............................................................. 156
9.4. TP MANDELBROT............................................................................................. 159
5

Mc lc
9.4.1. t vn ......................................................................................................... 159
9.4.2. CNG THC TON HC ............................................................................. 159
9.4.3. THUT TON TH HIN TP MANDELBROT ........................................ 160
9.5. TP JULIA.............................................................................................................. 161
9.5.1. t vn :........................................................................................................ 161
9.5.2. Cng thc ton hc:.......................................................................................... 161
9.5.3. Thut ton th hin tp Julia............................................................................. 161
9.6. H CC NG CONG PHOENIX.................................................................... 163
Bi tp............................................................................................................................. 165
PH LC ........................................................................................................................... 166
1. Yu cu ....................................................................................................................... 166
2. Khi to v ng ch ho ................................................................................. 166
3. Cc hm c bn .......................................................................................................... 167
3.1. Bng mu ca mn hnh ho........................................................................... 167
3.2. im .................................................................................................................... 168
3.3. ng .................................................................................................................. 168
3.4. Hnh ch nht ...................................................................................................... 168
3.5. Hnh trn.............................................................................................................. 168
3.6. a gic................................................................................................................. 169
3.7. Vn bn................................................................................................................ 169
3.8. Ca s (viewport) ................................................................................................ 170
3.9. To hnh nh chuyn ng................................................................................... 170
Cc code chng trnh v d cho bi tp lp trnh.......................................................... 172
Bi 1: quay i tng ................................................................................................. 172
Bi 2: xn ta............................................................................................................... 179
Bi 3: Php chiu........................................................................................................ 180
TI LIU THAM KHO .................................................................................................. 185

Chng 1: Tng quan v k thut ho

CHNG 1: TNG QUAN V K THUT HO


1.1. CC KHI NIM TNG QUAN CA K THUT HO MY
TNH (COMPUTER GRAPHICS)
1.1.1. L ch s pht trin

Lch s ca ha my tnh l vo thp nin 1960 c nh du bi d n SketchPad


c pht trin ti Hc vin Cng ngh Massachusetts (MIT) bi Ivan Sutherland. Cc
thnh tu thu c c bo co ti hi ngh Fall Joint Computer v y cng chnh l
s kin ln u tin ngi ta c th to mi, hin th v thay i c d liu hnh nh
trc tip trn mn hnh my tnh trong thi gian thc. H thng Sketchpad ny c dng
thit k h thng mch in v bao gm nhng thnh phn sau:
CRT mn hnh
Bt sng v mt bn phm bao gm cc phm chc nng
My tnh cha chng trnh x l cc thng tin
Vi h thng ny, ngi s dng c th v trc tip cc s mch in ln mn
hnh thng qua bt sng, chng trnh s phn tch v tnh ton cc thng s cn thit ca
mch in do ngi dng v nn.
Cng trong nm 1960 ny, William Fetter nh khoa hc ngi M. ng ang
nghin cu xy dng m hnh bung li my bay cho hng Boeing ca M. ng da trn
hnh nh ba chiu ca m hnh ngi phi cng trong bung li ca my bay xy dng
nn mt m hnh ti u cho bung li my bay. Phng php ny cho php cc nh thit
k quan st mt cch trc quan v tr ca ngi li trong khoang. ng t tn cho phng
php ny l ho my tnh (Computer Graphics) .
Mn hnh l thit b thng dng nht trong h ho, cc thao tc ca hu ht cc
mn hnh u da trn thit k ng tia m cc CRT (Cathode ray tube).
K thut ha c lin tc hon thin vo thp nin 1970 vi s xut hin ca
cc chun ha lm tng cng kh nng giao tip v ti s dng ca phn mm cng
nh cc th vin ha.
S pht trin vt bc ca cng ngh vi in t v phn cng my tnh vo thp
nin 1980 lm xut hin hng lot cc v mch h tr cho vic truy xut ha i cng
vi s gim gi ng k ca my tnh c nhn lm ha ngy cng i su vo cuc sng
thc t.
Nhng nm 1980 c raster graphics ( ho im). Bt u chun ho v d nh:
GKS(Graphics Kernel System): European effort (kt qu ca chu u), Becomes ISO 2D
standard.
Thp nin 90 pht trin c bit v phn cng, thit b hnh hc ho Silicon. Xut
hin cc chun cng nghip: PHIGS (Programmers Hierarchical Interactive Graphics
Standard) xc nh cc phng php chun cho cc m hnh thi gian thc v lp trnh
hng i tng. Giao din ngi my Human-Computer Interface (HCI).
7

Chng 1: Tng quan v k thut ho

Ngy nay xut hin nh hin thc, cc ho cho my tnh (Graphics cards for
PCs), game boxes v game players. Cng nghip phim nh nh vo ho my tnh
(Computer graphics becoming routine in movie industry), Maya (th gii vt cht tri gic
c).
1.1.2. K thut ha vi tnh.

ha my tnh l mt lnh vc ca khoa hc my tnh nghin cu v c s ton hc, cc


thut ton cng nh cc k thut cho php to, hin th v iu khin hnh nh trn mn
hnh my tnh. ha my tnh c lin quan t nhiu n mt s lnh vc nh i s, hnh
hc gii tch, hnh hc ha hnh, quang hc,... v k thut my tnh, c bit l ch to
phn cng (cc loi mn hnh, cc thit b xut, nhp, cc v mch ha...).
Theo ngha rng hn, ha my tnh l phng php v cng ngh dng trong vic
chuyn i qua li gia d liu v hnh nh trn mn hnh bng my tnh. ha my
tnh hay k thut ha my tnh cn c hiu di dng phng php v k thut to
hnh nh t cc m hnh ton hc m t cc i tng hay d liu ly c t cc i
tng trong thc t.

1.2. CC K THUT HO
1.2.1. K thut ho im (Sample based-Graphics)

Cc m hnh, hnh nh ca cc i tng c hin th thng qua tng pixel (tng


mu ri rc)
c im:C th thay i thuc tnh ca tng im nh ri rc
o Xo i tng pixel ca m hnh v hnh nh cc i tng.
o Cc m hnh hnh nh c hin th nh mt li im (grid) cc pixel ri
rc,
o Tng pixel u c v tr xc nh, c hin th vi mt gi tr ri rc (s
nguyn) cc thng s hin th (mu sc hoc sng)
Tp hp tt c cc pixel ca grid cho chng ta m hnh, hnh nh i tng m
chng ta mun hin th.

Hnh 1.1 nh ho im

Phng php to ra cc pixel


Phng php dng phn mm v trc tip tng pixel mt.
Da trn cc l thuyt m phng (l thuyt Fractal, v.v) xy dng nn hnh nh
m phng ca s vt.
8

Chng 1: Tng quan v k thut ho

Phng php ri rc ho (s ho) hnh nh thc ca i tng.


C th sa i (image editing) hoc x l (image processing) mng cc pixel thu
c theo nhng phng php khc nhau thu c hnh nh c trng ca i
tng.
1.2.2. K thut ho vector
M hnh
ha

Cc tham
s t trt

T trt
Thit b ra

Hnh 1.2 M hnh ho vector


M hnh hnh hc (geometrical model) ca i tng
Xc nh cc thuc tnh ca m hnh hnh hc ny,
Qu trnh t trt (rendering) hin th tng im ca m hnh, hnh nh thc ca
i tng
V d v hnh nh ho Vector

Wireframe Model

Skin Model

Skeletal Model

Muscle Model

Hair Model

Render and Touch up

Hnh 1.3 V d v ho vector

C th nh ngha ho vector: ho vector = geometrical model + rendering

Chng 1: Tng quan v k thut ho


So snh gia Raster v Vector Graphics
ho im(Raster Graphics)

ho vector(Vector Graphics)

- Hnh nh v m hnh ca cc vt th c
- Khng thay i thuc tnh ca tng im
biu din bi tp hp cc im ca li (grid)
trc tip
- Thay i thuc tnh ca cc pixel => thay
- X l vi tng thnh phn hnh hc c s
ca n v thc hin qu trnh t trt v hin th
i tng phn v tng vng ca hnh nh.
- Copy c cc pixel t mt hnh nh ny li.
- Quan st hnh nh v m hnh ca hnh nh
v s vt nhiu gc khc nhau bng cch
thay i im nhn v gc nhn.

sang hnh nh khc.

1.2.3. Phn loi ca ho my tnh

Phn loi theo cc lnh vc ca ho my tnh


CAD/CAM System
Kin to
ho

ho minh ho
ho hot hnh v ngh thut

K thut ho

X l nh
X l
ho

K thut nhn dng


K thut phn tch v to nh

Phn loi theo h to


K thut ho 2 chiu
K thut ho
K thut ho 3 chiu

K thut ho hai chiu: l k thut ho my tnh s dng h to hai chiu


(h to phng), s dng rt nhiu trong k thut x l bn , th.
K thut ho ba chiu: l k thut ho my tnh s dng h to ba chiu,
i hi rt nhiu tnh ton v phc tp hn nhiu so vi k thut ho hai chiu.
Cc lnh vc ca ho my tnh:
K thut x l nh (Computer Imaging): sau qu trnh x l nh cho ta nh s ca
i tng. Trong qu trnh x l nh s dng rt nhiu cc k thut phc tp: k thut
khi phc nh, k thut lm ni nh, k thut xc nh bin nh.
K thut nhn dng (Pattern Recognition): t nhng nh mu c sn ta phn loi
theo cu trc, hoc theo cc tiu tr c xc nh t trc v bng cc thut ton chn lc
c th phn tch hay tng hp nh cho thnh mt tp hp cc nh gc, cc nh gc
10

Chng 1: Tng quan v k thut ho

ny c lu trong mt th vin v cn c vo th vin ny ta xy dng c cc thut


gii phn tch v t hp nh.
K thut tng hp nh (Image Synthesis): l lnh vc xy dng m hnh v hnh nh
ca cc vt th da trn cc i tng v mi quan h gia chng.
Cc h CAD/CAM (Computer Aided Design/Computer Aided Manufacture
System): k thut ho tp hp cc cng c, cc k thut tr gip cho thit k cc chi
tit v cc h thng khc nhau: h thng c, h thng in, h thng in t.
ho trnh by (Presentation Graphics): gm cc cng c gip hin th cc s liu
th nghim mt cch trc quan, da trn cc mu th hoc cc thut ton c sn.
ho hot hnh v ngh thut: bao gm cc cng c gip cho cc ho s, cc nh
thit k phim hot hnh chuyn nghip lm cc k xo hot hnh, v tranh... V d: phn
mm 3D Studio, 3D Animation, 3D Studio Max.
1.2.4. Cc ng dng tiu biu ca k thut ha

ho my tnh l mt trong nhng lnh vc l th nht v pht trin nhanh nht ca tin
hc. Ngay t khi xut hin n 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
ca n c th c minh ho rt trc quan thng qua cc ng dng ca n.
Xy dng giao din ngi dng (User Interface)
Giao din ho thc s l cuc cch mng mang li s thun tin v thoi mi cho
ngi dng ng dng. Giao din WYSIWYG v WIMP ang c a s ngi dng u
thch nh tnh thn thin, d s dng ca n.
To cc biu trong thng mi, khoa hc, k thut
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 nghin cu, qun l... mt cch c hiu qu.
T ng ho vn phng v ch bn in t
Thit k vi s tr gip ca my tnh (CAD_CAM)
Lnh vc gii tr, ngh thut v m phng
iu khin cc qu trnh sn xut (Process Control)
Lnh vc bn (Cartography)
Gio dc v o to

11

Chng 1: Tng quan v k thut ho

Mt s v d ca ng dng k thut ho:

Hnh 1.4 Cc ng dng ca k thut ho

Hnh 1.5 H ng dng CAD - CAM

12

Chng 1: Tng quan v k thut ho


1.2.5. Cc chun giao din ca h ho

Mc tiu cn bn ca cc chun cho phn mm ho l m bo tnh tng thch. Khi


cc cng c c thit k vi hm ho 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.
GKS (Graphics Kernel System): chun xc nh cc hm ho chun, c thit
k nh mt tp hp cc cng c ho hai chiu v ba chiu.
GKS Functional Description, ANSI X3.124 - 1985.GKS - 3D Functional
Description, ISO Doc #8805:1988.
CGI (Computer Graphics Interface System): h chun cho cc phng php giao
tip vi cc thit b ngoi vi.
CGM (Computer Graphics Metafile): xc nh cc chun cho vic lu tr v chuyn
i hnh nh.
VRML (Virtual Reality Modeling Language): ngn ng thc ti o, mt hng pht
trin trong cng ngh hin th c xut bi hng Silicon Graphics, sau c
chun ha nh mt chun cng nghip.
PHIGS (Programmers Hierarchical Interactive Graphics Standard): xc nh cc
phng php chun cho cc m hnh thi gian thc v lp trnh hng i tng.
PHIGS Functional Description, ANSI X3.144 - 1985.+ Functional Description,
1988, 1992.
OPENGL th vin ha ca hng Silicon Graphics, c xy dng theo ng
chun ca mt h ha nm 1993.
DIRECTX th vin ho ca hng Microsoft, Direct X/Direct3D 1997

1.3. PHN CNG HO (GRAPHICS HARDWARE)


1.3.1. Cc thnh phn phn cng ca h ho tng tc

CPU:thc hin cc chng trnh ng dng.


B x l hin th (Display Processor): thc hin cng vic hin th d liu ho.
B nh h thng (System Memory): cha cc chng trnh v d liu ang thc
hin.
Gi phn mm ho (Graphics Package): cung cp cc hm ho cho chng
trnh ng dng
Phn mm ng dng (Application Program): phn mm ho ng dng.
B m ( Frame buffer): c nhim v cha cc hnh nh hin th.
B iu khin mn hnh (Video Controller): iu khin mn hnh, chuyn d liu
dng s frame buffer thnh cc im sng trn mn hnh.

13

Chng 1: Tng quan v k thut ho

Hnh 1.6 Cc thnh phn cng ca h ho tng tc


1.3.2. My in

Dot size: ng knh ca mt im in b nht m my in c th in c


Addressability: kh nng a ch ho cc im in c th c trn mt n v di (dot per
inch)
Dot size

Point per inch

8 - 20/ 100 inch

200, 600

5/1000 inch

1500

My v 6,15/1000 inch

1000, 2000

1.3.3. Mn hnh CRT


Mt chm cc tia in t (tia m cc) pht ra t mt sng in t, vt qua cun li tia dn n 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 ln mt chm sng nh. Nhng chm sng s m dn rt nhanh nn cn c cch
no n 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. Gi l lm ti (refresh CRT).

S lng ti a cc im c th hin th trn mt CRT c gi l phn gii


(Resolution). Hay phn gii l s lng cc im c th c v theo chiu ngang v
chiu dc (c xem nh tng s im theo mi hng) ca mn hnh.
Kch thc vt l ca mn hnh ho c tnh t di ca ng cho mn
hnh. Thng dao ng t 12-27 inch, hoc ln hn.
Thuc tnh khc ca mn hnh l t s phng (aspect ratio). N 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. Mn hnh c t s phng khc mt, th hnh vung hin th trn
thnh hnh ch nht cn hnh trn thnh hnh ellipse.

14

Chng 1: Tng quan v k thut ho

NEC

Hybrid

Hitachi EDP

Standard Dot-trio

SONY

Trinitron

Hnh 1.7 Cng ngh mn hnh CRT


Mn hnh dng im (Raster Display): thng gp nht trong s cc dng mn hnh
s dng CRT trn cng ngh truyn hnh. Mi im trn mn hnh c gi l pixel. Cc
thng tin v 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 lu tr tp
cc gi tr cng sng ca ton b cc im trn mn hnh v lun tn ti mt cch
song nh gia mi im trn mn hnh v mi phn t trong vng ny.
to ra hnh nh en trng, n gin ch cn lu thng tin ca mi Pixel l mt bt
(0,1) (xem hnh 1.8). Trong trng hp nh nhiu mu th cn nhiu bt hn, nu thng tin
mi pixel c lu bng b bt th ta c th c 2b gi tr mu phn bit cho pixel .

15

Chng 1: Tng quan v k thut ho

V d m hnh ho im ngi nh v ngi sao.


Interface
to
host computer

(interaction data)

(Display
commands)
00000000000000
00000000000100
0000

Keyboard

Display
processo

Data input
CRT

Bitmap refresh buffer


(the 1s are accentuated
for contrast)
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 c nh ngha mt b ba gi tr
(RGB) 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, s phn t trong bng LUT chnh l s mu c
th c hin th cng mt lc trn mn hnh.
X: 0 Xmax2 mu/ 1 bit

640 x 480 x 16 Video RAM = 2MB

Y: 0 Ymax16 mu/ 4 bit ;256 mu/ 8bit

1024 x 1024 x 24 Video RAM = 24MB

16

24

2 mu/ 16 bit ; 2 mu/ 24 bit

Vic lm ti trn mn hnh dng ny c thc hin tc 60 - 80 khung/giy.


i khi tc lm ti cn c biu din bng n v Hertz (Hz - s chu k trn/giy),
trong mt chu k tng ng vi mt khung (frame). Vy tc lm ti 60
khung/giy n gin l 60 Hz. 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 v bn 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 bn tri ca mn hnh
chun b bt u frame k tip.

Hnh 1.9 Qut mnh v qut dng ca mn hnh CRT


1.3.4. Mn hnh tinh th lng (Liquid Crystal Display LCD)

Da vo cng ngh truyn nh sng qua in cc m t gia l cun dy xon. Khi cha
c t trng (cha c dng in) cun dy th nh sng truyn thng, khi c t trng
th nh sng truyn i chiu.
16

Chng 1: Tng quan v k thut ho

Hnh 1.10 Cng ngh truyn nh sng trong mn hnh tinh th lng
CRT Displays (mn hnh CRT)
Advantages (u im)

Disadvantages (nhc im)

p ng nhanh (c phn gii cao)

Ln v nng (typ. 70x70 cm, 15 kg)

Mu sc a dng (C su v rng)

Tiu tn ngun in cao (typ. 140W)

Mu sc bo ho v t nhin

C hi cho sc kho v trng in t v t tnh

Cng ngh khng qu t v hon thin

Mn hnh nhp nhy (at 50-80 Hz)

Gc nhn rng, tng phn v sng cao

Hnh hay b mo ti 4 gc

LCD Displays (mn hnh tinh th lng)


Advantages (u im)

Disadvantages (nhc im)

Hnh dng nh, trng lng nh (approx 1/6 of Gi thnh cao (presently 3x CRT)
CRT, typ. 1/5 of CRT)
Gc nhn hp hn (typ. +/- 50 degrees)
Tiu tn ngun thp (typ. 1/4 of CRT)
tng phn thp (typ. 1:100)
Mn hnh phng tuyt i nn khng mo ti chi ( ngi) thp hn (typ. 200 cd/m2)
cc gc
Mu sc u, nh sinh ng
Khng b hiu ng in t trng
C th mn hnh va ln va rng (>20 inch)

Tm tt chng:
S ra i ca ho 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 truyn ti qua
hnh nh. Cc ng dng ho 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.
17

Chng 1: Tng quan v k thut ho

ho my tnh ngy nay c c ng dng rt rng ri trong nhiu lnh vc


khoa hc, k thut, ngh thut, kinh doanh, qun lCc ng dng ho 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 ho lm tng tnh hp dn cho mnh.
Mt h thng ho bao gi cng gm hai phn chnh l phn cng v phn
mm. Phn cng bao gm cc thit b hin th (thit b xut) v cc thit b nhp. Tiu
biu nht l mn hnh, c hai loi mn hnh thng dng l CRT v LCD.

Bi tp:
1. Cu to v nguyn l hot ng ca mn hnh dng im. Nu cc khi nim
vng m khung, phn gii, t s phng.... ca mn hnh loi ny?
2. ngha v hot ng ca bng tra LUT?
3. Tnh Video Ram ca cc mn hnh ln lt c phn gii l 640x480,
1024x768, 1280x1024 m c mi pixel c m t ln lt l 8bt, 12 bit, 24
bit.
4. Nu chng ta dng cc gi tr 12bit cho mi pixel trong mt bng tham chiu
lookup table, c bao nhiu hng mc m lookup table c c?
5. Ti sao phi chun ho cc phn mm ho? Lit k cc chun ha .

18

Chng 2: Cc gii thut sinh thc th c s

CHNG 2: CC GII THUT SINH THC TH C S


2.1. CC H THNG TO TRONG HO
Trong lnh vc k thut ha, chng ta phi hiu c rng thc cht ca ha l lm
th no c th m t v bin i c cc i tng trong th gii thc trn my tnh.
Bi v, cc i tng trong th gii thc c m t bng ta thc. Trong khi , h
ta thit b li s dng h ta nguyn hin th cc hnh nh. y chnh l vn
c bn cn gii quyt. Ngoi ra, cn c mt kh khn khc na l vi cc thit b khc
nhau th c cc nh ngha khc nhau. Do , cn c mt phng php chuyn i tng
ng gia cc h ta v i tng phi c nh ngha bi cc thnh phn n gin
nh th no c th m t gn ng vi hnh nh thc bn ngoi.
Hai m hnh c bn ca ng dng ha l da trn mu s ha v da trn c
trng hnh hc. Trong ng dng ha da trn mu s ha th cc i tng ha
c to ra bi li cc pixel ri rc. Cc pixel ny c th uc to ra bng cc chng
trnh v, my qut, ... Cc pixel ny m t ta xc nh v tr v gi tr mu. Thun li
ca ng dng ny l d dng thay i nh bng cch thay i mu sc hay v tr ca cc
pixel, hoc di chuyn vng nh t ni ny sang ni khc. Tuy nhin, iu bt li l khng
th xem xt i tng t cc gc nhn khc nhau. ng dng ha da trn c trng
hnh hc bao gm cc i tng ha c s nh on thng, a gic,.... Chng c lu
tr bng cc m hnh v cc thuc tnh. V d : on thng c m hnh bng hai im
u v cui, c thuc tnh nh mu sc, dy. Ngi s dng khng thao tc trc tip
trn cc pixel m thao tc trn cc thnh phn hnh hc ca i tng.
2.1.1. H to thc (WCS World Coordinate System)

Mt trong nhng h ta thc thng c dng m t cc i tng trong th gii


thc l h ta Descartes. Vi h ta ny, mi im P c biu din bng mt cp
ta P(xp,yp,zp) vi xp, yp,zp R

Hnh 2.1 H ta thc.


Ox,Oy, Oz l trc to
xp ,yp,zp : to ca P
2.1.2. H to thit b (DCS Device Coordinate System)

H ta thit b (device coordinates) c dng cho mt thit b xut c th no , v


d nh my in, mn hnh,.. Trong h ta thit b th cc im cng c m t bi cp
19

Chng 2: Cc gii thut sinh thc th c s

ta (x,y). Tuy nhin, khc vi h ta thc l x, y N. iu ny c ngha l cc


im trong h ta thc c nh ngha lin tc, cn cc im trong h ta thit b
l ri rc. Ngoi ra, cc ta x, y ca h ta thit b ch biu din c trong mt gii
hn no ca N. V d : phn gii ca mn hnh trong ch ha l 640x480. Khi
, x(0,639) v y(0,479) (xem hnh 2.2).

Hnh 2.2 H ta trn mn hnh


2.1.3. to thit b chun (NDCS Normalized Device Coordinate System)

Do cch nh ngha cc h ta thit b khc nhau nn mt hnh nh hin th c trn


thit b ny l chnh xc th cha chc hin th chnh xc trn thit b khc. Ngi ta xy
dng mt h ta thit b chun i din chung cho tt c cc thit b c th m t cc
hnh nh m khng ph thuc vo bt k thit b no.
Trong h ta chun, cc ta x, y s c gn cc gi tr trong on t [0,1].
Nh vy, vng khng gian ca h ta chun chnh l hnh vung n v c gc tri
di (0, 0) v gc phi trn l (1, 1).
Qu trnh m t cc i tng thc nh sau (xem hnh 2.3):

Hnh 2.3 H ta trn mn hnh.

2.2. IM V ON THNG
2.2.1. im
Trong h to hai chiu (mt phng) th im c biu din P(x,y), ngoi ra n cn c tnh
cht mu sc. V d v mt im ta c hm putpixel(x,y,color).
2.2.2. on thng

Biu din tng minh: y = f(x)


Mt on thng c xc nh nu bit 2 im thuc n. Phng trnh on thng i
qua 2 im P (x1,y1) v Q(x2,y2) nh sau:

20

Chng 2: Cc gii thut sinh thc th c s

(y-y1)/( x-x1) = ( y2-y1)/( x2-x1)

Q(x2 , y2)

(y-y1)(x2-x1)=(x-x1)(y2-y1)
(x2-x1)y=(y2-y1)x + y1(x2-x1) - x1(y2-y1)
y = ((y2-y1)/(x2-x1))x + y1 - ((y2-y1)/(x2-x1))x1

P(x1, y1)

y = kx + b
k = (y2-y1)/(x2-x1) dc hay h s gc ca ng
b = y1- kx1 on chn trn trc y

y = kx (tc l khi x thay i th y thay i theo)


Hnh 2.4 V on thng PQ
Biu din khng tng minh: ax+by+c=0
Ta c : (y2-y1)x - (x2-x1)y + (x2-x1)y1 - (y2-y1)x1 = 0
(y2-y1)x - (x2-x1)y + x2y1 - x1y2 = 0
hay ax + by + c = 0
Trong a = (y2-y1), b = -(x2-x1 ) v c = x2y1 - x1y2
Biu din thng qua tham s:
P(u) = P1 + u(P2 - P1)

c u [0,1]

x(u) = x1 + u( x2 - x1 )
y (u)= y1 + u( y2 - y1 )

2.3. CC GII THUT XY DNG THC TH C S


2.3.1. Gii thut v on thng thng thng

Nguyn l chung: cho mt thnh phn to x hay y bin i theo tng n v v tnh
nguyn cn li sao cho gn vi to thc nht.
Ta c y =

y2 y1
(x x1 ) y1
x2 x1

Cho x thay i tm y, trong bi ny cho x1 thay i tin ti x2 ta chn n v nh


nht ca mn hnh x=1.
Gii thut thng thng:
void dline(int x1,int y1, int x2,int y2, int color) {
float y;
int x;
for (x=x1; x<=x2; x++) {
y = y1 + (x-x1)*(y2-y1)/(x2-x1) ;
putpixel(x, Round(y), color );
} }

21

Chng 2: Cc gii thut sinh thc th c s


2.3.2. Gii thut Bresenham

1960 Bresenham thuc IBM tm ra cc im gn vi ng thng da trn phn gii


hu hn. Gii thut ny loi b c cc php ton chia v php ton lm trn nh ta
thy trong gii thut trn.
Xt on thng vi 0 < k < 1

Hnh 2.5 M t gii thut Bresenham (0<k<1)


Gi (xi+1,yi+1) l im thuc on thng, ta c yi+1=k(xi+1)+b
d1 = yi+1 - yi = k(xi +1) + b - yi
d2 = yi+1 yi+1 = yi+1 - k(xi + 1) - b
- Nu d1 <= d2 => yi+1 = yi
- Ngc li d1 > d2 => yi+1 = yi +1
t D = d1 - d2= 2k(xi + 1) - 2yi + 2b - 1
C k=y/x v t Pi = xD = x (d1 - d2)
Pi = x(2y/x(xi +1)- 2yi +2b-1) = 2yxi +2y -2xyi + 2bx -x
Ta tnh bc tip:
Pi+1 = 2yxi+1 +2y -2xyi+1 + 2bx -x
Pi+1 - Pi = -2x(yi+1 -yi) + 2y(xi+1 -xi)
C xi+1 =xi+1 nn:
Pi+1 - Pi = - 2x(yi+1 -yi) + 2y = 2y - 2x(yi+1 -yi)
Nu Pi <= 0 th yi +1 = yi Pi+1 = Pi + 2y
Nu Pi > 0 th yi+1 = yi +1 Pi+1 = Pi + 2y - 2x
Tnh gi tr u: P1?
P1 = x(d1 - d2) = x(2y/x(x1 +1)- 2y1 +2b-1)
= 2yx1 +2y -2xy1 + 2bx -x
C y1=kx1 + b = y/x x1 +b
P1 = 2yx1 +2y -2x((y/x)x1 +b) + 2bx -x
= 2yx1 +2y -2yx1 - 2bx + 2bx -x
P1 = 2y - x

22

Chng 2: Cc gii thut sinh thc th c s


Bt u

x = x1 ;
x=x1;y=y1;
y = y1;
dx = x2dx=x2-x1;
- x1;
dy = y2 - y1;
P = dx -dy=y2-y1;
2dy;

Putpixel (x ,y);

P
>0
p<=0

No

p=
P = Pp+2dy-2dx
- 2dy + 2dx

x=x+1

yes
P = P - 2dy
p=p+2dy

yes

y=y+1

void Bre_line(int x1, int y1,


int x2, int y2, int c){
int x, y, dx, dy,p;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
p = 2*dy - dx;
for (x=x1; x<=x2; x++) {
putpixel(x, y, c);
if (p <= 0)
p+=2*dy; //p=p+2dy
else {
p+=2*(dy-dx);//p=p+2dy-2dx
y++;
}
}
}

x < x2

no
Kt thc

Hnh 2.6 S khi thut ton


Bresenham cho ng thng
Xt 4 trng hp ca k :
0<k<1
int p=2*dy-dx;
if(p>=0) {
p+=2*dy-2*dx;
y++;
} else
p+=2*dy;

k>1
int p=dy-2*dx;
if(p<=0){
p+=2*dy-2*dx;
x++;
} else
p+=-2*dx;

-1<k<0
int p=2*dy+dx;
if(p<=0) {
p+=2*dy+2*dx;
y--;
} else
p+=2*dy;

k<-1
int p=-dy-2*dx;
if(p>=0) {
p+=-2*dy-2*dx;
x--;
} else
p+=-2*dx;

2.3.3. Gii thut trung im-Midpoint

Jack Bresenham 1965/Pitteway 1967, p dng cho vic sinh cc ng thng v ng


trn 1985. Xt trung im ca on AB (M)
Nu M trn on thng AB th chn B cn
M di on thng AB chn A
Cng thc n gin hn, to c cc im tng t nh vi Bresenham
d = f(xi + 1, yi + 1/2) l trung im ca on AB

23

Chng 2: Cc gii thut sinh thc th c s


d<0

d>0

A
B

Hnh 2.7 M t gii thut Midpoint


So snh hay kim tra M s c thay bng vic xt gi tr d.
d > 0 im B c chn khi yi+1 = yi
d < 0 im A c chn khi yi+1 = yi + 1
Trng hp d = 0 chng ta c th chn im bt k hoc A, hoc B.
S dng phng php biu din khng tng minh
f(x,y)= ax +by +c =0 (1) dx =x2-x1 dy =y2-y1
Biu din tng minh:
y= (dy/dx)x +B hay f(x,y)=0= xdy - ydx +Bdx (2)
So snh (1) v (2) ta c a=dy,

b=-dx v c= Bdx

C f(x,y)=0 vi mi (x,y) thuc ng thng


t di=f(xi+1,yi+1/2) = a(xi+1) +b(yi +1/2) +c
Nu chn A (d<0) th M s tng theo 2 hng x,y
di+1=f(xi+2,yi+3/2) = a(xi+2) +b(yi +3/2) +c
di+1 di = a+b Hay di+1 = di + dy - dx
Nu chn B (d>0) th M s tng theo x
di+1=f(xi+2,yi+1/2) = a(xi+2) +b(yi +1/2) +c
di+1 - di = a Hay di+1 = di + dy
Tnh d1 ? d1 = f(x1+1,y1+1/2) = a(x1+1) +b(y1 +1/2) +c
= ax1 +by1 +c +a +1/2 b = f(x1,y1) +a +b/2
C (x1,y1) l im bt u, nm trn on thng nn f(x1,y1) = 0
Vy d1 = a+ b/2 = dy - dx/2

24

Chng 2: Cc gii thut sinh thc th c s


Bt u

x = x1 ;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
d = dy - dx/2;

Putpixel (x ,y);

d <= 0

No
d = d + dy - dx

x=x+1

yes
d = d + dy

yes

y=y+1

x < x2

/* Thuat toan Midpoint de ve


doan thang (0<k<1) */
void Mid_line(int x1, int y1,
int x2, int y2, int c)
{ int x, y, dx, dy,d;
y = y1;
dx = x2 - x1;
dy = y2 - y1;
d= dy - dx/2;
for (x=x1; x<=x2; x++) {
putpixel(x, y, c);
if (d <= 0)
d = d + dy;
else {
y ++;
d = d + dy - dx;
}
}
}

no
Kt thc

Hnh 2.8 S khi gii thut Midpiont


cho on thng
2.3.3. Gii thut sinh ng trn (Scan Converting Circles)(Bresenham)

Phng trnh ng trn i qua tm c to (xc,yc) l:


(x - xc)2 + (y - yc)2 = r2
Hnh trn l hnh i xng tm cch

Hnh 2.9 Hnh trn i xng 8 phn


n gin ta xt tm trng gc 0 th phng trnh n gin :

x2 + y2 = r2

Ta xt cc im to ra t gc phn t th 2: t 900 n 450 , thc hin theo hng


+x, -y

25

Chng 2: Cc gii thut sinh thc th c s

Hnh 2.10 M t gii thut Bresenham


Gi s bt u xi vy xi+1 = xi +1
y2 = r2 - (xi +1)2
d1 = yi2 - y2 = yi2 - r2 - (xi +1)2
d2 = y2 - (yi - 1)2 = r2 - (xi +1)2 - (yi - 1)2
pi = d1 - d2 = 2(xi +1 )2 + yi2 + (yi - 1)2 -2r2
Xt:

pi <0 (d1<d2) chn im nm ngoi ng trn yi+1 = yi


pi >=0 (d1>=d2) chn im nm trong ng trn yi+1 = yi +1
pi = 2(xi +1 )2 + 2yi2 - 2yi 1 - 2r2
pi+1 = 2(xi +2 )2 + 2yi+12 - 2yi+1 + 1 - 2r2
pi+1 = pi + 4xi +6 + 2yi+12 - 2yi2- 2yi+1 + 2yi
pi+1 = pi + 4xi +6 + 2(yi+12 - yi2 )- 2(yi+1 - yi )

Nu pi <0 hay yi+1 = yi


pi+1 = pi + 4xi +6
Nu pi >=0 hay yi+1 = yi -1
pi+1 = pi + 4xi +6 - 4yi + 2 + 2
pi+1 = pi + 4(xi - yi ) + 10
Tnh P1 ? khi ng vi x1=0 v y1 =r
p1 = 2(x1 +1)2 + y12 + (y1 - 1)2 -2r2
= 2 + r2 + (r-1)2 - 2r2= 3 - 2r
Gii thut l:

26

Chng 2: Cc gii thut sinh thc th c s


Bt u

X=0; y=r;
p=3-2r;
Putpixel(x,y,c);
X++
p<0
p=p+4x+6;

p=p-4y+4x+10
y--

X<r

void Bre_circle(int xc, int yc,


int Radius, int color)
{
int x, y, p;
x = 0;
y = Radius;
p = 3 - 2 * Radius;
while (x <= y)
{
putpixel(xc + x, yc + y,
color);
if (p < 0)
p += 4 * x + 6;
else
{
p += 4 * (x-y) + 10;
y--;
}
x++;}
}

d2

Hnh 2.11 S khi gii thut Bresemham


cho ng trn
Cu hi: lc s dng tnh i xng cho tm cch v mt ng trn y t cc
to pixel c to ng vi gc phn t th hai. Mt vi Pixel c v hai ln, hin
tng ny gi l Overstrike. Hy ch nh xem ni no xy ra hin tng ?
Tr li: Ti (r,0) hoc (0,r) v v tr ng cho: (r, r) trong = 1/2 0.7071
/* Thuat toan Bresenham de ve duong tron */
#include <graphics.h>
#include <conio.h>
#define pc(xc,yc,x,y) {
putpixel(xc + x, yc + y, color);
putpixel(xc - x, yc - y, color);
putpixel(xc -y, yc +x, color);
putpixel(xc +y, yc -x, color);
}
void Bresenham_Circle(int xc, int yc, int Radius, int color){
int x, y, p;
x = 0;
y = Radius;
p = 3 - 2 * Radius;
pc(xc,yc, Radius,0); //ve 4 diem dac biet
while (x < y){
if (d < 0)
p += 4 * x + 6;
else{
p += 4 * (x-y) + 10;

27

Chng 2: Cc gii thut sinh thc th c s


y--;
}
x++;
pc(xc,yc, x,y);
pc(xc,yc, y,x);
}
pc(xc,yc, y,y); // ve 4 diem phan giac x=y
}
void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "");
Bresenham_Circle(getmaxx() / 2, getmaxy() / 2, 150, 4);
getch();
closegraph();
}

2.3.5. Gii thut sinh ng trn Midpoint

Phng trnh ng trn khng tng minh:


f(x,y) = x2+y2-R2 =0

Hnh 2.12 M t gii thut Midpoint


Nu f(x,y) = 0 th nm trn ng trn
f(x,y) > 0 th nm bn ngoi ng trn
f(x,y) < 0th nm bn trong ng trn
Thc hin gii thut trn 1/8 ng trn v ly i xng cho cc gc cn li.
Vi M l im gia ca AB
Vi di l gi tr ca ng trn ti mt im bt k
Ta c: di = f(xi+1,yi - 1/2) = (xi +1 )2 + (yi - 1/2)2 - r2
di < 0 chn A th im k cn s dch chuyn theo x mt n v
di+1 = f(xi +2, yi -1/2)
= (xi +2)2 + (yi - 1/2)2 - r2
di+1 - di = (xi +2)2 - (xi +1 )2 = 2xi +3
di+1 = di + 2xi+3
di >= 0 chn B th im k cn s dch chuyn theo x 1 n v, theo y -1
n v
di+1 = f(xi +2, yi -3/2)
28

Chng 2: Cc gii thut sinh thc th c s

= (xi +2)2 + (yi - 3/2)2 - r2


di+1 - di = 2xi - 2yi +5
di+1 = di + 2xi - 2yi +5
Tnh d1? ti im (0, r)
d1 =f(1,r-1/2)= 12 + (r-1/2)2 - r2
d1 = 5/4 -r
Thut ton nh sau:
void Mid_circle(int xc, int yc,
int Radius, int color)
{
int x, y, d;
x = 0;
y = Radius;
d = 1- Radius;
while (x <= y){

Bt u
X=0; y=r; d=1-r;

putpixel(xc + x, yc + y, color);

Putpixel(x,y,c);

if (d< 0)
d +=2 * x + 3;
else{
d += 2 * (x-y) + 5;
y--;
}
x++;
}

X++
d<0
d=d+2x+3;

d=d+2x-2y+5
y--

X<r

End

Hnh 2.13 S khi gii thut Midpiont v


ng trn
void Midpoint_Circle(int xc,
int x, y, d;
x = 0;
y = Radius;
d = 5 / 4 - Radius;
while (x <= y) {
putpixel(xc + x, yc + y,
putpixel(xc - x, yc + y,
putpixel(xc + x, yc - y,
putpixel(xc - x, yc - y,
putpixel(xc + y, yc + x,
putpixel(xc - y, yc + x,
putpixel(xc + y, yc - x,
putpixel(xc - y, yc - x,
if (d < 0)

int yc, int Radius, int color){

color);
color);
color);
color);
color);
color);
color);
color);

29

Chng 2: Cc gii thut sinh thc th c s


d += 2 * x + 3;
else {
d += 2 * (x-y) + 5;
y--;
}
x++; }}

2.3.6. Gii thut sinh ng ellipse

Tnh i xng c thc hin trn 4 cch


F ( x, y ) = b 2 x 2 + a 2 y 2 a 2 b 2 = 0
A
M
B

tiep tuyen = -1
gradient
B

M
i

Hnh 2.14 M t gii thut sinh ng ellipse


Vector vi tip tuyn gradient =1
Ta c tip tuyn vi cung trn ( dc) = -1= dy/dx = - fx/fy
Trong fx=2b2x o hm ring phn ca f(x,y) vi x
V fy=2a2y o hm ring phn ca f(x,y) vi y
Gi s ta ch xt trn gc phn t th nht: gi s ta chia cung t (0,b) n (a,0) ti
Q, c dc -1
Trn phn 1: x thay i th y thay i theo
Trn phn 2: y thay i th x thay i theo
Xt trn phn 1:
Bt u t (0,b), bc th i (xi,yi) chn tip
A(xi+1, yi)
B(xi+1,yi-1)
Tham s quyt nh:
Pi = f(xi+1,yi-1/2) = b2(xi+1)2 + a2(yi-1/2)2 -a2b2
Pi+1 = f(xi+1+1,yi+1-1/2) = b2(xi+1+1)2 + a2(yi+1-1/2)2 -a2b2
Pi+1 - Pi = b2((xi+1+1)2 - (xi+1)2 )+ a2((yi+1-1/2)2 - (yi-1/2)2 )
Pi+1 = Pi + 2b2xi+1+ b2 + a2((yi+1-1/2)2 - (yi-1/2)2 )
Nu Pi <0 chn A
xi+1=xi+1
yi+1=yi
Pi+1 = Pi + 2b2xi(xi+1) +b2 = Pi + 2b2xi +3b2
Hay Pi+1 = Pi + b2(2xi +3)
30

Chng 2: Cc gii thut sinh thc th c s

Nu Pi >=0 chn B
xi+1=xi+1
yi+1=yi -1
Pi+1 = Pi + 2b2xi(xi+1) +b2 + a2((yi-1 -1/2)2 - (yi-1/2)2 )
= Pi + 2b2xi +3b2 +a2(-3yi +9/4 +yi -1/4)
= Pi + 2b2xi +3b2 +a2(-2yi +2)
Hay Pi+1 = Pi + b2(2xi +3) + a2(-2yi +2)
Tnh P1? ti (0,b)
P1 = f(x1+1,y1-1/2) = b2 + a2(b-1/2)2 -a2b2
P1 = b2 - a2b +a2/4
Xt trn phn 2:
Ta ly to d ca Pixel sau cng trong phn 1 ca ng cong tnh gi tr ban u
cho phn 2.
Gi s pixel (xk,yk) va chuyn qut cui cng ca phn 1 nhp vo bc j cho phn
2 (xj,yj).
Pixel k tip c th l:
C(xj,yj-1)
D(xj+1, yj-1)
Tham s quyt nh:
qj = f(xj+1/2,yj-1) = b2(xj+1/2)2 + a2(yj-1)2 -a2b2
qj+1 = f(xj+1+1/2,yj+1-1) = b2(xj+1+1/2)2 + a2(yj+1-1)2 -a2b2
qj+1 - qj = b2((xj+1+1/2)2 - (xj+1/2)2 )+ a2((yj+1-1)2 - (yj-1)2 )
qj+1 = qj + b2((xj+1+1/2)2 - (xj+1/2)2 )+ a2- 2a2yj+1
Nu qj <0 chn D
yj+1=yj-1
xj+1=xj +1
qj+1 = qj + b2((xj+3/2)2 - (xj+1/2)2 )+ a2- 2a2(yj -1)
qj+1 = qj + b2(3xj +9/4- xj -1/4) +3a2 -2a2yj
Hay qj+1 = qj + b2(2xj +2) +a2 (-2yj +3)
Nu qj >=0 chn C
yj+1=yj -1
xj+1= xj
qj+1 = qj + a2- 2a2(yj-1)
Hay qj+1 = qj + a2(3 - 2yj )
Tnh q1?
q1 = f(xk+1/2,yk -1) = b2(xk+1/2)2 + a2(yk-1)2 -a2b2
31

Chng 2: Cc gii thut sinh thc th c s

Cu hi: lc ly i xng 4 cch tm 1 Ellipse hon chnh t cc to pixel


c to ra vi cung phn t th 1. C hin tng overstrike xy ra hay khng?
Tr li: hin tng overstrike xy ra ti:
(0,b); (0,-b); (a,0); (-a,0)
Thut ton
#include <graphics.h>
#include <conio.h>
#define ROUND(a) ((long)(a+0.5))
void plot(int xc, int yc, int x, int y, int color){
putpixel(xc+x, yc+y, color);
putpixel(xc-x, yc+y, color);
putpixel(xc+x, yc-y, color);
putpixel(xc-x, yc-y, color);
}
void Mid_ellipse(int xc, int yc, int a, int b, int color){
long x, y, fx, fy, a2, b2, p;
x = 0;
y = b;
a2 = a * a; //a2
b2 = b * b; // b2
fx = 0;
fy = 2 * a2 * y; // 2a2y
plot(xc, yc, x,y, color);
p = ROUND(b2-(a2*b)+(0.25*a));
// p=b2 - a2b + a2/4
while (fx < fy){
x++;
fx += 2*b2;
//2b2
if (p<0)
p += b2*(2*x +3); // p=p + b2 (2x +3)
else{
y--;
p+= b2*(2*x +3) + a2*(-2*y +2);
// p = p + b2(2x +3) + a2 (-2y +2)
2
fy -= 2*a2; // 2a
}
plot(xc, yc, x, y, color);
}
p=ROUND(b2*(x+0.5)*(x+0.5) + a2*(y-1)*(y-1) - a2*b2);//b2(x+1/2)2+a2(y1)2 - a2b2
while (y>0){
y--;
fy -= 2*a2; // 2a2
if (p>=0)
p+=a2*(3 - 2*y); //p =p + a2(3-2y)
else{
x++;
fx += 2*b2; // 2b2
p += b2*(2*x+2) + a2*(-2*y +3);
//p=p + b2(2x +2) +a2(-2y +3)
}
plot(xc, yc, x, y, color);
}
}

32

Chng 2: Cc gii thut sinh thc th c s


void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "");
Mid_Ellipse(getmaxx() / 2, getmaxy() / 2, 150, 80, 4);
getch();
closegraph();
}

2.3.7. Gii thut sinh k t

Trong mn hnh text, truy xut cc k t trn mn hnh c h tr bi phn cng. Cc k


t c lu tr trong b nh ROM, di dng bitmap hay cc ma trn nh. Phn cng s
a k t ln mn hnh ti v tr xc nh, tnh ton cun trang v xung dng.
Trong ho:
Vector: nh ngha cc k t theo nhng ng cong mm bao ngoi ca chng,
tn km v mt tnh ton.
u nhc im:
- phc tp (tnh ton phng trnh)
- lu tr gn nh
- cc php bin i da vo cng thc bin i
Hnh 2.15 K t vector

- Kch thc ph thuc vo mi trng (khng c kch


thc c nh)

Bitmap: nh ngha mi k t vi 1 font ch cho trc l 1 nh bitmap hnh ch


nht nh.
- n gin trong vic sinh k t
(copypixel)
- Lu tr ln
- Cc php bin i(I,B,U, scale) i hi
lu tr thm
Hnh 2.16 K t bitmap

- Kch thc khng i

bitmap: s dng hm copypixel (copy im nh) c lu tr trong b nh c nh


- Fontcache, a vo b nh m hin th. Mi 1 k t nh 1 ma trn 2 chiu ca
cc im nh - mt n.
Hm_sinh_ki_tu (mask)
{xmax, ymax, xmin, ymin
//cc gii hn ca mt n
xo, yo
//im gc trn b m hin th
for (i=ymin;i< ymax ;i++)
for (j=xmin; j< xmax ; j++)
if (mask(i,j) <> 0)
copypixel ((mask(i,j), pixel(xo+j, yo+i));
}

33

Chng 2: Cc gii thut sinh thc th c s

K t fontcache bitmap n gin ca SRGP lu tr cc k t theo chui lin tip


nhau trong b nh. Nhng rng cc k t khc nhau, truy nhp cc fontcache thng
qua bn ghi v cu trc cho tng k t.
Cu trc font ch
typedef struct {
int leftx;
int width;
} Charlocation;
//V tr ca text
struct {
int CacheId;
int Height;
// rng ch
int CharSpace;
// Khong cch gia cc k t
Charlocation Table [128]; //bng ch ci
} fontcache;

K t vector
Xy dng theo phng php nh ngha cc k t bi ng cong mm bao ngoi
ca chng d dng thay i kch thc ca k t cng nh ni suy ra cc dng ca k t.
Hon ton c lp vi thit b.
Ti u nht: lu tr font di dng ng bao. Khi cc chng trnh ng dng s
dng l bitmap tng ng vi chng.
2.3.8. Gii thut sinh a gic (Polygon)

a. Thut gii v ng bao a gic


Vic biu din a gic thng qua:
Tp cc on thng
Tp cc im thuc a gic
Cc loi a gic:

Tam gic

li

lm

t ct

min

Hnh 2.17 Cc loi a gic


a gic li: l a gic c ng thng ni bt k 2 im bn trong no ca a gic
u nm trn trong a gic. a gic khng li l a gic lm.
Cc ng thng bao a gic - cnh ca a gic. Cc im giao ca cnh - nh ca
a gic. Thng tin cn thit xc nh a gic:
S cnh
To cc nh ca a gic
Gii thut:
Polygon (arrayx, arrayy,n)

34

Chng 2: Cc gii thut sinh thc th c s


{

if (n<3
//khng phi a gic
exit;
for (i=1 ; i<= n-1; i++)
line(arrayx[i],arrayy[i], arrayx[i+1], arrayy[i+1]);
line(arrayx[i+1],arrayy[i+1], arrayx[1], arrayy[1]); }

b. Cc thut ton t min kn a gic


Li th ca hin th raster l: kh nng lu tr, copy, t mu mt vng...C hai dng
vng t thng gp l: t bng mt mu thun nht (solid fill), t theo mu t (fill
pattern) no .
Cn thit b vector th hn ch do cc vng t mu to ra bi mt tp cc on thng
st nhau - lm chm qu trnh lm ti.
Gii thut ng bin (Boundary - fill Algorithm)
Bt u t 1 im (x,y) trong vng cn c t mu:
o Xc nh mu im: getpixel(x,y,c)
o T mu putpixel(x,y,c)
Bc tip: kim tra thuc tnh mu cc im ln cn
o im ln cn t mu (exit)
o Trng vi mu ng bin(exit)
o Nu khng th t mu
Cc phng php xc nh im ln cn

4-connected 8-connected

Hnh 2.18 Phng php tnh tin gii thut


Gii thut t mu ng bin:
#include <graphics.h>
#include <conio.h>
void FloodFill (int x, int y, int in_color, int new_color){
if (getpixel(x, y) == in_color){
putpixel(x, y, new_color);
FloodFill(x-1, y, in_color, new_color);
FloodFill(x+1, y, in_color, new_color);
FloodFill(x, y-1, in_color, new_color);
FloodFill(x, y+1, in_color, new_color);
}}
void main(){
int gr_drive = DETECT, gr_mode;
initgraph(&gr_drive, &gr_mode, "");
circle(getmaxx() / 2, getmaxy() / 2, 15);
FloodFill(getmaxx() / 2, getmaxy() / 2, 0, 4);
getch();
closegraph();}

35

Chng 2: Cc gii thut sinh thc th c s

Gii thut dng qut (scanline) cho vic t mu vng


Gii thut da trn tng s dng mt ng qut trn trc y ca mn hnh i t
ymax n ymin ca vng cn c t mu.
Vi mi gi tr y = yi ng thng qut ct cc ng bin ca vng cn t to ra
on thng y = yi vi x [xmin, xmax]. Trn on thng chng ta t mu cc im tng
ng i t xmin n xmax c cc im t (xi, yi) y = yi.
n gin nht v d t mu hnh ch nht:
void scanline_rectg(x1,y1,x2,y2,c){
for(i=y1; i>=y2; i--)
for(j=x1; j<= x2;j++)
putpixel(i,j,c); }

int i,j;

Php t mu 1 a gic bt k s phc tp hn rt nhiu so vi hnh ch nht


Gi s vng t c cho bi 1 a gic n nh: pi (xi,yi), i=0,1,....,n-1. a gic ny c
th l a gic li, a gic lm hay a gic t ct....
Cc bc tm tt chnh ca thut ton:
Tm ytop, ybottom ln lt l gi tr ln nht, nh nht ca tp cc tung ca
cc nh ca a gic cho.
ytop = max{yi,(xi,yi) P},
ybottom = min{yi,(xi,yi) P}.
ng vi mi dng qut y=k, vi k thay i t ybottom n ytop lp:
o Tm tt c cc honh giao im ca dng qut y=k vi cc cnh
ca a gic
o Sp xp cc honh giao im theo th t tng dn: xo,x1,....
o T mu cc on thng trn ng thng y=k ln lt c gii hn
bi cc cp (xo,x1), (x2,x3), ......, (x2k,x2k+1).
Chng ta s gp 1 s vn sau:
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.
y

yqmax
yq
yq

yqmin
x

Hnh 2.19 Gii thut scanline cho mt a gic bt k


36

Chng 2: Cc gii thut sinh thc th c s

Nu s giao im tm c gia cc cnh a gic v dng qut l l (iu ny


ch xy ra khi dng qut s i qua cc nh ca a gic) khi ta s tnh s
im l 2 th c th t khng chnh xc. Ngoi ra, vic tm giao im ca
dng qut vi cc cnh nm ngang l trng hp t bit...
gii quyt cc vn trn ta c cc phng php sau:
Danh sch cc cnh kch hot (AET - Active Edge Table)
Mi cnh ca a gic c xy dng t 2 nh k nhau Pi(xi,yi) v Pi+1(xi+1,yi+1) gm
cc thng tin sau:
ymin: gi tr 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 ymax
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 xp 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. u tin ta c danh dch cha ton b cc cnh
ca a gic gi l ET (Edge Table) c sp xp theo th t tng dn ca ymin, ri sau mi
ln dng qut thay i s di chuyn cc cnh trong ET tho iu kin sang AET.
Mt dng qut y=k ch ct 1 cnh ca a gic khi v ch khi k>=ymin v y>0. Chnh
v vy m vi cc t chc ca ET (sp theo th t tng dn ca ymin) iu kin chuyn
cc cnh t ET sang AET s l k>=ymin; v iu kin loi mt cnh ra khi AET l
y<=0
Cng thc tm giao im nhanh
Nu gi xk,xk+1 ln lt l cc honh giao im ca mt cnh no vi cc dng
qut y=k v y=k+1 ta c:
xk+1 - xk = 1/m ((k+1) - k) = 1/m hay xk+1 = xk + 1/m
Nh vy nu lu honh giao im ng vi dng qut trc li, cng vi h s
gc ca cnh, ta xc nh c honh giao im ng vi dng qut k tip theo cng
thc trn. Nn thng tin ca cnh c 2 bin: DxPerScan , xIntersect.
Trng hp dng qut i ngang qua mt nh:
Tnh 1 giao im nu chiu ca 2 cnh k ca nh c xu hng tng hay gim
Tnh 2 giao im nu chiu ca 2 cnh k ca nh c xu hng thay i, ngha
l tng-gim hay gim-tng.

37

Chng 2: Cc gii thut sinh thc th c s


Pi-1

Pi+1

Pi-1

Pi+1

Pi
Pi
Pi-1

Pi
Pi+1

Pi+1
Pi-1

Pi
B

Hnh 2.20 Qui tc tnh: mt giao im (A) v hai giao im (B)

Hnh 2.21 lu thut ton scan - line


Gii thut t vng kn theo mu (Pattern filling)
object (nh mu)
A[m,n]
Vn : xc nh im mu v nhiu im tng ng vi chng trn mn hnh.
Phng php 1:
Tm im neo u tri nht hng u tin ca a gic.
38

Chng 2: Cc gii thut sinh thc th c s

Nhc im: khng c im nh v tr phn bit mt cch r rng cho mu t trong


mt a gic bt k.
Phng php 2: s dng cho SRGP
Ly im neo gc to , gi s ta coi c mn hnh c lt bi mu t cc thc
th l cc ng bin cho cc vng t, vy nu ngoi cc thc th cc mu t khng c
php th hin.
y

y
neo

neo
x

Hnh 2.22 Phng php ly im neo

Tm tt chng:
c th hin th cc i tng ho 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 to th gii thc v dy cc pixel tng ng gn vi chng nht trn to
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 Midpiont u tp trung vo vic a ra cch chn mt trong hai im nguyn k tip
khi bit 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
Midpiont a ra cch chn phc tp hn nhng cho kt qu tt hn. Tng t dng hai
gii thut Bresenham v Midpiont v ng trn v ellpise v mt s ng cong
khc.
Cc thut ton t mu vng gm thut ton loang ( qui) hay thut ton dng qut.
C th t cng mt mu hay t theo mu.

Bi tp:
1. Ch nh cc v tr mnh no s c chn bi thut ton Bresenham lc chuyn
qut mt ng thng t to pixel (1,1) sang to pixel (8,5).
2. Dng gii thut Bresenham vit hm sinh on thng (xt tt c cc trng hp ca
h s gc).
3. Dng gii thut Midpiont vit hm sinh on thng (xt tt c cc trng hp ca
h s gc).
39

Chng 2: Cc gii thut sinh thc th c s

4. Dng gii thut Midpiont vit hm sinh ng trn (to tm (xc,yc) v bn knh
r).
5. Dng gii thut Midpiont vit hm sinh ng ellipse (to tm (xc,yc) v bn
knh rx v ry ).
6. T hm v ng thng thit k v ci t hm v cc hnh sau: hnh ch nht, a
gic, ngi nh....
7. Vit gii thut tm giao im hai on thng.
8. Vit chng trnh t mu Floodfill (s dng qui vi 4-connected).
9. a ra lu thut ton t mu theo dng qut.Vit thut ton t mu scan-line.

40

Chng 3: Cc php bin i ho

CHNG 3: CC PHP BIN I HO


3.1. CC PHP BIN I HNH HC HAI CHIU
3.1.1. Php bin i Affine (Affine Transformations)

Php bin i Affine l php bin i tuyn tnh ta im c trng ca i tng


thnh tp tng ng cc im mi to ra cc hiu ng cho ton i tng.
V d: php bin i ta vi ch 2 im u cui ca on thng to thnh 2 im
mi m khi ni chng vi nhau to thnh on thng mi. Cc im nm trn on thng
s c kt qu l im nm trn on thng mi vi cng php bin i thng qua php ni
suy.
3.1.2. Cc php bin i i tng

Cc i tng phng trong ho 2 chiu m t tp cc im phng. im trong ho 2


chiu biu din thng qua to , vit di dng ma trn gi l vect v tr.
C 2 dng biu din:
Mt hng v 2 ct: [x

y]

x
Hai hng v 1 ct:
y

Trong gio trnh chng ta chn biu din im l ma trn hng (mt hng v 2 ct).
Tp cc im c lu tr trong my tnh s c vit di dng ma trn v tr ca
chng. Chng c th l ng thng, ng cong, nh....tht d dng kim sot cc i
tng thng qua cc php bin i chng, thc cht cc php bin i ho ny c
m t di dng cc ma trn.
3.1.2.1. Php bin i v tr
Gi s ta c im P = [ x y ] trong mt phng vi [x y] l vect v tr ca P, k hiu l
[P]. Gi ma trn T l ma trn bin i s c dng:
a b
T =

c d

y
P

x
Hnh 3.1 Php bin i v tr

Ta c im P sau php bin i thnh P c gi tr [x y].


Thc thi php bin i ng trn 1 im nh s ng vi ton b i tng.

41

Chng 3: Cc php bin i ho

a b
'
'
= [(ax + cy ) (bx + dy )] = x y
c
d

[X ]* [T ] = [x y]*

Hay ta c: x = ax + cy
y = bx + dy
Xt ma trn bin i T:
Php bt bin:
Khi : a = d =1 v b = c = 0 v ma trn cho php bt bin l:
1 0
T =

0 1

[X ]* [T ] = [x

1 0
y ]*
= [x
0 1

y ] = [x'

y ']

Vy x=x v y = y hay l P = P chng t bt bin qua php bin i.


Php bin i t l (scaling):
Nu d=1 v b = c = 0 th ma trn bin i l:
a 0
T =

0 1

x = ax
y = y

[X ]* [T ] = [x

a 0
y ]*
= [(ax ) y ] = [x'
0 1

y ']

P dch chuyn theo trc x vi t l a xc nh.


Nu b = c =0 th ma trn bin i l:
a 0
T =

0 d

[X ]* [T ] = [x

a 0
y ]*
= [ax dy ] = [x'
0 d

y ']

Hay tng qut hn gi Sx, Sy ln lt l t l theo trc x v trc y, th ma trn t l


s l:
Sx 0
T =

0 Sy

Khi Sx , Sy >1 gi l php phng to


Khi Sx, Sy <1 gi l php thu nh
Cc trng hp c bit:

42

Chng 3: Cc php bin i ho


Sx=-1
P

Sy=-1

Sx=Sy=-1

P
i xng qua y

i xng qua x

i xng qua gc to

Hnh 3.2 Cc php i xng trn 2D


Php bin dng

Khi a = d = 1 th to ca P ph thuc vo thay i ca b v c


Xt c = 0

[X ]* [T ] = [x

1 b
y ]*
= [x bx + y ] = [x'
0 1

y ']

P
y=bx+y

bx

Hnh 3.3 Php bin dng theo trc oy


C P khng thay i gi tr to x, cn y thay i ph thuc vo c b v x
Xt b = 0

[X]* [T ] = [x

1 0
y ]*
= [x + cy
c 1

cy

y ] = [x '

y ']

x=x+cy
P

Hnh 3.4 Php bin dng theo trc ox


Ch : im gc to P[0 0] bt bin vi mi php bin i
Php quay
C >0 ngc chiu kim ng h

43

Chng 3: Cc php bin i ho

Hnh 3.5 Php quay trn 2D

Ta c:
P[x y]= [rcos rsin]
P[x y] = [rcos(+) rsin(+)]
P[x y]

= [r(coscos - sinsin)r(cossin + sincos)]


= [(xcos - ysin)(xsin + ycos)]

Vy:

x = xcos - ysin
y = xsin + ycos

Ta c:
[X]= [X]* [T] = [(xcos - ysin) (xsin + ycos)]
Vy T tng qut khi quay i tng quanh gc to 1 gc bt k l:

[T ] =

cos

sin

sin
cos

3.1.2.2. Php bin i tng hp


Phng php bin i s dng php nhn ma trn vi to im thng qua cc vect v
tr tht s hiu qu v em li cng c mnh v ho cho ngi s dng. Nhng thc t
cc thao tc thng cn khng ch mt m nhiu php bin i khc nhau. Ta c php
hon v khi nhn ma trn l khng thc hin nhng kh nng t hp cc php nhn li cho
php to ra mt ma trn bin i duy nht. Lm gim bt ng k khi lng tnh ton
trong qu trnh bin i, lm tng tc cc chng trnh ng dng v to iu kin cho vic
qun l cc bin i trong ng dng.
Gi s ta c P vi [X] = [x y], c hai php bin i [T1] quay quanh gc to 900:
0 1
T1 =

1 0

V [T2] ly i xng P qua gc to :


1 0
T2 =

0 1

Ta c:

44

Chng 3: Cc php bin i ho

[X '] = [X ]* [T1] = [x

0 1
y ]*
= [ y
1 0

x]

1 0
x ]*
= [ y x]
0 1

[X "] = [X ']* [T 2] = [ y

Gi s [T3] l ma trn tng hp [T1] v [T2]

[X *] = [X ]* [T 3] = [x

0 1
y ]*
= [ y x]
1 0

Kt lun: bin i qua nhiu ma trn thnh phn s tng ng vi php bin i
qua ma trn tng hp t cc php bin i .

3.2. TA NG NHT V CC PHP BIN I


3.2.1. To ng nht

Ta xt php tnh tin:


x= x + dx
y = y + dy
Vy

P = P + [T]

[T ] =

dx

dy

Vy php bin i tng hp:


P=P*[T] + [T] = (P + [T]) [T] + [T]
R rng khng th biu din thng qua ma trn tng hp 2 chiu 2x2 c. Php
tnh tin a ra ma trn bin i tng hp l khng th.
Th no l phng php biu din to ng nht ? l phng php biu din m
rng thng qua to ng nht ca cc vect v tr khng ng nht [x y] l ng dng
ca php bin i hnh hc m to im c m t di ma trn [x* y* h] vi
x=x*/h, y=y*/h c h l mt s thc tu . Vy mt vect v tr [xy] bt k trn mt phng
xoy bng tp v s cc im ng nht [hx hyh]. V d: [2 5] s biu din bng [4102],
[6153]..... n gin nht l [251].
Vy to ng nht ca vect v tr [X]= [ x y 1]. Khi ma trn bin i s l
3x3:
a b 0
[T ] = c d 0
dx dy 1

P ' = P.[T ] = [x

a b 0
y 1]* c d 0
dx dy 1

x=ax + cy +dx
45

Chng 3: Cc php bin i ho

y=bx + dy + dy
[X]= [x y1]
Trong dx, dy l khong tnh tin theo trc x v y.
3.2.2. Php bin i vi to ng nht
a b 0
[T ] = c d 0
m n 1

Ma trn bin i ng nht


Php tnh tin
C a=d=1 v b=c=0
1 0 0
[T ] = 0 1 0
m n 1
1 0 0
[ x' y ' 1] = [ x y 1] 0 1 0 = [ x + m y + n 1]
m n 1
Ch : trong mt phng to , mi im k c gc to u c th bin i.

Php bin i tng hp ca hai php tnh tin theo khong [m1 n1] v [m2n2] bng
php bin i duy nht mt khong c gi tr bng tng ca hai php bin i
[m1+m2n1+n2].
Tht vy:
0 0 1
0
0
1 0 0 1

[T1]* [T 2] = 0 1 0 * 0 1 0 = 0
1
0
m1 n1 1 m2 n 2 1 m1 + m2 n1 + n 2 1

Php t l
Tng t ma` trn t l:

Sx 0 0
[Ts ] = 0 Sy 0
0 0 1

[ x'

y ' 1] = [ x

Sx 0 0
y 1] 0 Sy 0 = [ x.Sx
0 0 1

y.Sy 1]

Ch : Php bin i tng hp ca hai php t l Sx1, Sx2 v Sy1,Sy2 bng php
bin i duy nht c t l l tch hai php bin i trn Sx1*Sx2, Sy1*Sy2.
Ci t c/c++ cho php t l on thng to t (x1,y1) n (x2,y2):
x11=int(x1*1.1);

x22=int(x2*0.9);

y11=int(y1*1.1);

y22=int(y2*0.9);

Php quay
46

Chng 3: Cc php bin i ho

( x, y )

( x, y )

Hnh 3.6 Php quay


[ x'

cos sin 0
y ' 1] = [ x y 1] sin cos 0
0
0
1
= [( x cos y sin ) ( x sin + y cos ) 1]

Ch : Php bin i tng hp ca hai php quay 1 v 2 l

Ci t c/c++ cho php quay tam gic quanh gc to :


void quay(int &x,int &y,float
goc){
goc=goc*3.14/180;
int t=x;
x=x*cos(goc)-y*sin(goc);
y=t*sin(goc)+y*cos(goc); }

tamgiac(x1,y1,x2,y2,x3,y3,4);
quay(x1,y1,goc);
quay(x2,y2,goc);
quay(x3,y3,goc);
tamgiac(x1,y1,x2,y2,x3,y3,mau);

3.2.3. Ci t c/c++ cho php quay tam gic quanh 1 im (xq,yq):


#define RADS 0.017453293
void Quay(int x1,int y1, int x2, int y2, int x3, int y3,int xq, int yq,float
goc ){
float x11,y11,x22,y22,x33,y33;
float anpha = RADS *goc;
x11=int(x1*cos(anpha)-y1*sin(anpha)+(1-cos(anpha))*xq + sin(anpha)*yq);
y11=int(x1*sin(anpha)+y1*cos(anpha)-sin(anpha)*xq+(1 - cos(anpha))*yq);
x22=int(x2*cos(anpha)-y2*sin(anpha)+(1-cos(anpha))*xq + sin(anpha)*yq);
y22=int(x2*sin(anpha)+y2*cos(anpha)-sin(anpha)*xq+(1-cos(anpha))*yq);
x33=int(x3*cos(anpha)-y3*sin(anpha)+(1-cos(anpha))*xq + sin(anpha)*yq);
y33=int(x3*sin(anpha)+y3*cos(anpha)-sin(anpha)*xq+(1 - cos(anpha))*yq);
tamgiac(x11,y11,x22,y22,x33,y33,12);
}

47

Chng 3: Cc php bin i ho

3.3. CC PHP BIN I HNH HC BA CHIU


Cc php bin i chuyn v - translation, t l-scaling v quay-rotation s dng trong
khng gian 2D u c th m rng trong khng gian 3D.
3.3.1.Biu din im trong khng gian 3 chiu

[x* y* z* h] hay[x*/h y*/hz*/h 1]


Vit gn hn:[x y z 1]
Ma trn bin i tng qut trong khng gian 3D vi ta ng nht (4x4)
a b c p
d e f q

[T ] =
g i j r

l m n s

a b c
d e
f
Hay T =
g
i
h

dx dy dz

0
0
0

3.3.2. Php tnh tin


y l php bin i n gin nht, m rng t php bin i trong khng gian 2D ta c:

1 0 0
0 1 0
[T (dx, dy, dz )] =
0 0 1

dx dy dz

0
0
0

[X'] = [ X ] . [ T(dx,dy,dz) ]
[ x' y' z' 1 ] = [ x y z 1 ].[ T(dx,dy,dz) ]
= [ x+dx y+dy z+dz 1 ]
Hnh 3.7 Php tnh tin trn 3D
3.3.3. Php t l
Tng t trong 2D ta c php t l trong 3D l :

Sx 0 0 0
0 Sy 0 0

Ts =
0 0 Sz 0

0 0 0 1
Ta c Sx,Sy v Sz l cc h s t l trn cc trc to
[X] = [X] . [T(Sx,Sy,Sz) ]

[ x'

y ' z ' 1] = [ x

= [x.Sxy.Sy z.Sz 1]

Sx 0 0 0
0 Sy 0 0

z 1]
0 0 Sz 0

0 0 0 1

Hnh 3.8 Php t l trn 3D

48

Chng 3: Cc php bin i ho


3.3.4. Php bin dng

Ta c tt c cc phn t nm trn ng cho chnh bng 1


Cc phn t chiu v tnh tin bng 0
[X] = [X] . [Tsh]

[ x'

y ' z ' 1] = [ x

1 b
d 1
z 1]
g i

0 0

c
f
1
0

0
0
0

= [ x + yd + gz bx + y + iz cx + fy + z 1]

Hnh 3.9 Cc php bin dng trn 3D


3.3.5. Php ly i xng

i xng qua trc ox


1 0 0
0 1 0
Mox =
0 0 1

0 0 0

0
0
0

i xng qua mt xoy


1
0
Mxoy =
0

0
0
0 1 0

0 0 1

0
1

0
0

i xng qua gc O
1 0 0
0 1 0
Mo =
0 0 1

0 0 0

0
0
0

3.3.6. Php quay 3 chiu

3.3.6.1. Quay quanh cc trc to


n gin nht l php quay quanh cc trc to ox,oy v oz vi gc dng:

Hnh 3.10 Xc nh gc quay dng trn 3 trc to


Khi ny php quay li a v php quay khng gian 2D quanh gc to
Quay quanh trc oz:
49

Chng 3: Cc php bin i ho

x ' = x cos y sin


'
y = x sin + y cos

z' = z

cos
sin
[Tz ] =
0

sin
cos
0
0

0 0
0 0
1 0

0 1

Hnh 3.11 Quay quanh trc oz


Quay quanh trc ox:

x' = x
'
y = y cos z sin
z ' = y sin + z cos

0
1
0 cos
[Tx ] =
0 sin

0
0

0
sin
cos
0

0
0
0

Hnh 3.12 quay quanh trc ox


Quay quanh trc oy:

x ' = x cos + z sin

y' = y

z ' = x sin + z cos

cos
0
[Ty ] =
sin

0 sin
1
0
0 cos
0
0

0
0
0

Hnh 3.13 quay quanh trc oy

Ghi ch: php quay trong khng gian 3D s dng php nhn ma trn bin i khng
c kh nng hon v cc ma trn.
3.3.6.2. Quay quanh mt trc bt k song song vi cc trc ta
u tin chuyn dch i tng cho n khi to a phng ca i tng
trng vi trc to m trc a phng song song.
Quay i tng xung quanh trc ca n (chnh l trc to )
a i tng v to trc khi dch chuyn ta c ma trn tng hp l:
[T//] = [Ttt-].[T].[Ttt+]

50

Chng 3: Cc php bin i ho

V d: quay i tng xung quanh mt trc // vi trc z vi khong dch chuyn l


x,y v gc quay l .
Gii:

[T // z ] = [Ttt ][. T ][. Ttt + ]


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

=
.
.
0
0
1 0 0
0 1 0 0

0
0 1 x
x y 0 1 0
cos
sin
0

sin
cos
0
=

0
0
0

( x cos + y sin ) ( x sin y cos ) 0


cos

sin
=

x(1 cos ) + y sin

0 0 0
1 0 0
0 1 0

y 0 1
0 1 0
0 0 1
.
0 0 0

1 x y

0
0
1
0

0
0
0

sin
cos
0

0 0
0 0
1 0

y (1 cos ) x sin ) 0 1

3.3.6.3. Quay i tng quanh mt trc bt k


Xt bi ton sau, hy tm ma trn bin i a mt trc bt k c hng: V=ax
+ by + cz v trng vi trc oz theo chiu dng.
Ta thc hin cc bc nh sau:
Quay V quanh trc y mt gc (-) sao cho
nm trn mt phng (y, z) c V1
Quay V1 quanh trc x mt gc sao cho
trng vi trc z c V2

Hnh 3.14 Quay i tng quanh mt trc


bt k i qua tm

51

Chng 3: Cc php bin i ho

Bc 1:
y
b

c
z

x
V

Hnh 3.15 Quay V=ax+by+cz quanh trc oy

Ta tnh ?
Chiu V trn mt phng (x,z) c V. Ta c:
sin =
cos =

[T ]
y

a
a2 + c2
c
a + c2
2

0 sin( ) 0
2
a + c2

1
0
0
0
=
a
0
cos
0
2

a + c2
0
0
1
0

cos
0
=
sin( )

Vect: V1 (0, b, a 2 + c 2

0
1
0
0

a
a +c
0
c
2

a2 + c2
0

0
0

Bc 2:

b
V1

c
V2

sin =
cos =

a
x

Hnh 3.16 Quay vector V1 quanh trc ox

b
a + b2 + c2
2

a2 + c2
a2 + b2 + c2

52

Chng 3: Cc php bin i ho

0
1
0 cos
[Tx ] = 0 sin

0
0

0
1
2

0
a + c2
0

0
a 2 + b2 + c2
=
0
b
0
1
a2 + b2 + c2
0
0

0
sin
cos
0

0
b

a2 + b2 + c2
a2 + c2
a2 + b2 + c2
0

Vy [Tv] = [T-y]. [Tx]


Nu a ngc li ta c:

[T ] = ([T ].[T ]) = [T ].[T ]


1

1
v

Cho trc quay L (vect V = ax + by + cz) v mt im P nm trn trc L. Hy


tm ma trn bin i quay i tng xung quanh trc L mt gc .
Gii:
Ta thc hin nh sau:
1.
2.
3.
4.
Vy:

Tnh tin P v gc ta .
Chuyn trc L v trng vi trc OZ
Quay i tng xung quanh trc OZ mt gc .
Thc hin ngc li 2,1

[T ] = [T ][. T ].[T ].[T ].[T ]


,L

tt

,Z

1
v

tt +

3.3.7. Ci t bng c/c++ nh sau:


i 3D sang 2D
#define RADS 0.017453293
struct point{
int x,y,z;
}
point Diem3d(int &x, int &y, int &z) {
point p;
p.x = int(getmaxx()/2+ y - x*cos(RADS*45));
p.y = int(getmaxy()/2 - z + x*cos(RADS*45));
return p;
}

Quay quanh cc trc to


point quay(int x,int y,int z,float goc,int truc){
point p;
if (truc==1){
//Quay quanh OX
p.y=y*cos(RADS*goc)-z*sin(RADS*goc);
p.z=y*sin(RADS*goc)+z*cos(RADS*goc);
p.x=x;
}
if (truc==2){
//Quay quanh OY
p.x=x*cos(RADS*goc)+z*sin(RADS*goc);
p.z=-x*sin(RADS*goc)+z*cos(RADS*goc);
p.y=y;

53

Chng 3: Cc php bin i ho


}
if (truc==3){
p.x=x*cos(RADS*goc)-y*sin(RADS*goc);
p.y=x*sin(RADS*goc)+y*cos(RADS*goc);
p.z=z;
}
return p;
}

Tm tt:
Cc php bin i hnh hc cho php d dng thao tc trn cc i tng c to ra.
Chng lm thay i m t v to 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.
Cc php bin i hnh hc 2D u c biu din di dng ma trn ng nht 3x3
tin cho vic thc hin cc thao tc kt hp gia chng. Trong h to ng nht, to
ca mt im c m t bi mt vector dng bao gm ba gi tr, hai gi tr u tng
ng vi to 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.
Php bin i hnh hc 3D l s m rng ca php bin i 2D. Tng t n cng
c cc php: tnh tin, t l, bin dng v quay. Phc tp nht l php quay, nn chng ta
kho st ln lt t n gin n phc tp: quay i tng quanh cc trc to , quanh 1
trc song song vi trc to , quanh 1 trc bt k....Do kho st cc php bin i affine
vi biu din dng ma trn ng nht (4x4 vi 3D) nn cng vic kh n gin v nht
qun.
Lu 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.

Bi tp:
1.
a. Hy tm ma trn biu th php quay mt i tng mt gc 600 quanh gc
to .
b. Tm to mi ca P(-3,3) sau khi thc hin php quay trn?
2.
a. Hy vit dng tng qut ca ma trn iu chnh t l tng ng vi mt
im c nh Q(a,b)?
b. Phng ln t gic c cc nh A(0,0), B(1,3), C(4,2) v D(3,1) ln hai ln
kch thc ban u ca n trong khi vn gi im D(3,1)?
3.

54

Chng 3: Cc php bin i ho

a. M t php bin i nhm quay 1 i tng mt gc xung quanh mt


tm c nh Q(a,b)?
b. Thc hin php quay tam gic ABC c A(0,0), B(1,1) v C(4,2) mt gc
450 xung quanh im (-1, -1)?
4. Cho ABC c cc to nh l A(2,2), B(3,1) v C(4,3). Xc nh ma trn bin
i affine bin i tam gic ny thnh ABC bit nh A(4,3), B(4,5) v C(7,3).
5.
a. hy tm mt ma trn dnh cho php phn chiu i xng gng xung quanh
mt ng thng G vi dc m v tung gc (0,g)?
y

P
G

b. To phn x i xng gng a gic m nh ca n: A(-1,0), B(0,-2),


C(1,0) v D(0,2) xung quanh ng G trong cc trng hp sau:
i. x=2
ii. y=3
iii. y=2x+3
6. Cho hnh chp ABCD c cc to A(0,0,0), B(1,0,0), C(0,1,0) v D(0,0,1). Quay
hnh chp quanh ng L (v=x+y+z) i qua im C mt gc 450. Tm to hnh
chp mi.
7.
a. Hy tm php bin i dnh cho php i xng gng tng ng vi mt
mt phng cho (c vector php tuyn M, trn c mt im P).
y

Q
Q

M
x
z

b. p dng tm ma trn cho php i xng gng vi mt phng i qua gc


to v vector php tuyn c hng M=x+y+z.
8. Vit chng trnh vi i tng (ng thng, tam gic, t gic...) trong mt
phng 2D
a. Dch chuyn (dng cc phm dch chuyn)
55

Chng 3: Cc php bin i ho

b. Phng ln, thu nh (dng phm dch chuyn hay g vo t bn phm)


c. Quay vi gc quay c g vo t bn phm (gc g vo c tnh bng
)
9. Vit chng trnh vi i tng (hnh kim cng, hnh lp phng ...) trong 3D
a. Dch chuyn
b. Phng ln, thu nh
c. Quay mt gc

56

Chng 4: Cc gii thut ho c s

CHNG 4: CC GII THUT HO C S


4.1. M HNH CHUYN I GIA BA H THNG TO
4.1.1. M hnh chuyn i

H ta Descartes l d thch ng cho cc chng trnh ng dng miu t cc hnh


nh (picture) trn h ta th gii thc (World Coordinate System). Cc hnh nh c
nh ngha trn h ta th gii thc ny sau c h ha v ln cc h ta
thit b (Device Coordinate). in hnh, mt vng ha cho php ngi s dng xc
nh vng no ca hnh nh s c hin th v bn mun t n ni no trn h ta
thit b. Mt vng n l hoc vi vng ca hnh nh c th c chn. Nhng vng ny
c th c t nhng v tr tch bit, hoc mt vng c th c chn vo mt vng
ln hn. Qu trnh bin i ny lin quan n nhng thao tc nh tnh tin, bin i t l
vng c chn v xa b nhng phn bn ngoi vng c chn.

Hnh 4.1 WCS

World Coordinate System

Hnh 4.2 NDCS Normalized


Hnh 4.3 DCS
Device Coordinate System Device Coordinate System

Qui trnh chuyn i cc i tng trong WCS sang NDCS c gi l


php nh x ca s sang khung nhn hay php bin i chun ho (Window
to Viewport mapping or Normalization Transformation)
Qui trnh c th p cc to thit b hin th chun ho sang cc thit b ri
rc c gi l php bin i trm lm vic (Workstation Transformation)
4.1.2. Php nh x t ca s vo khung nhn

Hnh 4.4 i tng trong ca s

Hnh 4.5 i tng ti khung nhn

Mt ca s (window) c ch nh bi bn to thc (WCS): Xwmin,


Xwmax, Ywmin, Ywmax
57

Chng 4: Cc gii thut ho c s

Mt khung nhn (viewport) c m t bi bn to thit b chun ho


(NDCS): Xvmin, Xvmax, Yvmin, Yvmax
Mc ch ca php nh x ny l chuyn i cc to thc (Xw,Yw) ca mt im
tu sang thit b chun ho tng ng (Xv,Yv). gi li khong cch ca im trong
khung nhn bng vi khong cch ca im trong ca s, vi yu cu:

xv xv max
x x w min
= w
xv max xv min x w max x w min
yv yv max
y yw min
= w
yv max yv min yw max yw min
Ta c:

xv =

( xv max xv min )
( x w x w min ) + xv max
( x w max x w min )

yv =

( yv max yv min )
( yw yw min ) + yv max
( yw max y w min )

Ta c tm gi tr trn xc nh ca s v khung nhn u l hng s. Vy chng


ta hon ton tnh c (Xv,Yv) t (Xw, Yw) qua php bin i:
[XvYv1] = [XwYw 1]. [T]
[T] = [Ttt-]. [Ts] . [Ttt]
Ma trn tnh tin theo window:

1
[Ttt ] = 0
xw

0
1
yw

0
0
1

Ma trn chuyn i t l window vo viewport l:

xv max xv min
x
xw min
w max
[T s ] =
0

0
yv max yv min
y w max y w min
0

Ma trn tnh tin theo to viewport:

1
[Ttt ] = 0
xv

0
1
yv

0
0
1

Vy ma trn bin i t ca s vo khung nhn:

58

Chng 4: Cc gii thut ho c s

xv max xv min

x w max xw min

0
[T ] =

xv min xw min . xv max xv min


x w max xw min

yv min

yv max yv min
y w max y w min
yv min
y
y w min . v max
y w max y w min

4.2. CC GII THUT XN TI (CLIPPING)


4.2.1. Khi nim

Xn ta l tin trnh xc nh cc im ca mt i tng nm trong hay ngoi ca s hin


th. Nm trong c hin th, nm ngoi loi b.
Vic loi tng im nh ca i tng thng chm nht l khi i tng m phn
ln nm ngoi ca s hin th.
4.2.2. Clipping im
Gi s (x,y) l to ca mt im, vy im c hin th khi tho mn:
Xmin <= x <= Xmax
Ymin <= y <= Ymax

Cc on thng khng ct ca s th: hoc nm Nu on thng ct ca s th phn chia qua


trong hon ton, hoc nm ngoi hon ton
im ct phn nm trong v phn nm ngoi
4.2.3. Xn ta on thng

4.2.3.1. Thut ton Cohen-Sutherland


tng: Cc on thng c th ri vo cc trng hp sau
Hin th (visible): c hai u cui ca on thng u nm bn trong ca s
Khng hin th (not visible): on thng xc nh nm ngoi ca s. iu ny xy
ra khi on thng t (x1,y1) n (x2,y2) tho mn bt k mt trong bn bt ng
thc sau:
x1,x2 >xmaxy1,y2 > ymax
x1,x2 < xminy1,y2 < ymin
Xn ta: on thng cn xn ta
Vic ci t gii thut chia lm hai bc:
Bc 1 : Gn m vng 4-bit cho mi im cui ca on thng

59

Chng 4: Cc gii thut ho c s

Hnh 4.6 Mt phng m trong cc trng hp clipping on thng


M vng c xc nh theo 9 vng ca mt phng m cc im cui nm vo .
Mt bt c ci t true (1) hoc false (0).
Bt 1: im cui bn trn ca s = sign(y-ymax)
Bt 2: im cui bn di ca s = sign(ymin-y)
Bt 3: im cui bn phi ca s = sign(x-xmax)
Bt 4: im cui bn tri ca s = sign(xmin-x)
Qui c sign(a) = 1 nu a dng
= 0 nu a m
Bc 2 :Qu trnh kim tra v tr ca on thng so vi ca s. Tt c im u v im
cui ca on thng c m.
Gii thut nh sau :
Bc 1 :Nu m ca P1 hoc P2 u = 0000 th ton b on thng thuc phn hin th.
If (P1.M OR P2.M == 0000) then c on thng thuc ca s hin th
Bc 2 : Nu m ca P1 v P2 c cng mt v tr m P1 v P2 => cng pha
If (P1.M AND P2.M != 0000) then 2 im nm v 1 pha ca ca s
Bc 3: Xt giao im:

B(1000)

D(1010)

ymax
A(0001)
ymin
xmin

C(0100)

xmax

Hnh 4.7 M t thut ton Cohen Sutherland outcode

Tm giao im ca ng thng vi ca s, chnh xc hn l vi phn m rng ca


ng bin.
Ch : cc ng bin m im cui c chn s y ngang qua nhm thay i
m 1 thnh 0
Nu:
Bt 1 l 1: ct y=ymax
Bt 2 l 1: ct y= ymin
60

Chng 4: Cc gii thut ho c s

Bt 3 l 1: ct x=xmax
Bt 4 l 1: ct x=xmin
Nhn trn hnh ta c: gi im cui ca on (x1,y1)
Nu C c chn th ng y=ymin chn tnh phn ct nhau (bt 2 = 1)
Nu D c chn th y=ymax hoc x=xmax (bt 1 v bt 3 =1)
To ct:
xi = xmin / xmax
x = xmin

yi = y1 + m( xi x1 ) x = xmax
Hoc:

xi = x1 + ( yi y1 ) / m y = y min

y = y max
yi = y min / y max
C m l dc ca on thng
m=(y2-y1)/(x2-x1)
By gi thay im cui (x1,y1) vi im ct (xi,yi)

V d: Cho ca s ct ta hnh ch nht c gc tri di L(-3,1), gc phi trn R(2,6)


Hy tm m vng dnh cho cc im cui ca cc on AB c A(-2,3), B(1,2) ; CD
c C(-4,7), D(-2,10) ; IK c I(-4,2), K(-1,7)
Tm hng mc ct ta ca chng
Gii:
M vng
Bt 1 = sign(y-ymax) = sign(y-6)
Bt 2 = sign(ymin-y) = sign(1-y)
Bt 3 = sign(x-xmax) = sign(x-2)
Bt 4 = sign(xmin-x)= sign(-3-x)
Qui c sign(a) = 1 nu a dng
= 0 nu a m
Vy:
A(-2,3) c (0000)
B(1,2) c (0000)
C(-4,7)c (1001)
D(-2,10) c (1000)
I(-4,2) c (0001)
K(-1,7) c (1000)
Hng mc ct ta
AB c m vng u l (0000) nn n nm hon ton trong
CD c (1001) and (1000) = (1000) (!= (0000)) nn hon ton nm ngoi
IK c (0001) or (1000) =(1001) v (0001) and (1000) =(0000) nn phi xn ta.
Xt I(0001) da trn ng bin xmin =-3
xc = xmin

y c = y1 + m( xc x1 )
xmin = -3
61

Chng 4: Cc gii thut ho c s


m=(y2-y1)/x2-x1)= (7-2)/ (-1-(-4)) = 5/3
yc=2 + 5/3 (-3-(-4)) = 11/3
Thay I bi I1 (-3,11/3) (c m vng 0000)
Xt K(1000) ct ymax =6

xc = x1 + ( y c y1 ) / m

y c = y max

yc=6
xc=-1 +(6-7)/(5/3)=-8/5
Thay K bi K1(-8/5,6) c m vng 0000)
Vy sau khi xn ta on IK thu c I1K1
Ci t bng c/c++ l :
#define LEFT_EDGE
0x1
#define RIGHT_EDGE 0x2
#define TOP_EDGE
0x8
#define BOTTOM_EDGE 0x4
#define INSIDE(a) (!a)
#define REJECT(a,b) (a&b)
#define ACCEPT(a,b) (!(a|b))
unsigned char encode(double x, double y, double xmin, double ymin,
double xmax, double ymax){
unsigned char code = 0x00;
if (x < xmin)
code = code | LEFT_EDGE;
if (x > xmax)
code = code | RIGHT_EDGE;
if (y < ymin)
code = code | TOP_EDGE;
if (y > ymax)
code = code | BOTTOM_EDGE;
return code;
}

4.2.3.2. Gii thut Lyangbarsky


U1=0

P1(x1,y1)

P(u)

P2(x2,y2)
U2=1

O
Hnh 4.8 Phng trnh tham s cho on thng
Biu din on thng theo tham bin: on thng bt k i qua hai im P1(x1,y1) v
P2(x2,y2) chng ta c phng trnh tham bin :
x=x(u)

c 0<=u<=1
62

Chng 4: Cc gii thut ho c s


y=y(u)
V vect ch c mt chiu nn vect v tr:
P(u)=P1 + (P2-P1).u
x = x1 + (x2 - x1)u = x1 + x.u
y = y1 + (y2 - y1)u = y1 + y.u
top

P2

ymax
left

P1
Ul

U1=1
Ur

Ut
U0=0

right

ymin
Ub

bottom
xmin

xmax

Hnh 4.9 M t gii thut LyaBarsky


Khi ta chuyn ng dc theo ng m rng vi u thng t - ti + th ta phi:
o Chuyn t bn ngoi vo bn trong hai ng bin ca ca s ct ta ( di
v bn tri)
o Sau chng ta di chuyn t trong ra bn ngoi ca hai ng bin khc (t
trn v t bn phi)
Vi im (x,y) nm bn trong ca s ct ta:
xmin <= x1 + x.u <= xmax
ymin <= y1 + y.u <= ymax
Suy ra:
-x.u <= x1 xmin k=1
x.u <= xmax x1 k=2
-y.u <= y1 ymin k=3
y.u <= ymax y1 k=4
Vit tng qut:
Pk.u <=qk c k=1,2,3,4
Trong :
P1 = -xq1=x1 xmin (phi)
P2 = xq2=xmax x1 (tri)
P3 = -yq3=y1 ymin (trn)
P4 = yq4=ymax y1 (di)

Xt:
Nu Pk = 0: iu tng ng vi vic on thng ang xt song song vi cnh
th k ca hnh ch nht clipping.
63

Chng 4: Cc gii thut ho c s

a) Nu qk < 0 on thng nm ngoi ca s (h bt phng trnh trn v nghim)


b)Nu qk >= 0 th on thng nm trong hoc nm trn cnh ca ca s clipping.
Yu cu kho st tip.
Nu Pk # 0: on thng ang xt s ct cnh k tng ng ca ca s clipping ti v
tr trn on thng uk = qk/Pk
a) Pk < 0 on thng c dng i t ngoi vo trong ca ng bin tng ng
b) Pk > 0 th on thng m rng tin hnh t trong ra ngoi ca ng bin tng
ng.
Kt hp li ta c cc bc sau:
(Vi u0 <= u<= u1)
Bc 1:Nu Pk=0
qk <0 ng vi bt k gi tr no ca k. Loi b on thng => Exit
qk>=0 thc hin bc tip theo
Bc 2: Tnh:

q
U 0 = max {0} u k : u k = k , Pk < 0
Pk

q
U1 = min {1} u k : u k = k , Pk > 0
Pk

u0 l cc gi tr cc i ca tp hp ang cha 0 v cc gi tr uk c tnh

u1 l cc gi tr cc tiu ca tp hp ang cha 1 v cc gi tr uk c tnh


V d: cho ca s ct ta hnh ch nht c gc tri di L(1,2) v gc phi trn
R(9,8). C cc on AB to A(11,10) v B(11,6), on CD to C(3,2) v D(8,4),
on IJ to I(-1,7) v J(11,1). Tm cc hng mc ct ta.
Gii:
Xt AB
P1 = 0q1=10
P2 = 0q2=-2
P3 = -4q3=4
P4 = 4q4=2
C P2 =0 m q2 =-2<0 nn AB nm hon ton ngoi
Xt CB
P1 = -5q1=2

u1=-2/5 (uk=qk/pk)

P2 = 5 q2=6

u2=6/5

P3 = -2q3=0

u3=0

P4 = 2 q4=6

u4=3

Vy U0=max(0,-2/5,0)=0 (vi Pk<0)


U1=min(1,6/5,3)=1(vi Pk>0)
64

Chng 4: Cc gii thut ho c s


Vy CD nm hon ton trong ca s
Xt IJ
P1 = -12q1=-2 u1=1/6
P2 = 12 q2=10 u2=5/6
P3 = 6q3=5

u3=5/6

P4 = -6 q4=1

u4=-1/6

Vy

u0=max(0,1/6,-1/6)=1/6 (vi Pk<0)


u1=min(1,5/6,5/6)=5/6(vi Pk>0)

V u0<u1 nn hai im cui ca ng ct ta l:


Xc1=x1 + x.u0 = -1 +(11-(-1)).1/6 =1
Yc1=y1 + y.u0= 7 +(1-7).1/6 =6
Xc2=x1 + x.u1 = -1 +(11-(-1)).5/6 =9
Yc2=y1 + y.u1= 7 +(1-7).5/6 =2
Vy ng sau khi ct ta l: I1I2 c I1(1,6) v I2(9,2)
Ci t bng c/c++ l :
#define TRUE 1
#define FALSE 0
int cliptest(double p, double q, double *u0, double *u1) {
double r;
int retVal = TRUE;
if (p < 0.0) {
r = q / p;
if (r > *u1)
retVal = FALSE;
else
if (r > *u0)
*u0 = r; }
else
if ( p > 0.0) {
r = q / p;
if (r < *u0)
retVal = FALSE;
else
if (r < *u1)
*u1 = r;
}
Else {
if (q < 0.0)
retVal = FALSE;
}
return (retVal);
}
void clipline(double x1, double y1, double x2, double y2,
double xmin, double ymin, double xmax, double ymax){
double u0 = 0.0, u1 = 1.0, dx, dy;
double oldx1, oldy1, oldx2, oldy2;
oldx1 = x1; oldy1 = y1;
oldx2 = x2; oldy2 = y2;

65

Chng 4: Cc gii thut ho c s


dx = x2 - x1;
if (cliptest(-dx, x1 - xmin, &u0, &u1))
if (cliptest(dx, xmax-x1, &u0, &u1)) {
dy = y2 - y1;
if (cliptest(-dy, y1 - ymin, &u0, &u1))
if (cliptest(dy, ymax - y1, &u0, &u1)){
if (u1 < 1.0){
x2 = x1 + u1 * dx;
y2 = y1 + u1 * dy;
}
if (u0 > 0.0){
x1 += u0 * dx;
y1 += u0 * dy; }
setcolor(RED);
line(oldx1, oldy1, x1, y1);
line(x2, y2, oldx2, oldy2);
setcolor(YELLOW);
line(x1, y1, x2, y2);
}}}

4.2.4. Gii thut xn ta a gic (Sutherland Hodgman)

4.2.4.1. Khi nim


Theo qui c: mt a gic vi cc nh P1, .....,PN (cc cnh l Pi-1Pi v PNP1) c gi l theo
hng dng nu cc hnh theo th t cho to thnh mt mch ngc chiu kim ng h.
Nu bn tay tri ca mt ngi dc theo bt k cnh Pi-1Pi hoc PNP1 cng ch v bn
trong a gic.

L
R
Hnh 4.10 Qui tc tm hng dng ca mt a gic hng
Kho st mt im so vi mt ng thng:
ABxAP
K
P(x,y)

A(x1,y1)

B(x2,y2)

Hnh 4.11 Kho st mt im so vi ng thng

C im A(x1,y1), B(x2,y2) v P(x,y)


Theo nh ngha th tch ca hai vect (ABxAP) ch theo hng ca vect K vi
mt phng (xoy). C:
AB=(x2-x1)i + (y2-y1)j
AP=(x-x1)i + (y-y1)j
66

Chng 4: Cc gii thut ho c s

Vy ABxAP=[ (x2-x1).(y-y1) (y2-y1).(x-x1) ].K


Do hng c xc nh nh sau:
C = ( x2 x1 )( y y1 ) ( y 2 y1 )( x x1 )

Nu C dng th P nm bn tri AB
Nu C m th P nm bn phi AB
4.2.4.2. Gii thut Hodgman
Cho P1,......,PN l danh sch cc nh ca a gic b ct ta. Cho cnh AB (im A,B) l
cnh bt k. a gic ct ta li hng dng.
output
Pi

Pi-1

A
A

Pi-1

output

Pi

Pi-1

Pi
I

I
Pi

Pi-1

output
output

Hnh 4.12 Cc trng hp trong gii thut Hodgman


Nu c Pi-1 v Pi u nm bn tri ca cnh ny th Pi c lu li (a vo output)
ca a gic ct ta.
Nu c Pi-1 v Pi u nm bn phi ca cnh th khng c nh no c lu li.
Nu Pi-1 nm bn tri v Pi nm bn phi ca cnh th giao im I ca Pi-1Pi vi
cnh s c lu li.
Nu Pi-1 nm bn phi v Pi nm bn tri th c giao im I v Pi u c lu li.
4.2.4.3. Minh ho thut ton Sutherland Hodgman
F=P1 (F l nh c a vo u tin, S l nh a vo trc P - nh c a). S
bn phi khp kn a gic bi PNP1

67

Chng 4: Cc gii thut ho c s


Begin
P(Vertex Input)
Vertex Output, F,AB,N

Tip

I=1
S=Pi

SF ct AB

i=1

i++

F=P1

Tm giao I

SPi ct
AB

Vertex output I

Giao ct I
Vertex output
I

End

S=Pi
Y

Y
Vertex output
S

S bn tri
AB

i<N
N
End

Hnh 4.13 S khi thut ton Hodgman

4.2.4.4. V d minh ho:


A

C2

E5

E1

D
D B

D C

E2 B

C4

C1

C B

D
D

A
B

B
B B

A
D

C5

C3 C

D
E4
E3 C

Hnh 4.14 V d dng gii thut Hodgman xn ta a gic A1...A5


68

Chng 4: Cc gii thut ho c s


V d 2: hy s dng thut ton Hodgman ct xn on thng ni P1(-1,2) n P2(6,4)
trn ca s A(1,1), B(5,1), C(5,3) v D(1,3)
D(1,3)

I2

I1

P2(6,4)
C(5,3)

I3
P1(-1,2)
A(1,1)

B(5,1)

Hnh 4.15 V d dng thut ton Hodgman xn ta on P1P2


Theo thut ton Hodgman ta xn P1P2 da trn tng cnh.
AB: ta xt C=(x2-x1)(y-y1) (y2-y1)(x-x1)
im P1: C=(5-1)(2-1)-(1-1)(-1-1) = 4 >0 nm bn tri
im P2: C= (5-1)(4-1)-(1-1)(-1-1) = 12 >0 nm bn tri
Vy P1P2 u c lu
BC
im P1:C = (5-5)(2-1)-(3-1)(-1-5)= 12 >0 nm bn tri
im P2:C = - (3-1)(6-5) = -2 <0 nm bn phi

Giao im I1:

m=

42
2
=
6 (1) 2

xc = 5

y = y + ( x x )m = 2 + (5 (1)). 2 = 3 5
1
c
1
c
7
7
I1(5,26/7) vyP1I1 lu li
CD
im P1: C = (1-5)(2-3) = 4 >0 nm bn tri
im I1:C=(1-5)(26/7 -3) = -20/7 <0 nm bn phi
Giao im I2:

yc = 3

xc = x1 + ( yc y1 ) / m

= 1 + (3 2). 7 = 5

2 2
VyI2(5/2,3)c P1I2c lu
DA
im P1: C = -(1-3)(-1-1) = -4nm bn phi
im I2: C = -(1-3)(5/2-1) = 7/2nm bn tri
Giao im I3:

69

Chng 4: Cc gii thut ho c s

xc = 1

y c = y1 + ( xc x1 )m

= 2 + (1 (1)). 2 = 2 4

7
7

I3(1, 18/7)

Tm li: Ct xn on P1P2 c on I2I3c I2(5/2,3) v I3(1,18/7)

Tm tt chng:
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 . 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 gc nhn (view) ca i tng.
Qu trnh loi b cc phn hnh nh nm ngoi mt vng cho trc c gi l xn
ta. Vng c dng xn ta gi l ca s xn ta.
Cc thut ton xn ta on thng Cohen-Sutherland, LyaBarsky 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 on thng c kh nng ct ca s, cn phi tm cch hn ch s ln 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 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 LyaBarsky 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 rk = qk/pk. C hai thut ton ny u c th
c m rng cho vic xn hnh trong ho 3D.

Bi tp:
1.

Tm php bin i chun ho to nh x cho mt ca s m gc bn tri pha di


ca n (1,1) v gc bn phi trn (3,5) vo:
a. L mn hnh thit b c chun ho ton b.
b. Mt khung nhn c gc bn tri di (0,0) v gc bn tri trn (1/2,1/2)

2.

Cho ca s ct ta hnh ch nht c gc bn tri di (-3,-2) v gc phi trn


(2,3), dng gii thut Cohen Sutherland xn ta on thng AB c to l A(3,2)
v B(-2,-4).

3.

Cho ca s ct ta hnh ch nht c gc bn tri di (-3,-2) v gc phi trn


(2,3), dng gii thut LyaBarsky xn ta on thng AB c to l A(3,2) v B(2,-4).

4.

Vit chng trnh ci t thut ton Cohen Sutherland.

5.

Vit chng trnh ci t thut ton LyaBarsky


Vit chng trnh ci t thut ton Sutherland Hodgman

70

Chng 5: Php chiu

CHNG 5: PHP CHIU PROJECTION


5.1. KHI NIM CHUNG
5.1.1.Nguyn l v 3D (three-Dimension)

ha 3 chiu (3D computer graphics) bao gm vic b xung kch thc v chiu su
ca i tng, cho php ta biu din chng trong th gii thc mt cch chnh xc v sinh
ng hn.
Tuy nhin cc thit b truy xut hin ti u l 2 chiu, Do vy vic biu din c
thc thi thng qua php t cht (render) gy o gic (illusion) v su
ho 3D l vic chyn th gii t nhin di dng cc m hnh biu din trn cc
thit b hin th thng qua k thut t cht (rendering).
5.1.2. c im ca k thut ho 3D

C cc i tng phc tp hn cc i tng trong khng gian 2D


Bao bi cc mt phng hay cc b mt
C cc thnh phn trong v ngoi
Cc php bin i hnh hc phc tp
Cc php bin i h to phc tp hn
Thng xuyn phi b xung thm php chiu t khng gian 3D vo khng gian 2D
Lun phi xc nh cc b mt hin th
5.1.3.Cc phng php hin th 3D

Vi cc thit b hin th 2D th chng ta c cc phng php sau biu din i tng


3D:
K thut chiu (projection): Trc giao (orthographic)/phi cnh (perspective)
K thut nh du su (depth cueing)
Nt khut (visible line/surface identification)
T cht b mt (surface rendering)
Ct lt (exploded/cutaway scenes, cross-sections)
Cc thit b hin th 3D:
Knh stereo - Stereoscopic displays*
Mn hnh 3D Holograms

71

Chng 5: Php chiu


Perspective
(phi Shadows as depth cues (to bng cm
cnh) and Depth of gic c chiu su)
Field (chiu su)

Exploded/cutaway
scenes (ct lt)

Hnh 5.1 Cc cch m t i tng 3D

Hnh chiu cnh

Hnh chiu bng

Hnh chiu ng

Hnh 5.2 Cc gc nhn khc nhau ca m hnh 3D

x2 + y2 + z2 = r2

M hnh 3D
(3D Modelling)

a gic
(Polygonal)

Tham s
(Parametric)

x = sin 4
y = cos 2

Nt khut (Implicit)

Mnh nh
(Particles)

Hnh 5.3 Cc cch m t i tng 3D

5.2.PHP CHIU
nh ngha v php chiu
Mt cch tng qut, php chiu l php chuyn i nhng im ca i tng trong
h thng ta n chiu thnh nhng im trong h thng ta c s chiu nh hn n.

72

Chng 5: Php chiu

nh ngha v hnh chiu


nh ca i tng trn mt phng chiu c hnh thnh t php chiu bi cc
ng thng gi l tia chiu (projector) xut pht t mt im gi l tm chiu (center of
projection) i qua cc im ca i tng giao vi mt chiu (projection plan).
Cc bc xy dng hnh chiu
1. i tng trong khng gian 3D vi ta thc c ct theo mt khng gian xc
nh gi l view volume.
2. View volume c chiu ln mt phng chiu. Din tch chon bi view volume
trn mt phng chiu s cho chng ta khung nhn.
3. L vic nh x khung nhn vo trong mt cng nhn bt k cho trc trn mn
hnh hin th hnh nh.

ta thc
3D

ta theo vng
ct

Ct theo view
volum

ta thit
b

khung nhn

Php bin i vo
cng nhn ca
ta thit b

Php chiu trn


mt phng chiu

Hnh 5.4 M hnh nguyn l ca tin trnh biu din i tng 3D


Php chiu hnh hc
phng

Php chiu song


song

Php chiu phi cnh

Php chiu
Xin

Trc giao

Mt im

Axonometric
Chiu
bng

Hai im

Cavalier
Trimetric
Chiu
ng

Cabinet

Chiu
cnh

Ba im

Dimetric
Isometric

Php chiu
khc

Hnh 5.5 Phn loi cc php chiu

73

Chng 5: Php chiu

Hnh 5.6 V d minh ho cc php chiu phi cnh

5.3. PHP CHIU SONG SONG (Parallel Projections )


Php chiu song song (Parallel Projections) l php chiu m cc tia chiu song song
vi nhau hay xut pht t im v cng.
Phn loi php chiu song song da trn hng ca tia chiu (Direction Of
Projection) v mt phng chiu (projection plane).
5.3.1.Php chiu trc giao (Orthographic projection)

L php chiu song song v tia chiu vung gc vi mt phng chiu. V mt ton hc,
php chiu trc giao l php chiu vi mt trong cc mt phng to c gi tr bng 0.
Thng dng mt phng z=0, ngoi ra x=0 v y=0.
ng vi mi mt phng chiu ta c mt ma trn chiu tng ng.
1
0
[Ty ] =
0

0 0 0
0 0 0
0 1 0

0 0 1

0
0
[T x ] =
0

0 0 0
1
0
1 0 0
[Tz ] =
0 1 0
0

0 0 1
0

0
1
0
0

0
0
0
0

0
0
0

Hnh 5.7 Php chiu trc giao


Thng thng th ngi ta khng s dng c 6 mt phng suy din ngc hnh
ca mt i tng m ch s dng mt trong s chng nh: hnh chiu bng, ng, cnh.
C su gc nhn u c th thu c t mt mt phng chiu thng qua cc php
bin i hnh hc nh quay, dch chuyn hay ly i xng.
V d: gi s chng ta c hnh chiu bng trn mt phng z=0, vi php quay i
tng quanh trc mt gc 900 s cho ta hnh chiu cnh.
74

Chng 5: Php chiu

i vi cc i tng m cc mt ca chng khng song song vi mt trong cc mt


phng h to th php chiu ny khng cho hnh dng tht ca vt th. Mun nhn vt
th chnh xc hn ngi ta phi hnh thnh php chiu thng qua vic quay v dch
chuyn i tng sao cho mt phng song song vi cc trc to .
Hnh ca i tng qu phc tp cn thit phi bit cc phn bn trong ca i
tng i lc chng ta phi to mt ct i tng.
5.3.2. Php chiu trc lung (Axonometric)

Php chiu trc lng l php chiu m hnh chiu thu c sau khi quay i tng sao
cho ba mt ca i tng c trng thy r nht (thng mt phng chiu l z=0).
C 3 php chiu
Php chiu Trimetric
Php chiu Dimetric
Php chiu Isometric
5.3.2.1.Php chiu Trimetric
L php chiu hnh thnh t vic quay t do i tng trn mt trc hay tt c cc trc
ca h ta v chiu i tng bng php chiu song song ln mt phng chiu
(thng l mt phng z = 0).
Ngoi tr nhng mt phng ca i tng song song vi mt phng chiu khng
thay i. Cc mt khc ca i tng hay hnh dng ca i tng thng bin dng sau
php chiu.Tuy nhin t l co (Shortening Factor - SF) l t s ca di on thng
chiu so vi di thc t ca i tng. Trn c s SF php chiu trc lng c chia
lm ba loi sau:
Php chiu Trimetric
Php chiu Dimetric
Php chiu Isometric
Vic tnh cc gi tr SF ny ca cc trc tng ng da vo cng thc [U]* [T].
1 0 0 1
[U ] = 0 1 0 1
0 0 1 1

x x'
'
x
[T ] = y'
xz

y x'
y

'
y
'
z

y
0

0 1

0 1
0 1

0 1

[ U ]: l ma trn vector n v ca cc trc x, y, z bt bin


[ T ]: l ma trn chiu tng hp tng ng
SF- t l co theo cc trc l:

f x = x x'2 + y x'2

f y = x'2y + y '2y

f z = x'2z + y '2z

5.3.2.2.Php chiu Dimetric


L php chiu Trimetric vi 2 h s t l co bng nhau, gi tr th 3 cn li l tu .

75

Chng 5: Php chiu

Php chiu c xy dng bng cch quay i tng quanh trc y theo mt gc ,
tip quanh quanh trc ox mt gc v sau cng l php chiu trn mt phng z=0 vi
tm chiu ti v tn.

Hnh 5.8 nh ca php chiu Trimetric vi cc tham s gc xoay thay i


[T ] = [ Ry ][ Rx][ Pz ]
cos
0
=
sin

0 sin
1
0
0 cos
0

cos
0
[T ] =
sin

0
0 1

0 0 cos
.
0 0 sin

0
1 0

sin sin
cos
cos sin
0

0 0 x x'

0 0 x 'y
= '
0 0 x z

0 1 0

f x2 = ( x x'2 + y x'2 ) = cos 2 + sin 2 . sin 2

0
sin
cos
0
y x'
y 'y
y z'
0

0 1
0 0
.
0 0

1 0

0
0
0
0

0 0 0
1 0 0
0 0 0

0 0 1

0
0

f y2 = ( x 'y2 + y 'y2 ) = cos 2

T l co trn x v y bng nhau nn ta c:


cos2 = cos2 + sin2.sin2
1- sin2 = 1-sin2 + sin2.sin2
sin2(sin2-1) = - sin2
f z2 = ( x z'2 + y z'2 ) = sin 2 + cos 2 sin 2
= sin 2 + sin 2 (1 sin 2 ) = sin 2 + sin 2 (1 sin 2 )

76

Chng 5: Php chiu

sin 2 =

f z2 sin 2
sin 2
=
1 sin 2
1 sin 2

sin2 = sin 1 (
sin =
1 sin2

sin 2 =

fz
2

= sin 1 (

fz
2 f z2

fz
)
2

Ta thy t l co thuc khong [0 1], vi mi fz ta c bn kh nng ca php chiu.

fz = 0

fz =1/2

fz = 1

fz = 0

fz =1/2

fz = 1

Hnh 5.9 Php chiu hnh hp vi f=0, f=1/2 v f=1

= sin 1 (
Khi fz =1/2 th:

) sin 1 (0.35355) 20.705 0

2 2
1/ 2
= sin 1 (
) = sin 1 (0.378) 22.208
7/4

5.3.2.3.Php chiu Isometric


L php chiu trc lng m h s co cnh trn 3 trc l bng nhau.
Gc quay tng ng l 35.260 v 450
c ng dng nhiu trong vic xy dng cc gc quan st chun cho i tng
trong cc h son tho ho.
sin 2 =

1 2 sin 2
1 sin 2

sin 2 =

sin 2
1 sin 2

1
3
= 35.26 0
sin =

sin 2
1/ 3
=
= 1/ 2
2
1 sin 1 1 / 3
1
sin =
2
0
= 45
sin 2 =

= 35.260
= 450

f = cos 2 = 2 / 3 = 0.8165

V d cc php chiu song song:


77

Chng 5: Php chiu

Hnh 5.10 V d cc php chiu song song


5.3.3. Php chiu xin - Oblique

Php chiu Cavalier


Php chiu Cabinet

Hnh 5.11 Php chiu vi tm chiu trn trc oz

5.3.3.1.Php chiu Cavalier


Php chiu cavalier l php chiu xin c to thnh khi cc tia chiu lm thnh vi mt
phng chiu mt gc 450
H s co trn cc h trc to bng nhau.
Ta c vect n v theo trc z l P=[0 0 1] tia chiu lm vi mt phng mt gc v
p c chiu ln mt phng chiu.
Ta c P1O v PP2 l 2 tia chiu ca php chiu xin vi gc vi mt phng chiu.
P2 l nh ca P
P1 l im dch chuyn ca P to ra tia chiu song song PP2
Tia chiu P1O c th thu c t php bin i P n im [-a-b]
Trong khng gian hai chiu dch chuyn s l:
78

Chng 5: Php chiu

0 0
1

T '= 0
1 0
a b 1

Trong khng gian ba chiu, f l chiu di ca hnh chiu vect n v trc z trn mt
phng chiu, chnh l h s co.
0
1
0
1
[T ' ' ] =
a b

0
0

a = f cos
b = f sin

0 0
0 0
0 0

0 1

0
[T ] =
f cos

0
1
f sin
0

f = 0, b = 900 php chiu s tr thnh php chiu trc giao.

0 0
0 0
0 0

0 1

Cn vi f = 1 kch thc ca hnh chiu bng kch thc ca i tng => cavalier
Php chiu Cavalier cho php gi tr ca a bin i mt cch t do a = 300 v 450

5.3.3.2.Php chiu Cabinet


Php chiu xin vi h s co t l f = 1/2 .
Vi php chiu cabinet, gi tr ca c th thay i tu . Thng thng th cc gi
tr hay c s dng l 300 v 450 .
Theo php chiu xin mt s mt ca i tng c th c hin th nh hnh dng
tht cho nn rt ph hp vi vic m t cc i tng c hnh dng trn hay cc b mt
f

= cos 1 (
= cos 1 (

1 + f2
2

2
) = 63.4350
2
1 + (1 2 )
2

cong.
V d v php chiu xin (Oblique Projections)

D/2

D
D

Hnh 5.12 V d cc php chiu xin hnh hp

5.4. PHP CHIU PHI CNH (Perspective Projection)


Php chiu phi cnh l php chiu m cc tia chiu khng song song vi nhau m xut
pht t mt im gi l tm chiu. Php chiu phi cnh to ra hiu ng v lut xa gn to
cm gic v su ca i tng trong th gii tht m php chiu song song khng lt t
c.
Cc on thng song song ca m hnh 3D sau php chiu hi t ti mt im gi l
im trit tiu (vanishing point).
79

Chng 5: Php chiu

Phn loi php chiu phi cnh da vo tm chiu - Centre Of Projection (COP) v
mt phng chiu projection plane

Mt tm chiu
1 point Perspective

Hai tm chiu

Ba tm chiu

2 point Perspective

3 point Perspective

Hnh 5.13 Php bin i phi cnh

Hnh 5.14 Php chiu vi tm chiu trn trc z


Php chiu phi cnh ca cc im trn i tng ln trn mt phng 2D thu c
t php chiu trc giao v php bin i phi cnh.
5.4.1. Php chiu phi cnh mt tm chiu

Gi s khi mt phng c t ti z = 0 v tm php chiu nm trn trc z , cch trc z


mt khong zc = -1/r.
Nu i tng cng nm trn mt phng z = 0 th i tng s cho hnh nh tht.
Phng trnh bin i:
[ x y z 1 ][ Tr ] = [ x y z rz+1 ]
ma trn bin i mt im phi cnh [ Tr ] c dng:
80

Chng 5: Php chiu


y

D
H
G
E
x

A E

F B

A
z

5.15 Php chiu phi cnh mt tm chiu


1
0
=
0

0 0 0
1 0 0

0 1 r

0 0 1

1
0

0 0 0 1
1 0 0 0
=
0 0 0 0

0 0 1 0

0 0 0
1 0 0

0 0 r

0 0 1

[x

1
0
z 1]
0

0
1
0
0

0
0
0
0

0
0
= [x
r

y 0 rz + 1]

y
x

y ' z ' 1] =
0 1
rz
rz
+
1
+
1

5.4.2. Php chiu phi cnh hai tm chiu

[x'

VP (y=10)

VP y = 10
D
C,G

D, HC, G

VP( x = 10)

VP
X=10

A, EB, F
5.16 Php chiu phi cnh hai tm chiu

[ Tc ] = [ Tpq ][ Tz ]
1
0
=
0

0
1
0
0

0
0
1
0

p
q
0

1
0

0
1
0
0

0
0
0
0

0 1
0 0
=
0 0

1 0

0
1
0
0

0 p
0 q
0 0

0 1

81

Chng 5: Php chiu


Hai tm chiu: [ -1/p 0 0 1 ] v [ 0 -1/q 0 1 ]
im trit tiu (VP -Vanishing point) tng ng trn 2 trc x v y l im: [ 1/p 0 0 1 ] v
[ 0 1/q 0 1 ].

[x

1
0
z 1]
0

0 0
1 0
0 0
0 0

y 0 ( px + qy + 1)]

x
y ' z ' 1] =
( px + qy + 1)

[x'
1
0
=
0

0 p
0 0
1 0

0 1

0
1
0
0

1
0

0
1
0
0

1
0
.[Tz ] =
0

[Tc ] = [T pqr ]

[x

[x'

p
q
= [x
0

1
0
z 1]
0

0
0
1
0

0
q
0

1
0

0 1

y
( px + qy + 1)

0
1
0
0

0 0 p 1
1 0 q 0
.
0 1 r 0

0 0 1 0

0
0
1
0

0 p
0 q
1 r

0 1

0
1
0
0

0 0 0 1
1 0 0 0
=
0 0 0 0

0 0 1 0

0 0 p
1 0 q
= [x
0 0 r

0 0 1

x
y ' z ' 1] =
( px + qy + rz + 1)

0 1
0 0
=
r 0

1 0

0 0 p
1 0 q
0 0 r

0 0 1

y 0 ( px + qy + rz + 1)]

y
( px + qy + rz + 1)

0 1

y'
y'

VP ( y = 10)

H'
D'

D'

H'

G'

C'
E'

G'

C'

VP ( x = 10 )
VP ( z = 10 )

F'

A'

x'

x'

z'
A', E'

F'

B'

B'

Hnh 5.17 Php chiu phi cnh ba tm chiu

82

Chng 5: Php chiu


5.4.3. Php chiu phi cnh ba tm chiu
[ Tpqr ] = [Tp ][Tq ][Tr ]
Ba tm chiu:trn trc x ti im [ -1/p 0 0 1 ],
y ti im [ 0 -1/q 0 1 ] v z ti im [ 0 0 -1/r 1 ]
im trit tiu -VP s tng ng vi cc gi tr:
[ 1/p 0 0 1 ], [ 0 1/q 0 1 ] [ 0 0 1/r 1 ]
Ci t bng c/c++: Chiu trn cc mt phng:
point hinhchieu(int x,int y,int z,int mfchieu) {
point p;
if (mfchieu==1){
//XOY
p.x=int(getmaxx()/2+y-x*cos(RADS*45));
p.y=int(getmaxy()/2+x*cos(RADS*45));
p.z=z;
}
if (mfchieu==2) {
//XOZ
p.x=int(getmaxx()/2+y-x*cos(RADS*45));
p.y=int(getmaxy()/2-z+x*cos(RADS*45));
p.z=z;
}
if (mfchieu==3){
//YOZ
p.x=int(getmaxx()/2+y-x*cos(RADS*45)+x*sin(RADS*45));
p.y=int(getmaxy()/2-z);
p.z=z;
}
return p; }

Tm tt chng:
Chng ta xt hai php chiu song song v phi cnh, trong php chiu song song th phn
ra cc loi: trc giao, trc lng v php chiu xin. Php chiu trc giao ch n gin l
b i mt trong ba to ca im chiu bng cch cho cc tia chiu song song vi mt
trong cc trc to . Php chiu trc lng th quay i tng khi thy c r nht i
tng ri mi cho cc tia chiu song vi cc trc to . Php chiu xin th tia chiu
khng song song vi trc to m thay bng n lm vi cc mt phng chiu mt gc
khng vung.
Php chiu phi cnh th s dng mt im c nh gi l tm chiu v hnh chiu
ca cc im c xc nh bng giao im ca tia chiu (ni im chiu v tm chiu)
vi mt phng quan st. Php chiu phi cnh hi t ti mt nn i tng cng xa trng
cng nh v ngc li.

Bi tp:
1. Cho Hnh vung ABCD c cc to l: A(0,0,0), B(0,2,0), C(2,2,2) v D(2,0,2). Tnh
to mi ca hnh vung sau khi chiu n bi php chiu Isometric?
2. Cho Hnh vung ABCD c cc to l: A(0,0,0), B(0,2,0), C(2,2,2) v D(2,0,2). Tnh
to mi ca hnh vung sau khi chiu n bi php chiu Dimetric vi fz=1/2 (t l co theo trc
z)?
83

Chng 5: Php chiu


3. Cho tam gic ABC c cc to l A(2,3,1), B(0,4,6) v C(5,2,7), Hy tnh to mi ca
hnh tam gic sau khi chiu phi cnh sau:
-

Mt tm chiu ti P(0,0,10)

Hai tm chiu ti M(5,0,0) v N(0,-8,0)

Ba tm chiu ti M(4,0,0), N(0,-6,0) v P(0,0,12)

4. Vit chng trnh chiu hnh kim cng (ABCD) vi php chiu trc giao.
5. Vit chng trnh chiu hnh lp phng vi php chiu
Trimetric
Dimetric
Isometric
6. Vit chng trnh chiu hnh kim cng (ABCD) vi php chiu xin
Cavalier
Cabinet
7. Vit chng trnh chiu hnh lp phng vi php chiu phi cnh.

84

Chng 6: Mu sc trong ho

CHNG 6: MU SC TRONG HO
6.1. NH SNG V MU SC (light and color)
6.1.1. Quan nim v nh sng

nh sng em n s sng cho con ngi


nh sng em n mu sc cho con ngi
Mu sc l cm gic m n xy ra khi c nng lng ca nh sng, xut hin trn
vng mc v nhn bit c nh no.
Hnh phc ca con ngi l cm nhn c mu sc
Nguyn tc ca nh sng da trn hai gc

o Vt l - physics
o Sinh l - physiology
6.1.2. Yu t vt l

nh sng ph thuc vo mc nng lng c truyn hay bc sng ca nh sng. nh


sng trng hay di sng m mt ngi c th cm nhn c, sau khi phn tch qua lng
knh thnh cc ph mu: tm, chm, lam, lc, vng, da cam, .nh sng l sng in
t c bc sng i t 400nm 700nm.

Hnh 6.1 Tn s, mu sc v bc sng ca nh sng nhn thy


Tng nng lng c trng cho tng loi bc sng c biu din bng hm phn
b nng lng ph P().

Hnh 6.2 th phn b ba mu


85

Chng 6: Mu sc trong ho

Nguyn l pha mu vi cc sc mu c bn l , lc, lam (Red, Green, Blue). Theo


nguyn l ba mu ny, mt mu bt k u c th c to ra t ba mu c bn.
Frequency (Hz)
10

10

10

Radio Frequency

1 2

10

1 4

10 10

1 5

Microwaves Infrared

10

1 8

10

2 2

-Rays

X-Rays
Ultraviolet

Visible Spectrum

Hnh 6.3 Vng nh sng thy c


Ph ca nh sng (Spectrum)
nh sng xut pht t ngun sng c xc nh bi ph I() ca n - spectrum,
ph I() ny c o bi nng lng ca nh sng vi bc sng cho trc i
qua mt n v din tch trong mt khong thi gian.
Thut ng khc ph cng sut - power spectrum, vi n v l watts/m2.
Ph cng sut c dng o cng pht sng ca ngun - emission
intensity
Hay cn gi cng truyn dn - transmission intensity ca nh sng theo
lung trong khng gian, hay cng pht sng- illumination intensity ca nh
sng p ln b mt.

Mu sc
Isaac Newton - nh sng trng i qua thu knh thu tinh s pht tn ra thnh ph
cc mu cu vng
Ngc li, thu knh c th kt hp cc ph nh sng to thnh nh sng
trng.
Chm sng khi phn tch thnh ph mu c lin quan n ph nng lng I().
Ph in t c bc sng t 350 ti 780 nm v mu c c trng bi c()
c( )

350

780

Hnh 6.4 Ph in t ca nh sng


86

Chng 6: Mu sc trong ho
6.1.3. Cm nhn mu sc ca con ngi (Physiology - Sinh l - Human Vision)

Hai mt ch l nhng b phn thu hnh ging nh chic my nh, cn no mi phn tch,
tng hp, kt hp nhng thng tin ca hng triu t bo cm quang gi v to nn cm
nhn hnh nh. Chnh no mi ti hin r rt cc hnh thi, sc mu m hai mt ghi
nhn c. Phi chng v vy, nhiu lc con ngi ch trng m khng nhn thy. Ni
cch khc, mt trng v no nhn.
Cu to h quan st ca con ngi gm 2 loi t bo cm th - sensors
Rods (t bo que): nhy cm vi cng nh sng thp hay trong bng ti
Cones - t bo hnh nn
125 triu t bo que v 6 triu t bo nn
Nhy cm vi nh sng mu sc
Chia lm 3 loi nn - cone
Ba loi s c ba gi tr gi l tristimulus values cm nhn tng ng trn 3 mu
c bn v gi n no nhng tn hiu to ra cm nhn v mu sc S-M-L.
t c mt s cm nhn v mt mu bt k ta phi xc nh gi tr ca 3 i
lng ny

Hnh 6.5 Cu to mt con ngi

Hnh 6.6 Con ngi cm nhn mu sc

Ba loi t bo nn s c nhy cm vi 3 mu v cc bc sng khc nhau nh:


L or R, hu nh nhy cm vi nh sng (610 nm)
M or G, nhy cm vi nh sng lc (560 nm)
S or B, nhy cm vi nh lam (430 nm)
Vy ta c ngi b m mu chng qua l mt t bo nn
S:M:L t l = 1:20:40 t ta thy con ngi nhy cm vi mu hn l mu
xanh lam.

87

Chng 6: Mu sc trong ho
N khng ch n gin l RGB
cng vi nh sng
Kt hp t bo que v nn mang
li cm nhn c mu sc v nh
sng
T bo p ng thay i vi
cng :
- Khi nh sng yu: thch ng vi
nhn ti, t bo que tri hn cm
nhn mu sc khng ng k
- Khi nh sng l trung bnh: th
c hai l mc trung bnh
- nh sng cao: x l mu sc,
t bo nn tri hn

Hnh 6.7 Cu to v nguyn l hot ng cc t bo mt


56

27

86

88

Hnh 6.8 Cm nhn mu sc ca con ngi


Ta thy mu ti (bo ho) khc mu ti (cha bo ho).
Yu t cm nhn sinh l:
Hue - sc mu: dng phn bit s khc nhau gia cc mu nh xanh, ,
vng
Saturation - bo ho: ch ra mc thun ca mt mu hay khong cch
ca mu ti im c cng cn bng.
Lightness - sng: hin thn v m t cng sng t nh sng phn x
nhn c t i tng.
Brightness - pht sng: cng nh sng t i tng pht ra ch khng
phi do phn x t cc ngun sng khc.
H thng mu c s dng rng ri u tin do A.H.Munsell a ra vo
nhng nm 1976 khng gian ba chiu bao gm ba yu t Hue, Lightness v
Saturation.
88

Chng 6: Mu sc trong ho

Sc mu trong hi ho: thng c xc nh mu trn gc sc thi (tints), sc


(shade), tng mu (tone) t cc mu nguyn cht hay bo ho. Sc thi l c hnh thnh
t vic thm sc t trng vo cc mu nguyn cht gim bo ho. Sc hay cn
gi l gim mu c to ra bng cch thm mu en vo cc mu nguyn cht
gim i sng ca mu. Cn tng mu l kt qu ca c hai qu trnh trn khi thm c
mu trng ln mu en vo cc mu nguyn cht.
6.1.4. Cc c trng c bn ca nh sng

nh sng c th c m t bng ba thut ng:


sng (Lightness): da vo tnh cht vt l ca n, hay cn gi l tnh pht sng
(brightness). Tnh pht sng o lng nng lng ton phn trong nh sng. N t l
vi din tch gii hn bi P() v trc trong dy 400 n 700 nm. Din tch ny
c tnh nh sau:

P( )d
Tnh pht sng cng cao, th sng cng sng hn i vi ngi quan st.
Sc (shade): phn bit nh sng trng vi nh sng vi nh sng xanh. i
vi nh sng c s phn b quang ph l tng nh hnh di, sc thch ng vi
mt tnh cht vt l khc c gi l bc sng tri ca s phn b.
bc sng tri (Dominant warelength)

P()

Pure color

White
(nm)
400

700

Hnh 6.9 Phn b quang ph ca nh sng


bo ho (Saturation): m t mc chi li ca nh sng. V d hai nh sng mu
c th khc nhau tnh pht sng/ sng v chng c th khc nhau mc
chi li (v d mu ti/bo ho khc vi mu ti/ khng bo ho). Chng ta c:
mu ti
bo ho =
Mu ti + mu trng

6.2. NH SNG N SC
Khng cm nhn c cc sc mu khc nh vng, , tm khi quan st trn mn hnh
en trng
89

Chng 6: Mu sc trong ho

nh lng l thuc tnh duy nht ca cc tia sng n sc v v mt vt l n c


tnh bng nng lng ca tia sng c m t cng (intensity) hay chiu sng
(luminance).
Di gc cm nhn v mt tm l th cng ca tia sng chnh l sng ca
vt (brighness)
S dng ph k - photometer o sng thp nht (min) v cao nht (max) ca
mn hnh. V l khong ng.
Khong cng nhn gi tr min l I0, n max l 1.0. Lm th no th hin
c 256 mc xm khc nhau?
6.2.1. Cng sng v cch tnh

Cng ca ngun sng s thay i trong khong t 0 n 1: 0 qui c cho mu en v


1 cho mu trng.
khong tng ca cng sng s phn chia theo hm logarit
I0 = I0 , I1 = r I0 , I2 = r I1 = r2 I0 , ... , I255 = r255 I0=1
r=(1/ I0)1/255 , Ij = rj I0 = I0(255-j)/255
I = k.N
Vi k v l cc hng s (c t 2.2 -> 2.6), N s lng ht ti mt thi im pht
ra t cathode trong mt chm tia in t.
I0=I0
I1 = rI0
I2 = rI1 = r2I0

I255=rI254=r255I0=1
6.2.2. Php hiu chnh gama

Ta c I = K.V hay V = (I / K)1/


Trong V in p t l vi N trn mi im nh.
Gi s chng ta c mt cng sng I th bc u tin ta phi lm l tm ra gi tr
Ij gn nht qua php lm trn. Gi tr j tm c I= rjI0 vy rj=I/I0 suy ra j = ROUND(logr (
I / I0 )).
Thay j vo cng thc ta c:
Ij = rj . I0
Bc tip theo ca tin trnh l xy dng mc in p Vj cho im nh m cng
nh sng c gi tr tng ng l Ij.
Vj = ROUND( Ij / K )1/

90

Chng 6: Mu sc trong ho

Ta thy cng sng l nh nhau cho cc mn hnh (hay nh l nh nhau), th


ch cn thay i gi tr gama. Gi tr gama l s m ca hm lu tha, gi tr i vi
loi phim nha 35mm trong phng ti l 1.5. Nhng h s gama ca CRT l loi thit b
sng ph thuc vo ng phng tia in t. Thc t gi tr gama ca CRT dao ng t
2.3 n 2.6.
Ta c s phn hi tuyn tnh ca CRT c th c b bi phn cng v php b ny
gi l php hiu chnh gama (Gama correction). Vic s dng Ij lm ch s trong Lookup
table (LUT) tm ra cng sng cho cc im nh trn mn hnh gi l php hiu
chnh gama vi bng LUT. Vy bao nhiu khong s l nh cho vic th hin mt im
nh en trng l lin tc? Theo tnh ton th r=1.01 l mc ngng phn bit ca mt. Nu
r<1.01 th mt s khng phn bit c s khc lnh gia hai cng ln cn nhau Ij v
Ij+1.
r=(1/I0).1/n =1.01 vy n=log1.01(1/I0) vi (1/I0) l khong bin ng ca thit b phn cng.
6.2.3. Xp x bn tng - halftone

S dng en trng m t nh nhiu mu ?


Phng php trn da vo cu to mt ca ngi cng nh nguyn l thu nhn nh
ca mt khi nhn nhng vng nh khong cch xa. Lc mt khng th phn bit c
cc vt mt cch c th m ch ghi nhn cng trung bnh ca vng nh . Phng
php ny c gi l xp x bn tng.
Phng php ny cho php t c phn gii trong in nh bo vo khong t
60->80 dpi, cn trong tp ch v sch cao hn l khong t 110 -> 120 dpi.

Hnh 6.10 Dng en trng th hin nh mu


Ta c gii thut phn ngng (Thread Hold). Phn ngng l ly mt gi tr trung
bnh ca c vng nh lm ngng v so snh n vi mc sng ca tng im nh trong .
Nu gi tr ca n ln hn ngng th im c bt (on), nu ngc li th tt (off).
Ta thy vi phng php ny mt i nhiu thng tin ca nh gy ra mt s hiu ng
ph cho nh. gii quyt ta dng phng php sau:
Mu t: ta biu din mt im nh trn mn hnh theo cc mu t. n v nh nht
ca nh li l 2x2 ta c 5 mc th hin cng sng ca vng n v. Ma trn
li kch thc nxn chng ta c n2+1 phn gii khc nhau. Hnh di y l ma trn
3x3 v cc n v m l 0 n 9.

91

Chng 6: Mu sc trong ho

Hnh 6.11 Phn b cc im trong vng theo th t tng dn


Vic th hin cng vng nh I by gi ch cn n thun l bt tt c cc v tr < I
Th nht:Khng dng ma trn mu c dng ng thng ngang
Th hai: Cc mu phi c hnh thnh theo chui cc bc lin tip nhau sao cho
mi im nh c mt th hin ngng a u phi c mt th hin mi ngng b
vi b > a.
Th ba: Cc mu phi c pht trin theo quy tc t tm i dn ra xung quanh. Nh
s gy c cho ngi s dng hiu ng tng kch thc im.
Th t: Vi mt s cc thit b in nh my in laser hay cc thit b ghi hnh, vn v
cc im c lp tuyt i l rt kh c kh nng t c. Khi m i a phn cc
im nh c bt cho mt cng sng th chng s gy ra cc thay i cho cc
im cn li.
Xp x bn tng vi nh mu: Ta ly mi cell khng phi l mt n v na m l ba
n v nh c trng cho ba mu (Red, Green, Blue).

Hnh 6.12 Mu sc trong nh mu


92

Chng 6: Mu sc trong ho
6.2.4. Ma trn Dither v php ly xp x bn tng

Bayer nm 1973 a ra dng ma trn dither m nh tng c mn ca nh khi


hin th.
Ma trn 2 2 ma trn dither c k hiu D(2):
Tnh cc ma trn D(2n) thng qua D(n):
0 2
D (2 ) =

3 1

(2 ) (n / 2 )
4 D (n / 2 ) + D00
U
D (n ) = (n / 2 )
(2 ) (n / 2 )
+ D10 U
4 D

(2 ) (n / 2 )

4 D (n / 2 ) + D01
U
(n / 2 )
(2 ) (n / 2 )
4D
+ D11 U

U(n) l ma trn n n vi tt c cc phn t = 1


Vi n = 4 v kt qu t D(2)

D ( 4)

0
4
3
=
0
4
3

2 1
+0
1 1
2 1
+3
1 1

1
0 2 1
4
+ 2

1
3 1 1
1
0 2 1
4
+ 1

1
3 1 1

1
1

0 8 2 10

( 4 ) 12 4 14 6
D =
3 11 1 9

15 7 13 5
xc nh im (x,y) l bt hay tt, ta cn xc nh v tr im tng ng vi v tr
ma trn Dither so snh cng sng trung bnh S vi gi tr trong ma trn. Nu
S>Dij th bt.

6.3. CC H MU TRONG MN HNH HA


M hnh mu - color model: l h thng c quy tc cho vic to khong mu t tp cc
mu c bn.
C 2 loi m hnh mu l:
Mu thm (additive): m hnh mu thm s dng nh sng - light hin th mu.
Mu sc ca m hnh ny l kt qu ca nh sng truyn dn - transmitted
Mu b (subtractive): m hnh mu b s dng mc in - printing inks. Mu sc
cm nhn c l t nh sng phn x - reflected light (ly mu tri).
Khong mu m chng ta to ra vi tp cc mu c bn gi l gam mu h thng
(systems color gamut)
Mi m hnh mu c khong mu hay gam mu ring gamut (range) ca nhng mu
m n c th hin th hay in.
Mi m hnh mu c gii hn khong ca ph mu nhn c. Gam mu hay
khong cn c gi l khng gian mu "color space". nh hay ho vector c th ni:
s dng khng gian mu RGB hay CMY hay bt c khng gian mu no khc.

93

Chng 6: Mu sc trong ho

Mt s ng dng ho cho php ngi dng s dng nhiu m hnh mu ng


thi son tho hay th hin i tng hnh hc. im quan trng l hiu v cho
ng m hnh cn thit cho cng vic.
C ba h mu nh hng phn cng:
RGB (Red, Green, Blue) dng vi CRT
YIQ trong h thng tivi mu bng tn rng
CMY (Cyan, Mangenta, Yellow) s dng mt s thit b in mu
Khng c mt m hnh mu no trong cc m hnh thc t trn c tnh d s dng,
v chng khng c mi lin h trc tip vi nim mu trc gic ca con ngi. Mu m
con ngi cm nhn:Hue (sc mu), Saturation ( bo ho), Lightness ( sng).
Cc m hnh mu khc nhau c pht trin nhm s dng cho mt tiu ch nht
nh.
6.3.1. M hnh mu RGB (Red, Green, Blue - , lc, lam)

Gam mu th hin trong mn hnh CRT xc nh bng nhng c tnh ca hin tng pht
quang cc cht pht pho trong mn hnh CRT. M hnh khng gian mu RGB c sp
xp theo khi lp phng n v. ng cho chnh ca khi lp phng vi s cn bng
v s lng tng mu gc tng ng vi cc mc xm vi en l (0,0,0) v trng
(1,1,1).

Hnh 6.13 M hnh khng gian mu RGB


C = rR + gG + bB
Trong C = mu hoc nh sng kt qu. (r,g,b) = to mu trong min [0 1],
(R,G,B) = cc mu c bn , lc v lam.
X X r
Y = Y
r
Z Z r

Xg
Yg
Zg

X b R

Yb G
Z b B

Nu hai mu to ra cng mt gi tr kch thch th chng ta khng th phn bit c


hai mu. Khng gian mu RGB da theo chun ITU-R BT.709, vi gama = 2.2 v im
trng ca m hnh l 6500 degrees K.
6.3.2. M hnh mu CMY (Cyan, Magenta, Yellow - xanh tm, ti, vng)

y l m hnh mu b (Subtractive color models) hin th nh sng v mu sc phn x


t mc in. B xung thm mc ng ngha vi nh sng phn x cng t.
94

Chng 6: Mu sc trong ho

Khi b mt khng ph mc th nh sng phn x l nh sng trng - white.


Khi 3 mu c cng gi tr cho ra mu xm. Khi cc gi tr t max cho mu en.
Color = cC + mM + yY
Ta c Red +Cyan = Black ; Green +Magenta = Black ; Blue + Yellow = Black
1
Black = 1
1

C 1 R
M = 1 G

Y 1 B

Hnh 6.14 M hnh khng gian mu CMY

M hnh mu CMY- K
M hnh m rng ca CMY ng dng trong my in mu. Gi tr en b xung vo
thay th cho hm lng mu bng nhau ca 3 mu c bn.
Cng thc chuyn i:
K = min(C, M, Y) ;
C =C-K;
M = M - K;
Y=Y-K;
C-Cyan, M-Magenta, Y-Yellow; K-blacK
6.3.3. M hnh mu YIQ

M hnh mu YIQ l m hnh mu c ng dng trong truyn hnh mu bng tn rng


ti M, v do n c mi quan h cht ch vi mn hnh ho mu raster. YIQ l s
thay i ca RGB cho kh nng truyn pht v tnh tng thch vi ti vi en trng th h
trc. Tn hiu truyn s dng trong h thng NTSC (National Television System
Committee).
S bin i RGB thnh YIQ c xc nh theo cng thc sau:
0.114 R
Y 0.299 0.587
I = 0.596 0.275 0.321 = G


Q 0.212 0.523 0.311 B
Y chi, I & Q i lng v mu sc

Ch : Y ging nh Y trong m hnh CIEs


N hon ton tng thch vi en/trng (B/W) ca TV
95

Chng 6: Mu sc trong ho

Nhng i lng trong ma trn bin i c tm bng cch s dng cc phosphor NTSC
RGB chun c cc to sc ph l R(0.67 0.33), G (0.21 0.71) v B(0.14 0.08). Ngi
ta cng gi nh rng im trng nm xw =0.31 , yw = 0.316 v Yw =1.0.
3.4. M hnh mu HSV (Hue, Saturation,Value) - M thut

Yu t cm nhn mu sc:
Hue - sc mu: dng phn bit s khc nhau gia cc mu nh xanh, ,
vng...
Saturation - bo ho: ch ra mc thun ca mt mu hay khong cch ca
mu ti im c cng cn bng(mu xm)
Lightness - sng: hin thn v m t cng sng t nh sng phn x nhn
c t i tng.
Brightness - pht sng: cng nh sng m t i tng pht ra ch khng
phi do phn x t cc ngun sng khc.
M hnh mu RGB, CMY, YIQ c nh hng cho phn cng
HSV (Hue, Saturation, Value)=HSB(Hue, Saturation, Brightness) nh hng ngi
s dng da trn c s v trc gic v tng mu, sc v sc thi m thut
M hnh mu HSV c Alvey Ray Smith a ra 1978. Hue: mu sc 00-3600 o
bi gc quay xung quanh trc ng vi mu l 00, mu lc l 1200, mu lam l 2400.
Cc mu b sung cho hnh chp 1800 i din vi mu khc.
Value-Brightness:( sng) 0-1 ng cao V vi nh l cc im gc to (0,0).
im nh l mu en v gi tr V=0, ti cc im ny gi tr ca H v S khng lin
quan n nhau. Khi im c S=0 v V=1 l im mu trng, nhng gi tr trung gian ca
V i vi S=0 (trn ng thng qua tm) l cc mu xm. Khi S=0 gi tr ca H ph
thuc c gi bi cc qui c khng xc nh. Ngc li khi S khc 0 gi tr H s l ph
thuc.
Saturation: bo ho 0-1, gi tr ca S l tp cc gi tr t 0 trn ng trc tm
(trc V) n 1 trn cc mt bn ti nh ca chp 6 cnh.
Satu

Hnh 6.15 M hnh mu HSV


M hnh mu HLS (Hue, Lightness, Saturation Model) khng gian mu trc quan
96

Chng 6: Mu sc trong ho

M hnh thng c s dng trong k thut ho. u im l rt trc gic v d


ta c th chn mu, thay i sng v thay i bo ho. Nhc im l khi chuyn
i vi khng gian mu RGB s c sai s (cube stood on end) thay i trn cc loi mn
hnh khc nhau, r rng khng cm nhn u cc mu.

Hnh 6.16 M hnh mu hnh chp su cnh i HLS


Chng ta c th coi m hnh HLS nh mt s bin dng ca m hnh HLS m trong
m hnh ny mu trng c ko hng ln hnh chp su cnh pha trn t mt V=1.
Nh vi m hnh chp su cnh n, phn b sung ca mu sc c t v tr 1800 hn
l xung quanh hnh chp su cnh i, s bo ho c o xung quanh trc ng, t
khng trn trc ti 1 trn b mt. sng (Lightness)=0 cho mu en (ti im mt thp
nht ca hnh chp su cnh i) v bng 1 cho mu trng (ti u mt cao nht).
6.3.5. Biu mu CIE (1931 Commission Internationale de lEclairage)
Nhc im ca RGB:

Kt qu thc nghim cho thy rt nhiu nhng nh sng mu khng th to thnh


t 3 thnh phn mu c s vi nguyn nhn do v ca vng mc - retinal cortex.
Vi mu Cyan: cng ca nh sng 2 mu green v blue kch thch cm nhn
mu trong mt ngn khng cho thu c mu chnh xc
Cch duy nht thu c mu ny l loi bt phn mu bng cch thm nh
sng vo mu ban u.
Bng cch thm t t nh sng vo thu c (test + red) s cho ra mu ng
bng (blue + green)
C + rR = gG + bB <=> C = gG + bB - rR
Vn t ra l vic phc tp trong phn tch mu v chuyn i mu vi i
lng m ca nh sng c lp thit b.

97

Chng 6: Mu sc trong ho

Hnh 6.17 Hm phn b ba mu c s (qua thc nghim - ph thuc vo mt ngi)


CIE stands for Comission Internationale de l'Eclairage (International Commission
on Illumination)
Commission thnh lp 1913 to mt din n quc t v trao i tng v thng
tin cng nh tp chun - set standards cho nhng vn lin quan n nh sng.
M hnh mu CIE color pht trin trn c s hon ton c lp thit b
Da trn s cm nhn ca ca mt ngi v mu sc.
Yu t c bn ca m hnh CIE nh ngha trn chun v ngun sng v chun v
ngi quan st.
CIE XYZ - Color Space

CIE - Cambridge, England, 1931. Vi tng 3 i lng nh sng - lights mu


X, Y, Z cng ph tng ng.
Mi sng nh sng c th cm nhn c bi s kt hp ca 3 i lng X,Y,Z
M hnh - l khi hnh khng gian 3D X,Y,Z gm gam mu (gamut) ca tt c
cc mu c th cm nhn c.
Color = XX + YY + ZZ
Cc gi tr XYZ thay th cho 3 i lng truyn thng RGB
Mu c hiu trn 2 thut ng (Munsell's terms): mu sc v sc
u im ca 3 loi mu nguyn l c bn l c th sinh ra cc mu trn c s tng
cc i lng dng ca mu mi thnh phn.
Vic chuyn i t khng gian mu 3D ta (X,Y,Z) vo khng gian 2D xc
nh bi ta (x,y),theo cng thc di phn s ca ca tng 3 thnh phn c
bn.
x = X/(X+Y+Z) , y = Y/(X+Y+Z) , z = Z/(X+Y+Z)
C: x + y + z = 1, y to z khng c s dng

98

Chng 6: Mu sc trong ho

Hnh 6.18 Hm phn b ca cc i lng CIE c s

Chun CIE xc nh 3 mu gi thuyt hypothetical colors, X, Y, and Z lm c s


cho php trn mu theo m hnh 3 thnh phn kch thch.
Khng gian mu hnh mng nga - horseshoe-shaped l kt hp ca khng gian
ta 2D mu x, y v sng.
x = 700 nm; y = 543.1 nm; z = 435.8 nm
Thnh phn sng hay chi c ch nh chnh bng gi tr i lng Y
trong tam kch t ca mu sc

Hnh 6.19 Khng gian mu hnh mng nga


M hnh CIE xyY

Hnh 6.20 M hnh mu CIE xyY


Thang o ca Y xut pht t im trng trn ng thng vung gc vi mt
phng x,y vi gi tr t 0 ti 100.
99

Chng 6: Mu sc trong ho

Khong mu ln nht khi Y=0 ti im trng v bng CIE Illuminant C. y l


y ca hnh.
Khi Y tng mu tr nn sng hn v khong mu hay gam mu gim din tch trn
ta x,y cng gim theo.
Ti im trn khng gian vi Y= 100 mu c sc xm bc v khong mu y l
b nht.

Hnh 6.21 Khng gian mu hnh mng nga

6.4. CHUYN I GIA CC H MU


Vic xy dng v th hin mu sc ca cc i tng trn mn hnh ho ch thc hin
qua m hnh ba mu m phn cng h tr RGB. Vy khi phn mm ng dng c s dng
n cc m hnh mu khc, ta phi chuyn i gia chng.
6.4.1. Chuyn i HSV - RGB

H HSV c H (sc mu) chy t 00 n 3600 vi mu ti 00 .


S ( bo ho) v V (gi t cng nh sng) thuc khong [0 1]
If (S==0)//H khong tham gia - en trng
R = V;
G = V;
B = V;
Else // Khi S<>0 trng hp mu
// Mu ca im nh c xc nh thng qua 3 bin ph M,N v K
if (H==360)
H=0;
Else
H = H/60;
I = (int)H; // ly gi tr nguyn
F = H - I;
M = V*(1 - S);
N = V*(l - S*F);
K = V*(1- S*(1- F));
if I == 0 then (R,G,B) = (V,K,M);
if I == 1 then (R, G, B) = (N, V, M);
if I == 2 then (R, G, B) = (M, V, K);

100

Chng 6: Mu sc trong ho
if I == 3 then (R, G, B) = (M, N, V);
if I == 4 then (R, G, B) = (K, M, V);
if I == 5 then (R, G, B) = (V, M, N);

6.4.2. Chuyn i RGB sang XYZ

X a11
Y = a
21
Z a31

a12
a 22
a32

a13 R
a 23 G
a33 B

Cc nh sn xut cung cp cc to XYZ cho pht pho tng ng vi mu RGB


m mn hnh hin th: (Xr, Yr, Zr ), (Xg, Yg, Zg) v (Xb, Yb, Zb)
Hay vit li:

X X r
Y = Y
r
Z Z r

Xg
Yg
Zg

X b R

Yb G
Z b B

C R=1

R 1
G = 0 suy ra

B 0

X X r
Y = Y
r
Z Z r

Tng t G=1

R 0
G = 1 suy ra

B 0

Tng t B=1

X X g
Y = Y
g
Z Z g

R 0
G = 0 suy ra

B 1

X Xb
Y = Y
b
Z Z b

Thng [X Y Z] cho mi pht pho (phosphor) th khng c cung cp, nn chng


ta tnh vi trng hp im trng (whitepoint) khi R=G=B=1.
By gi chng ta cn bit chi ca im trng c gi bi Yw . Ta t:
Er = Xr + Yr + Zrsuy ra xr = Xr / Er vy Xr = xr .Er ; Yr = yr.Er ; Zr = (1- xr yr ).Er
Tng t:

xr E r
X
Y =
y r Er

Z (1 xr yr ) Er

xg E g
yg Eg
(1 xg y g ) E g

R

yb Eb
G
(1 xb yb ) Eb B
xb Eb

Ta c im trng:

1
X w
Y = [M ]1

w
1
Z w
M ta c theo NTSC: RGB chun (xw, yw, Yw) nh sau: xw = 0.31, yw = 0.316 v Yw =1.0
C:
101

Chng 6: Mu sc trong ho

yw =

xw =
V:

Yw
Y
( X w + Yw + Z w ) = w
X w + Yw + Z w
yw

Xw
Yw
Xw = xw (Xw + Yw + Zw ) X w = x w
X w + Yw + Z w
yw

Z w = (1 x w y w )

Yw
yw

Ta c R + G + B = W nn:

X r X g Xb X w
Y + Y + Y = Y
r g b w suy ra Xw =Xr + Xg + Xb = xrEr + xrEg + xbEb
Z r Z g Z b Z w
T :

Er
xr
xg
xb
X w

Y =
yr
yg
yb
Eg
w
Z w (1 xr y r ) (1 x g y g ) (1 xb yb ) Eb
Ta hon ton tnh c: Er, Eg v Eb

Tm tt:
Chng ny chng ta nghin cu cu to ca nh sng (v mt vt l), ri xt b phn
cm nhn nh sng ca con ngi l mt. a ra cc h mu nh hng cho phn cng
nh: RGB dng cho my tnh, CMYK dng cho my in v YIQ dng cho truyn hnh. Tt
c cc h mu ny con ngi u khng cm nhn c, con ngi ch cm nhn c h
mu HSV hay HLS. T tt c cc u nhc im ca cc h mu trn, t s cm nhn
mu sc ca con ngi ph thuc vo cu to ca cc t bo mt nn nm 1913 t chc
quc t v nh sng a ra h mu chun thun nht CIE. H mu ny c th bao hm
tt c cc h mu trn, n gii quyt c cc nhc im ca h mu RGB. Cui cng
chng ta a ra cc cng thc chuyn i gia cc h mu vi nhau.

Bi tp:
1. Gi s rng mi trng trng tm l khng kh (hoc chn khng) hy m t di
quang ph hin th bng mt di tn s.
2. Ti sao mi th trng c v mu xm hoc en trong mt phng ti ni chng ta
hu nh khng th nhn thy c?
3. Hy thit lp mt cng thc n gin tnh din tch b gii hn bi hm phn b
P(). (Xem hnh 6.9 sch K thut ho)
4. T hm phn b P() hy lp cng thc tnh bo ho t hnh 6.9 - sch k thut
ho.
5. S khc nhau gia Y trong CMY v Y trong YIQ l g?
102

Chng 6: Mu sc trong ho

6. Gi s rng mt mn hnh hin th to nn nhng g c gi l mu trng chun


vi xw = 0.313 yw =0.329 v Yw = 1.0 (R=G=B=1). V cc to sc ph ca pht
pho ging nh to c tm thy m hnh mu.
R(0.62 0.34)G(0.290.59)B(0.150.06)
Hy tm ma trn bin i mu M cho mn hnh hin th.
7. Hy kim nghim rng Y trong m hnh CIE XYZ tng t Y trong m hnh mu
NTSC YIQ. Ta c NTSC chun th: xw =0.31 , yw = 0.316 v Yw =1.0 v s dng
cc to sc ph ca cc pht pho NTSC chun: R(0.67 0.33), G (0.21 0.71) v
B(0.14 0.08).

103

Chng 8: nh sng

CHNG 7: NG CONG V MT CONG TRONG 3D


7.1. NG CONG - CURVE
Trong cc ng dng ca ho my tnh, hu nh cc thc th l ng cong mm v
mt cong, chng dng m t th gii thc: nh ca, xe c, ni non.hay xy dng nn
cc thc th ang c thit k. Nhng ta thy s dng cc phng trnh ng cong
khng th hin c hnh nh thc hay tng ca ngi thit k, cn nu ta dng tp
hp cc im th thng cn nhiu dung lng nh lu tr cng nh tc tnh ton.
Ta c qu o chuyn ng ca mt im trong khng gian th to thnh ng
cong. Trong chng ny s a ra phng php tng th v nhng m hnh ton hc
biu din v xy dng cc loi ng v mt cong trong khng gian 3D trn my tnh.
7.1.1. im biu din ng cong (curve represents points )

Ta thy qua hai im v c mt ng thng. Qua ba im v c mt ng cong


trong mt phng. Qua bn im v c mt ng cong trong khng gian. Dng cc
phng trnh ng cong nh Hypebol, parabol... th tnh ton phc tp v khng th hin
c hnh nh thc hay tng ca ngi thit k.
Chn ng cong nh th no ph hp vi my tnh? Biu din v iu khin
ng cong thng qua im iu khin. ng cong l cc i tng c bn thng l
kt qu ca tin trnh thit k v cc im ng vai tr l cng c kim sot v m hnh
ho ng cong. Cch tip cn ny l c s ca lnh vc thit k m hnh hnh hc nh
my tnh (Computer Aided Geometric Design - CAGD).
Cc cch biu din ng cong:

Tng minh (Explicit functions):


y = f(x), z = g(x)
Khng tng minh (Implicit equations):
f(x,y,z) = 0
Biu din cc ng cong tham bin (Parametric representation)
x = x(t), y = y(t), z = z(t) trong t [0 1]
Hn ch:
H ho ng dng ch m t b hp trong on no y
ng cong bc cao vi mi gi tr ca x ta lun c 2 tp gi tr ca y (thc t
ch cn 1)
Chng ta cn biu din ng cong mm (ch biu din ng cong gy)
7.1.2. ng cong a thc bc ba tham bin

Phi m bo l ng cong khng gian vi 3 trc to x, y, z. Trnh c nhng tnh


ton phc tp v nhng phn nhp nh ngoi mun xut hin nhng ng a thc
bc cao.
Cng thc m t:
Tng minh : y = f3(x),z = g3(x)
104

Chng 8: nh sng

Khng tng minh: f3(x,y,z) = 0

Hnh 7.1 ng cong a thc bc ba


Biu din cc ng cong tham bin (Parametric representation):
x = f3(u), y = f3(u), z = f3(u) trong u [0 1]
Theo Lagrange:
x = a1 + b1u + c1u2 + d1u3
y = a2 + b2u + c2u2 + d2u3
z = a3 + b3u + c3u2 + d3u3
y ba phng trnh vi 12 n s
Vi 4 im p0, p1, p2, p3 phng trnh xc nh (v 4 im th xc nh 1 ng cong
trong khng gian).
x0
x1
x2
x3

Mi 1 im cho ta cp 3 gi tr: P0 = y0 P1 = y1 P2 = y 2 P3 = y3
z 0
z1
z 2
z 3

C thy c 12 phng trnh, thay vo 3 phng trnh trn ta tnh c 12 n a1.....d3


Ghi ch: r rng c s thay i mt cht v ng cong th ta li phi gii li h
phng trnh tnh cc tham s cho ng cong, dn n tnh ton chm.
7.1.3. ng cong Hermite

Phng php Hermite da trn c s ca cch biu din Ferguson hay Coons nm 60. Vi
phng php ca Hermite ng bc ba s xc nh bi hai im u v cui cng vi hai
gc nghing ti hai im .

Hnh 7.2 ng cong Hermite


Theo cng thc ton hc hm bc ba c biu din di dng:
p = p(u) = k0 + k1u + k2u2 + k3u3
p(u) = kiuiin (vi ki l cc tham s cha bit)
105

Chng 8: nh sng

dc ca ng cong c o bng p(u)


p = p(u) = k1 + 2k2u + 3k3u2
p0 v p1 ta c hai dc p0 v p1 vi u = 0 v u = 1 ti hai im u cui ca on
[0,1].
p0

(u=0)=k0

p0(u=0)=k1
p1(u=1)=k0+k1+k2+k3
p1(u=1)= k1+2k2+3k3
hay
k0=p0 v k1=p0
k2=3(p1 p0) - 2p0 p1 v k3 = 2(p0-p1) + p0 + p1
Khi c ko, k1, k2, k3 thay vo:
p = p(u) = k0 + k1u + k2u2 + k3u3
p0(1-3u2+2u3) + p1(3u2-2u3) + p0(u-2u2+u3) + p1(-u2+u3)
1
0
p = p(u) = [ 1 u u2
3

0
0 p0
0 1
0 p1
.
3 2 1 p'0

2 1
1 p '1
0

Thay i ca cc im hay cc gc nghing (thay i 2 vector) dn n s thay i


hnh dng ca ng.
7.1.4. ng cong Bezier

Vic s dng im vi cc vector kim sot c dc ca ng cong ti nhng im


m n i qua. Tuy nhin khng c thun li cho vic thit k tng tc, khng tip cn
vi cc dc ca ng cong bng cc gi tr s (Hermite).
Paul Bezier, nhn vin hng RENAULT vo nm 1970 i u trong vic ng dng
my tnh cho vic xy dng cc b mt. H thng UNISURF ca ng c p dng trong
thc t vo nm 1972 c thit k v kim xe Mezesez hay Renaut.
Bezier s dng a gic kim sot cho ng cong ti nhng nh ca a gic v
tip tuyn ti (p0,p1,p2,p3).
Ta c p0, p3 tng ng vi p0, p1 trn ng Hermite, im trung gian p1, p2 c
xc nh bng 1/3 theo di ca vector tip tuyn ti im po v p3

Hnh 7.3 a gic kim sot Bezier


106

Chng 8: nh sng

p0 = 3(p1 p0)
p1 = 3(p3 p2)
p = p(u) = p0(1-3u2+2u3) + p1(3u2-2u3) + p0(u-2u2+u3) + p1(-u2 + u3)
p = p(u) = p0(1 - 3u + 3u2 - u3) + p1(3u-6u2-3u3) + p2(3u2 - 3u3) + p3u3

p = p(u) = [ 1 u u2 u3

0
0
1
3 3
0

3 6 3

1 3 3

0
0
0
1

p0
p
1
p2

p3

Hnh 7.4 Hm hp ca ng cong Bezier


u im:
D dng kim sot hnh dng ca ng cong hn vector tip tuyn ti p0 v p1 ca
Hermite.
Nm trong a gic kim sot vi s im trung gian tu (s bc tu ),
c s bc =s im kim sot -1.
i qua im u v im cui ca a gic kim sot, tip xc vi cp hai vector ca
u cui .
Biu thc Bezier-Bernstain
ng Bezier cng c th c bit n nh biu thc Bezier Bernstain bi k thut
m Bezier s dng l p dng cng thc ho cc vector trong php tnh a gic xp x
c Bernstain pht trin gn y. Php ton i s c xc nh nh sau:
0u1
0!=1, ui =1 khi i = 0
n

P (u ) = Bi ,n (u ) Pi
i =0

Bi ,n (u ) = C (n, i )u i (1 u ) ni

C (n, i) =

n!
i!(n i)!

Trong P0.....Pn: vector v tr ca a gic (n+1) nh.

107

Chng 8: nh sng
7.1.5. ng cong B-spline

7.1.5.1. ng cong bc ba Spline


Trong cng thc ca Bezier, chng ta s dng hm hp lin tc xc nh im kim
sot tng i. Vi cc im ni suy th mc tng i s khc nhau m trong mt
chui cc phn t nh s kt hp vi nhau to ra ng cong a hp. Theo tnh ton th
ng bc ba s a thc bc thp nht c th biu din mt ng cong trong khng
gian v chui im Hermite s ph hp nht i vi vic xy dng nn ng cong a
hp ny.
Vic yu cu ngi s dng a vo cc vector tip tuyn ti mi im trong tp
hp cc im l cc k bt tin cho nn thng trong cc ng bc ba a hp ta s dng
cc iu kin bin lin tc trong php o hm bc mt v hai ti im ni gia. v ng
cong c xc nh nh trn gi l ng spline bc ba vi php o hm lin tc bc hai.
Gi tr o hm ca ng cong s xc nh cong ti mi im nt v n cng a ra
iu kin bin cho mi on trn ng cong.
Vy ng bc ba spline c u im l khng phi xc nh dc ca ng ti
cc nt nhng nhc im ca n l ch to ra s thay i ton cc khi ta thay i v tr
ca im.
ng cong Spline i qua n im cho trc m mi on l cc ng cong bc
ba c lp c dc v cong lin tc ti mi im kim sot hay im nt. Vi n im
ta c (n-1) on vi mi on gm bn vector h s hay 4(n-1) cho n-1 on, v 2(n-1)
iu kin bin v (n-2) iu kin v dc cng (n-2) v cong.
xy dng nn ng spline c tham s vi n im nt ta c mt dy cc gi tr
tham s m ta gi l vector nt.
u0......un-1 trong ui+1 >ui
Cn la chn ti mi nt, cch la chn n gin nht l theo cch n iu c
ngha l vi gi tr 0 ti im u v tng ln 1 ti nhng im k tip. tuy vy phng
php ny dn n cong khng mong mun ti cc im v vy vic tham s ho s a
vo chiu di, nhng phng php ny cng khng c chnh xc khi m ng cong
cha xc nh chiu di. Tuy nhin thng thng ngi ta s dng vic tch lu ca cc
dy cung vi:
u0 =0v ui+1 = ui + di+1 trong di: l khong cch gia 2 im pi-1 v pi
Trong cc trng hp ng cong c bc ln hn ba c th dng cho ng spline.
Thng thng ng spline bc n s c xy dng trn cc phn nh lin tc ca cc
bin c lp.

Hnh 7.5 Kt ni hai ng cong


108

Chng 8: nh sng

Hnh trn cho thy hai on cong c chung im ni m ng cong lin tc ti


im , vic biu din tnh lin tc ca ng cong thng qua ch ci C-Cuntinue. C0
m bo khng c s gin on gia hai on cong. C1 tnh lin tc bc nht hay o hm
bc nht ti im ni. C2 o hm bc hai lin tc ca ng cong ti im ni.
Gi s khi biu din ng cong mm thng qua cc on cong q1, q2, q3 (mi
on c 4 vector h s) cn tho mn:
Lin tc ti im ni hay C10 = C20
dc (hay vector tip tuyn) ti im ni (im cui ca q1 v u q2) l nh
nhau: C11 = C21 (o hm bc nht)
Tho mn lin tc trn ti im ni (o hm bc 2 lin tc ti im ni)C12 = C22
Vic kt hp cc on cong Hermite bc ba m t mt ng cong mm theo
kiu phn on spline l phng php n gin nht hay cn gi l phng php Hermite
ni suy. Vi phng php ny th tham bin ui cho mi on cong i ca tp cc on cong
Hermite s bin i trong khong t 0 n 1 v lun tn ti o hm bc nht ca cc
on cong ti cc im ni. Phng trnh cho mi on cong c s dng lc ny l
phng trnh ng cong bc ba Hermite:
1
0
p = p(u) = [ 1 u u2
3

0 p0
0 1
0 p1
.
3 2 1 p'0

2 1
1 p '1

Pn-1
Pn-1
Po
z

P1

Hnh 7.6 Phn on ca ng cong Spline - Hermite


Theo Hermite cc on l cc ng cong, tnh lin tc ca o hm bc hai ti cc
im ni c th d dng t c bng cch t Pi-1(ui-1=1) l o hm bc hai ti im
cui ca on (i-1) bng vi Pi(ui=0) o hm bc hai ti im u ca on th i.
Pi-1(1)= Pi(0)
C phng trnh:
Pi(u) = k0i + k1iu + k2iu2 + k3iu3
o hm bc hai s l:
Pi(u) = 2k2i + 6k3iu
Pi-1(1)= Pi(0) nn 2k2(i-1) + 6k3(i-1)u= 2k2i
V im cui ca on i-1 trng vi im u ca on th i(Pi(0)=Pi-1(1))
109

Chng 8: nh sng

Theo Hermite: k2 = 3(p1 p0) - 2p0 p1 v


k3 = 2(p0-p1) + p0 + p1
2(3(Pi Pi-1) - 2Pi-1 Pi)+6(2(Pi-1-Pi) + Pi-1 + Pi)=2(2(Pi-1 - Pi) + Pi-1 + Pi)
Hay: Pi-1 + 4Pi + Pi+1 = 3(Pi+1 Pi) (*)
Vi phng trnh (*) ny th phng trnh dng tng qut ca ng cong Spline l
tp ca cc on cong Hermite s xc nh vi iu kin ban u cho l tp cc im kim
sot ca ng cong v hai vector tip tuyn ti hai im u cui ca ng cong . S
dng (*) ta c th tnh c cc gi tr ca cc vector tip tuyn ti tng im kim sot
ca ng cong.

P0'
1 0 . . . . P0'

1 4 1 0 . . '
P1 3( P2 P0 )

0 1 4 1 0 . .
.

=
.

. . . . . . .
. . 0 1 4 1 Pn' 2 3( Pn 1 Pn 3 )

'

Pn'1

. . . . 0 1 Pn1

Tng ng vi:
P0' 1 0 . . . .
'

P1 1 4 1 0 . .
. 0 1 4 1 0 .
=

. . . . . . .
P ' . . 0 1 4 1
n' 2

Pn1 . . . . 0 1

P0'

3( P2 P0 )

.
.

3( P P )
n 1 ' n 3
Pn1

7.1.5.2. ng B-spline
Vi Bezier hay spline u khng cho ta thay i ng cong mt cch cc b, vic thay
i v tr cc im kim sot hay cc vector tip tuyn khng ch nh hng trc tip n
dc ca ng cong ln cn quanh im kim sot m cn ko theo nh hng n cc
phn cn li ca ng cong. ng Bezier thm vo l khi tnh xp x bc cao s
rt phc tp cn khi lin kt nhiu on Bazier hay Hermite bc thp (bc ba) c th em
li ch li khi tnh ton nhng yu t rng buc v tnh lin tc ca o hm bc cao ti
cc im ni khng cho iu khin cc b nh mong mun.
Vic kt hp lun phin cc on cong tng hp, thng qua cc a thc tham s xc
nh ring r trn mt s im kim sot ln cn vi s bc tu khng ph thuc vo s
lng cc im kim sot, cho php to nn ng cong trn mm B-spline. ng cong
ny khc phc c cc nhc im m cc dng ng cong trc cha t c. C
ngha l khi dch chuyn im kim sot ca ng cong th ch mt vi phn on ln
cn ca im kim sot b nh hng ch khng phi ton b ng cong.
Vi n+ 1 s im kim sot Pi ta c:

110

Chng 8: nh sng
n

P (u ) = N i ,k (u ).Pi
i =0

Trong Ni,k(u) l hm hp B-Spline bc k-1 v s khc bit gia B-spline v


Bezier s c th hin trn . Trong ng Bezier bc ca a thc c xc nh bi s
on cong trn ng cong , cn vi B-spline bc c tho mn c lp vi s im
kim sot ca ng.
Hn na hm hp ca Bezier khc 0 trn ton b khong ca tham s u cn B-spline
ch khc 0 trn on ngn ca cc tham s. Mi on trn hm hp ch tng ng vi mt
im th ch dn ti s thay i cc b trong khong m trn tham s ca hm hp
khc 0.
Biu din ton hc ca B-spline, vi hm B-spline c bc k-1 xc nh th:
N i ,k (u ) =

(U i +1 u )
(u U i +1 k )
N i 1,k 1 (u ) +
N i ,k 1 (u )
(U i U i +1 k )
(U i +1 U i + 2 k )

1 u [ui , ui +1 ]
N i ,1 (u ) =
0 others
Trong ui l gi tr ti nt pi vi bin s l u c gi l cc vector nt.

Tt c cc gi tr nt ng thi xc nh trn vector nt v cc nt nguyn thng s


dng d dng. Trong trng hp ny cc hm hp bc k s khc 0 trong khong k ca
vector nt v ton b cc gi tr trn vector cho mt tp hp im bng n+1+k.
Khng nh Bezier, ng B-spline khng i qua hai im u v cui tr khi hm
hp c dng l tuyn tnh.
ng B-spline c th c to qua hai im u, cui v tip xc vi vector u v
cui ca a gic kim sot. Bng cch thm vo cc nt ti v tr ca cc nt cui ca
vector tuy nhin cc gi tr ging nhau khng nhiu hn bc ca ng cong.
Ging nh ng cong Bezier, tnh cht bao li ca a gic kim sot v tnh cht
chun c tha mn. Vy c:
n

N
i =0

i,k

(u) = 1

Trong ng cong B-spline, s lng cc nt, bc ca ng cong v s im iu


khin lun c cc quan h rng buc:
0un-k+2

111

Chng 8: nh sng

Hnh 7.7 ng cong B-spline


Vy vic xc nh cc vector nt s ph thuc vo s phn loi ca chnh bn thn
chng v iu s nh hng n hnh dng ca ng cong c m t. Phn loi s
da trn loi ca ng cong nh sau:
u tun hon (periodic)
Khng tun hon (open or unperodic)
Khng u (non-uniform)

a. B Spline - u v tun hon


Vector nt l u khi gi tr ca chng cch u nhau mt khong xc nh.
V d: [ 0 1 2 3 4 5 ] vi xc nh = 1
[ -2-1/2 1 5/2 4 ] vi xc nh = 3/2
[ -1-0.6 -0.2 0.2 0.6 1 ] vi xc nh = 0.4
Trong cc bi ton thc t, thng thng th khong xc nh ca tham bin nm
trong khong t 0 n 1 hay t 00 m 3600 th vic chn gi tr ca cc vector nt c
chun ho trong khong [0 1] hay [00 3600] .
[ 00.2 0.4 0.6 0.81 ] vi xc nh = 0.2
[ 00120024003600 ] vi xc nh = 1200
Bc (k-1)

Cp (k)

Vector nt (m=n+k)

Khong tham s (k-1)t(n+1)

[0 1 2 3 4 5 6 7]

1t6

[0 1 2 3 4 5 6 7 8]

2t6

[0 1 2 3 4 5 6 7 8 9]

3t6

Cc vector nt gi l u v tun hon khi cc hm B-spline i vi mi phn on


c th chuyn i ln nhau. Bng trn ch ra s thay i ca min tham s v vector nt
khc nhau ca cc ng cong B-spline khi bc ca ng cong thay i. S lng ca
112

Chng 8: nh sng

vector nt c qui nh bi biu thc m-n+k v s lng cc im kim sot tnh qua
biu thc (n+1) bng6.
Tnh cht:
nh hng ca mi hm c s c gii hn trong k on l cp ca ng cong
cn th hin. Vy chng ta s dng ng cong bc ba th nh hng ca hm c s tri
di trn bn on ca ng cong.
ng B-spline tun hon khng i qua cc im u v cui ca a gic kim sot
ngoi tr vi ng bc 1 (k=2) m khi ng cong chuyn dng thnh ng thng.
V d v cc ng B-spline tun hon c cc bc khc nhau c cng cc im v a
gic kim sot. Khi k=2 ng cong bc mt trng vi cc cnh ca a gic kim sot.
Khi k=3, ng cong B-spline bc 2, bt u ti trung im ca cnh th nht v kt
thc ti trung im ca cnh cui cng ca a gic kim sot.

b. Khng tun hon (Open Non Uniform)


Mt vector khng tun hon hoc m l vector nt c gi tr nt ti cc im u
cui lp li vi s lng cc gi tr lp li ny bng chnh cp k ca ng cong v cc
gi tr nt trong mi im lp ny l bng nhau
Nu mt trong hai iu kin ny hoc c hai iu kin khng c tho mn th
vecto nt l khng u.
V d, xt mt a gic kim sot vi bn nh. Cc ng cong B-spline cp 2,3,4
c xy dng da trn a gic kim sot c s lng cc nt m=n+k s c vector nt
nh sau:
Cp (k)

s lng nt (m = n + k)

Vector nt khng tun hon

[0 0 1 2 3 3]

[0 0 0 1 2 2 2]

[0 0 0 0 1 1 1 1]

Cc biu thc phi c tho mn i vi nt ui trn vector nt khng tun hon bt


u ti u0.
Danh sch cc vector nt khng tun hon a ra mc ny u tho mn cc biu
thc sau:
ui = 0
ui = i-k

1=<i<=k
k+1<i<=n+1

ui = n-k+2

n+1<i<=n+k+1

Cc vector nt khng tun hon cung cp cc hm c s c nh ngha trong mt


min tham s phc tp v khng c s mt mt nh vi loi vector tun hon v v vy
ng cong B-spline loi ny lun i qua cc im u v cui ca a gic kim sot.

113

Chng 8: nh sng

V d: hm hp bc ba tnh xp x cho 8 khong s xc nh trn vector nt l


00001234555. y chng ta cn thy s thay i cc b trn ng cong khi ta thay i
v tr mi im.
ng cong Bezier l trng hp c bit ca B-spline khng tun hon, trong
s lng cc nh s dng bng vi cp ca ng cong. Vector nt trong trng hp ny
l:
[ 0 0 ..... 0 1 1 ...... 1 1 ]
kk
ng cong B-spline bc ba vi bn im kim sot v vector khng tun hon [0 0
0 0 1 1 1 1] cng chnh l ng cong Bezier.

c. Khng u
Trong vector nt khng tun hon, gi tr cc nt xut hin ti cc bin c lp li
v cc nt bn trong cc bc nt bng nhau. Nu mt trong hai iu kin ny hoc c hai
iu kin ny khng c tho mn th vector nt l khng u.
V d cc nt khng u c th to ra bng cch t cc gi tr lp li i vi cc nt
khong gia [0 1 2 3 3 4 5]
Hay to ra bc nhy khng bng nhau gia cc nt [0.0 0.2 0.5 0.75 1.0]
Cc vector nt loi u cho php ngi s dng d hnh dung v x l trong cc
php ton nhng trong mt s cc trng hp bc nt khng u li c nhng u im
c bit. V d nh trong vic iu khin hnh dng ca ng cong trong tin trnh thit
k khi cc sai lch khng mong mun c th xut hin m vic s dng ng cong Bspline u vi cc d liu im c cc khong cch tng i ln m khng u nhau.
Kt lun

o B-spline l mt dng ca Bezier


o Thc t khi ta chn bc k cho tp hp k im th thi B-spline chuyn thnh
Bezier
o Khi bc ca a thc gim s nh hng cc b ca mi im nt cng r
rng hn.
o Khi tn ti nh hng cc b cng ln v ng cong phi i qua im .
o Chng ta c th thay i hnh dng ng cong B-spline bng cch:
o Thay i kiu vector nt: u tun hon, m, khng u
o Thay i cp k ca ng cong
o Thay i s nh v v tr cc nh a gic kim sot
o S dng cc im kim sot trng nhau

7.2. M HNH B MT (Surface) V CC PHNG PHP XY DNG


7.2.1. Cc khi nim c bn

Mt cong (surface): l qu o chuyn ng ca mt ng cong to nn. Biu din tham


bin cho mt cong:
114

Chng 8: nh sng

Da vo vic xy dng v to b mt ton hc trn nhng im d liu


Da trn vic xy dng nn b mt ph thuc vo bin s c kh nng thay i
mt cch trc din thng qua cc tng tc ho.
Ta c:
x=x(u,v,w)

u,v,w [0, 1]

y=y(u,v,w)

u+v+w=1

z=z(u,v,w)
Q(u,v,w) = Q[ x=x(u,v,w) y=y(u,v,w) z=z(u,v,w) ]
Biu din theo mnh
Biu din ming t gic - quadrilatera Patches
Biu din ming tam gic - Triangular Patches
7.2.2. Biu din mnh t gic

Phng trnh:
x=x(u,v)
y=y(u,v)

u,v [ 0, 1]

z=z(u,v)
Q(u,v) = Q[ x=x(u,v) y=y(u,v) z=z(u,v) ]
Thnh phn
u,v l cc tham bin
Cc im Q(0,0) Q(0,1), Q(1,0), Q(1,1) l cn ca mnh, cc ng cong Q(1,v),
Q(0,v), Q(u,0), Q(u,1) l cc bin ca mnh. o hm ring ti im Q(u,v) xc nh
vector tip tuyn theo hng u, v.

Hnh 7.8 Biu din mnh t gic


Q(u , v) / u = Q[x(u , v) / u , y (u , v) / u , z (u , v) / u ]
Q(u , v) / v = Q[x(u , v) / v, y (u , v) / v, z (u , v) / v ]

7.2.2.1. Kt ni mnh t gic

115

Chng 8: nh sng

Hnh 7.9 Kt ni mnh t gic

Thc th hnh hc biu din thng qua cc mnh cng dng, cc mnh c th ni vi
nhau theo cc hng u,v khi hai mnh cng hng . Nu mi im trn bin ca hai
mnh bng nhau, hay hai bin bng nhau. Hai mnh lin tc bc C0. Nu hai bin bng
nhau v o hm bng nhau trn cng mt hng th hai mnh gi l kt ni bc C1.

7.2.2.2. H ta Barycentric Coordinates


Tp cc im P1,P2 ... Pn , tp cc t hp ca cc im
k1P1 + k2P2 + k3P3 ... + knPn
Vi

k1 + k2 + k3 + ... + kn =1

Cc im to thnh khng gian affine vi cc gi tr ta nates


k1,k2,k3,..knc gi l h to barycentric.

7.2.2.3. Tam gic Triangular

Hnh 7.10 Mnh tam gic

Trong tam gic cc im c dng P1, P2, P3


H s: k1, k2, k3 [ 0, 1]
k1 + k 2 + k 3 = 1
P = k1P1 + k2P2+ k3P3
Nu H s ki > 1 hoc <0 im P s nm ngoi tam gic (Q)
Nu H s ki = 1 hoc =0 im P s nm trn cnh tam gic (R)
116

Chng 8: nh sng
7.2.3. M hnh ho cc mt cong (Surface Patches)
7.2.3.1. Mt k (Ruled Surface)

B mt c xy dng bng cch cho trt mt on thng trn hai ng cong. Cc mt


k nhn c bng php ni suy tuyn tnh t hai ng cong bin cho trc tng ng
vi hai bin i din ca mt k P1(u) v P2(u).
Ruled

Surface

3
2.
2
1.
1
0.

Duong

cong
Duong

0.

cong

0.
0.
1 1

0.

0.

0.

0.

Hnh 7.11 M hnh b mt k


Phng trnh mt k:
Q(u,v) = P2(u)v + P1(u)(1-v)
Nu hai ng cong cho trc tng ng l P1(v) v P2(v)
Th mt k c phng trnh:
P (v )
Q(u , v) = P1 (v)(1 u ) + P2 (v)u = [(1 u )] 1
P2 (v)

7.2.3.2. Mt trn xoay (Revolution surface)

Hnh 7.12 M hnh mt trn xoay

117

Chng 8: nh sng

Mt c xy dng bi ng thng hay mt ng cong phng, quanh mt trc


trong khng gian.
Gi s ng cong phng c dng:
P(t)=[x(t) y(t) z(t)] 0ttmax
V d: quay quanh trc x mt thc th nm trn mt phng xoy, phng trnh b mt
l
Q(t, f ) = [ x(t) y(t) cosfz(t) sinf ]
0 2
V d: Mt trn xoay

P1[1 1 0] v P2[6 2 0] nm trong mt phng xoy. Quay ng thng quanh trc ox


s c mt mt nn. Xc nh im ca mt ti t=0.5, f =p/3.
Phng trnh tham s cho on thng t P1 ti P2 l:
P(t) = [ x(t) y(t) z(t) ] = P1 + (P1 - P2)t 0 t 1
Vi cc thnh phn -cc:
x(t) = x1 + (x2- x1)t = 1+5t
y(t) = y1 + (y2- y1)t = 1+t
z(t) = z1 + (z2- z1)t = 0
Dng phng trnh:
Q(1/2, p/3) = [ 1+5t(1+t)cosf (1+t)sinf ]
7
=
2

cos
2
3

7
=
2

3
4

sin
2
3

3 3

7.2. 3.3. Mt trt (Sweept Surface

Hnh 7.13 M hnh mt trt

Sweep surface l mt c to bi bng cch trt mt thc th.


V d: mt ng thng, a gic, mt ng cong, mt hnh dc theo mt ng
trong khng gian.
118

Chng 8: nh sng

Q(u,v) = P(u)*[ T(v) ]


P(u) thc th cn trt
[ T(v) ] l ma trn bin i ([ T(v) ] c th l ma trn tnh tin, quay, hay t l hoc
l kt hp ca nhiu php bin i ).
V d:
P1[000], P2[03 0]
P(t) = P1 + (P2 P1) *u = [0 3u01]
0 u,v 1
0
0
1

0
cos(
2
v
)
sin(
2

v )
T (v ) =
0 sin(2v ) cos(2v )

0
0
10v

0
0

V d v mt trt (Sweept Extrusion)

0.5

0.5

-0.5

-0.5

-1
1

-1
1
10

10

-1

6
4

-2

4
-2

-1

6
2

2
-3

Hnh 7.14 Hnh thnh mt trt

Hnh vung xc nh bi 4 nh:


P1[0 -10], P2[0-1-1]
P3[01 -1], P4[01 1]
ng cong trt:
0 1 1
P1
0 1 1
P2
P ( u ) = = 0 1 1
P3
1
0 1
P 4 0 1 1

1
1

1
1

0
1

0
1
T (v ) =
0
0

10v cos( v ) 1

0
0
1
0

0
0

x= 10vy= cos(Pv) 1
Quay 1 gc khi trt:

119

Chng 8: nh sng
sin( )
cos( )

cos( )
sin( )
0
0

10
v
cos(

v) 1

0 0
0 0

1 0

0 1

7.2.3.4. Mt ni suy trn bn ng bin(Boolean sum surface


Mt c xy dng trn 4 im v cc ng cong bin, S(u,v) mt ni suy trn 4 ng
bin.

Hnh 7.15 M hnh mt cong Boolean Sum


S(u, v) = S1(u, v) + S2(u, v) - P(u,v)
Vi:
P(u,v) = (1-u)(1-v)P00 + (1-u)vP01 + u(1-v)P10 + uvP11
S1(u,v) = va0(u) + (1-v)a2(u)
S2(u,v) = ua1(v) + (1-u)a3(v);
P l cc nh ca mnh 4
ai(u) l cc phng trnh ng bin
V d v mt Boolean Sum:
Vi u = 0
S(0,v) = S1(0,v) + S2(0,v) - P(0, v)
= v a0(0) + (1 - v)a2(0) + 0a1(v)+ 1 a3(v) - (1 - v)P00 - v P01
= v P01 + (1 - v)P00 + a3(v) -(1 - v)P00 - v P01
= a3(v)
7.2.4. Mt t cc ng cong

7.2.4.1. Mt cong bc ba Hermite


Mt cong tham bin c to bi b mt qua ti 4 im d liu ti 4 gc v cc ng
cong c phng trnh bc ba qua chng, nh vy 16 vector iu kin hay tng ng vi
48 gi tr i s cn thit xc nh cc h s phng trnh.
Khi nhng h s l 4 im d liu gc v 8 vector tip tuyn ti cc im theo
cc hng u,v tng ng cng 4 vector xon th mt cong to thnh l mt cong Hermite.
Phng trnh c dng:

120

Chng 8: nh sng
3

Q(u , v ) = Cij u i v j

0 u, v 1

i =0 j =0

Q(u, v) = [U ][C ][V]T 0 u, v 1


Vi: u = [ u3u2u1] ,v = [v3 v2 v 1]

V ma trn h s [C] l:
C 00
C
[C ] = 10
C 20

C 30

C 01

C 02

C11
C 21

C12
C 22

C 31

C32

C 03
C13
C 23

C 33

Cui cng ta thu c cc h s theo phng trnh mi c dng:


Q(u, v) = [U][MH] [B] [MH]T [V]T u,v [0,1]
1
2 2 1
3 3 2 1

[M H ] =
0
0
1
0

0
0
0
1

V
V B l ma trn iu kin bin:

P00

[B] = PP10
u 00

Pu10

P01

Pv 00

P11 Pv10
Pu 01 Puv 00
Pu11 Puv10

Pv 01

Pv11
Puv 01

Puv11

Hay vi dng thc rt gn ca ma trn [B] theo cc ma trn iu kin bin tng
ng:
[B] ma trn cc gi t tham s
[Pu], [Pv] cc vector tip tuyn theo u,v tng ng.
[Puv] ma trn xon trn u,v

[B] = [P] [Pv ]


[Pu ] [Puv ]

121

Chng 8: nh sng

Hnh 7.16 Mt cong Hermite v cc im d liu

Cc vector tip tuyn v vector xon ca b mt cong c biu din qua phng
trnh sau:
Qu(u,v) = [U] [MH]u [B] [MH]T [V]T
Qv(u,v) = [U] [MH]v [B] [MH]T [V]T
Quv(u,v) = [U] [MH]uv [B] [MH]T [V]T
Vi:

[M H ]U & [M H ]V

0
0
0
0
6 6 3
3

=
6 6 4 2

0
1
0
0

7.2.4.2. Mt cong Bezier


Mnh-patch Bzier

Hnh 7.17 Mt cong Bezier

Mnh Bezier c hnh thnh trn php trt ca ng cong Bezier.Vic xy dng
nn mnh Bezier di cc im kim sot, to nn a din kim sot.

{P

i, j

: 0 i n,0 j m}

Phng trnh tng qut ca mt cong tham bin Bezier c dng:


122

Chng 8: nh sng
m

P (u , v) = Pi , j Bi ,n (u ).B j ,m (v) trong u,v [0, 1]


j =0 i =0

Mnh Bezier bc ba:


Mt cong Bezier bc ba l mt ph bin nht trong CG, v i n gin ca n. N
hnh thnh trn 4x4 im kim sot, cng thc c dng:
3

Q (u, v ) = Bn ,i (u )Bm , j (v )Pij


i =0 j =0

a thc Bernstein c dng:


B0(t) = (1-t)3
B1(t) = 3t (1-t)2
B2(t) = 3t2 (1-t)
B3(t) = t3

Tnh cht ca mnh Bzier


Tnh bao li: Mt cong Bezier lun nm trong a din li ca cc im kim sot
Mt cong i qua 4 im cn P00, P01,P10,P11 hay chnh xc
Q(0,0)=P00, Q(0,1)=P01, Q(1,0)=P10, Q(1,1)=P11
ng cong bin ca Mt Bezier l ng cong Bezier
Mt cong l lin tc v o hm ring cc bc tn ti ca n cng lin tc.
o hm ring ca mt cong c dng:

Q(u , v ) = [U ] [N ] [B ] [M ] [V ]
T

Q(0,0) / u = 3( P01 P00 )


Q(0,0) / v = 3( P01 P00 )
Q(0,1) / u = 3( P03 P02 )
Q(1,0) / v = 3( P13 P03 )

Q(u,v) l mi im nm trn mt cong v

[V ] = [v 3
[U ] = [u 3

]
1]

v2

v 1

u2

1 3 3
3 6 3
[N] v [M] c biu din =
3 3
0

0
0
1

1
0
0

Ni 2 ming Bezier Bc 3(Bi-cubic)

123

Chng 8: nh sng

Q(u , v ) = u 3

u2

1 3 3
3 6 3
u 1
3 3
0

0
0
1

1 B00
0 B10
0 B20

0 B30

B01

B02

B11

B12

B21
B31

B22
B32

B03 1 3 3 1 v 3

B13 0 3 6 3 v 2

B23 0 0
3 3 v


B33 0 0
0
1 1

Hnh 7.18 Ni hai mnh Bezier bc ba

Hai mnh Q v R cng chung tham bin ti bin (Gi s u), hai ng cong bin
phi bng nhau Q(1,v)=R(0,v). H s ca ct cui ma trn Q = ct u ma trn R, tng
t: nu theo hng ca v th hng s thay ct ma trn.
Bc ca mt cong theo mi hng ca tham bin bng s im kim sot tr 1.Tnh
lin tc hay o hm ca mt theo mi tham bin bng s im kim sot tr 2. Hnh dng
ca mt bin i theo cc cnh ca a gic kim sot. Mt li ch i qua cc im gc
cnh ca a gic kim sot, n ch nm trong phn gii hn bi li ca a gic li kim
sot v khng thay i di tc ng ca cc php bin i affine. Mi ng bin ca
mt Bezier l mt ng cong Bezier vi mt cong bc ba Bezier cc ng cong bin
lun m bo l cc ng Bezier bc 3. Nh vy li a gic cho b mt s l 4 x 4.

7.2.4.3. Mt cong B-Spline


Phng trnh mt B-spline:
n

Q (u, w) = N i ,k (u ). M j ,h ( w).Pi , j
i =1 j =1

Pij l im kim sot

(u xi ) N i ,k 1 (u ) ( xi + k u ).N i +1,k 1 (u )
1 xi u < xi +1
Ni, k (u ) =
+
N i ,k (u ) =

x
x
xi + k xi +1
0
otherwise
i
+
k

1
i

xi = 0(1 i k )

xi = i k (k + 1 i n)
x = n k + 1(n + 1 i n + k )
i
124

Chng 8: nh sng
N v M l a thc B-spline
Vi cc mt cong m mt cong ph thuc vo cc nt vector

c im ca mt cong B-Spline
S bc caonht ca b mt theo mi hng th bng s im kim sot -1 theo hng .
o hm ring ca phng trnh b mt theo mi tham bin c bc bng s im kim
sot theo tham bin tr 2.
B mt B-spline th khng chu nh hng ca php bin i anfine. B mt s thay i
nu ta thay i a gic kim sot.
nh hng ca mt im kim sot n c gii hn bi + - k/2 h/2 khong i vi mi
tham s.
Nu s nh ca a gic kim sot bng s bc theo mi tham bin v khng c im kp
no th mt B-spline s chuyn thnh mt Bezier.
Nu cc a gic kim sot c dng tam gic th li a gic kim sot s c hnh dng gn
ging vi b mt cong.
Mi mt B-Spline lun nm trong bao li ca a gic kim sot .
Mi mt B-Spline c dng iu lun bm theo hnh dng ca a gic kim sot.

Tm tt:
Vic to ra cc ng cong theo mun cng l vn thng gp khi lm vic vi
ho my tnh. Chng ta kho st cch tip cn v ng cong bng Hermite, Bezier v Bspline. Cc 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 ca ng
cong t yu cu, nhng khi hiu chnh phn cn li s mt i phn t yu cu, hay
vic ni trn cc ng cong sn c. khc phc cc vn ny ta c cch tip cn ci
tin v ng cong bng B-spline.
Tng t nh vy vic biu din cc mt cong trong ho my tnh cng l mt
vn cn thit m t i tng trong th gii thc. Chng ta kho st v cc phng
php biu din mt cong thng qua 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: mt k, mt trn xoay, mt trt v mt Boolean Sum.
Trn c s cc ng cong bng Hermite, Bezier v B-spline chng ta cng xy
dng c cc mt Hermite, Bezier v B-spline.

Bi tp:
1.

Cho 4 im P0(1,3,6), P1(6,0,3), P2(-1,3,-2) v P3(5,4,1) dng 4 im trn lm


im kim sot a ra phng trnh ca ng cong Bezier.
125

Chng 8: nh sng

2.

3.

4.

Cho hai im P1[-2 4 5] v P2[0 1 -6] nm trong mt phng xoy. Quay ng


thng quanh trc ox s c mt mt nn. Xc nh im ca mt ti t=0.8,
=/4.
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 m t hnh dng ng cong v cho php ngi dng hiu
chnh mt s im kim sot hiu chnh ng cong theo mun.
Vit phng trnh v ng Spline.

126

Chng 8: nh sng

CHNG 8: NH SNG
8.1. GII THIU
8.1.1. Mc tiu chnh trong ha my tnh

C hai mc tiu chnh trong ha my tnh m cc nh ho lun mun chinh phc


l thi gian thc v tnh trc quan.
Thi gian thc:
Thi gian thc qui nh mc nh hng thng xuyn n vic hnh nh c nm
trong mc dung sai cho php hay khng. Tt nhin, mc nh hng ca thi gian
mi mt ng dng l khc nhau, nh: thi gian i vi mt ngi lm cng tc kim nh
m code c biu din bng thi gian vo khong mt vi pht; trong khi , trong mi
trng ho 3D th li qui nh thi gian thc cp nht trong khi lp thit k.
Tnh trc quan:
K thut vin thit k ho 3D lun phi lm vic vi mt lot ng bin hin
th phi cnh m anh ta ang to dng. C th hn, ly v d: nh ho lm vic trong
mt cng ty sn xut phim, anh ta phi a ra bn biu din phi cnh xc thc nht cho
hot cnh m anh ta thit k.
Trong mt thi gian di hai mc tiu ny lun l ci ch m chng ta mun t ti.
Tuy nhin, cng s pht trin ca phn cng v cc cng ngh khoa hc, cc sn phm
ho dn t ti ngng ca thi gian thc. Nu ni theo lnh vc ca cng ngh phn
cng, trong vng su thng phn cng ca ho pht trin vi tc gp i. Cc
hnh m t di y c minh ho t tr chi Doom3.

Hnh 8.1 hnh minh ho t tr chi Doom3


Vn ch yu y l vic tp trung tn dng c nh sng cc b v to bng.
Ngoi ra vic khuch tn bng ca hnh nh c minh ho nh khung hnh cornell pha
di y, l iu khng th thc hin c vi h thng phn cng n l hin c.
8.1.2. Cc gii php trong ha my tnh

Nhng iu m chng ta mun thc hin li khng nh trong thc t pht tn nh sng
c gy bi s tng tc ca cc b mt, bng ca nh sng c gy nn bi nhiu
ngun sng, ri vic hiu chnh s phn chiu nh sng... Thut ton chiu sng ton cc
(the Global illumination Algorithm) tho mn c cc iu kin em li nhng bc
127

Chng 8: nh sng

nh c trung thc cao. Chng ny i su vo nghin cu chi tit ba gii php ca


thut ton chiu sng ton cc:
Raytracing
Radiosity
Photon mapping

8.1.2.1. Raytracing - dng th tia


V c bn ca Raytracing hot ng da trn phng php dng cc tia th qua cc
im nh trong vng thp ca mn hnh v khung nhn c tc ng n. Gi tr nh
sng ca mi im nh ph thuc vo vect php tuyn chun ho v v tr im giao
nhau ca mi i tng cng nh v tr ca nh sng.
C bn phng php Raytracing khng hon ton l phng php chiu sng ton
cc bi phng thc ca nh sng ch l cc b. N hot ng da trn vic a nhiu
ngun sng vo vic to bng, kt hp vi a dng nh sng phn chiu, khc x, t
c th cho ta nhng bc nh v cng sc nt m c th nh la th gic ca nhng
ngi xem d tnh. Mt du hiu d nhn bit phng php raytracing l hu ht cc
bc nh u trng rt tht, nh : bng cng v khung cnh c hp thnh bi nhiu
yu t lung linh. Do vy phng php Ratracing c th m rng thnh phng php chiu
sng ton cc y , nh path tracing - ln theo du vt ng dn.

Hnh 8.2 Raytraced Cornell box


8.1.2.2. Radiosity
Radiosity v phng php th ngc vi raytracing, v n ch gii quyt cc phn v
khuch tn trong thut b tr nh sng.
Thut gii ca radiosity chnh l vic chia nh tt c b mt ca vt thnh mt s
mnh hnh ch nht. Gi tr nh sng ca mt mnh s l tng cc gi tr nh sng do n
pht ra cng vi tt cc cc nh sng n nhn c mt cch trc tip hoc gin tip t
cc mnh (patch) khc. V qu trnh ny c p dng lp i lp li cho tt c cc mnh,
cui cng n ng qui v gii php chiu sng ton cc.
V phng php ny ch nghin cu v gii php khuch tn nh sng, v gii thut
ny v mt tng quan vn c m t mt cch c lp. iu c ngha l gii thut
ny c th c x l trc, sau n c hin th di mi gc . Tt nhin, nu bt

128

Chng 8: nh sng

k mt nh sng hay i tng no trong tng th b dch chuyn th gii thut ny s phi
tnh ton li.
Vi nhng nguyn nhn c trnh by trn, Radiosity khng hon ton l gii
thut chiu sng ton cc. Mt gii php cha hon ton chnh xc nhng vn c th ng
tin cy, nu n chun theo k thut tin x l ca radiosity vi vic thc hin mt
raytracing trong sut qu trnh t trt (render).

Hnh 8.3 Phng php radiosity


8.1.2.3. Photon Mapping
Photon mapping l thuyt minh v chiu sng ton cc gn y nht. Phng php ny
gii quyt c phn vic ca tn x nh sng v cc vn ca phn chiu nh sng. Tuy
nhin, x l raytracing ln th hai ph thuc hon ton vo gii php bt im phn chiu.
Khi nim ca gii php ny kh n gin: mi nh sng pht ra x ht photon. Khi
cc ht ny gp phi mt vt g th v tr v gi tr ca nh sng ca chng s c lu
li trong mt cu trc d liu thng minh. Da vo c s d liu trn cng vi k thut
render, t cc ht ny ta s ln ngc li du vt nh sng trong th gii thc th nh
gi li cng nh sng ti tng im xc nh trong khong ang xt.

Hnh 8.4 nh x photon

8.2. CC K THUT CHIU SNG TRONG HA MY TNH


8.2.1. nh gi v cng nh sng

Khi
nim

nh ngha

P l im m ta tnh ton cc gi tr mu sc
129

Chng 8: nh sng

N l vect php tuyn chun ho ca b mt (vect trc chun) ti im P

Q: v tr ca nh sng

L l vcto nh sng t im Q ti P. Do vy gi tr ca L s c tnh nh


sau:
L=P - Q

V l vect quan st.

R l gi tr phn chiu xung quanh V, n c tnh ton nh sau:


R = N V * (( N * V ) * 2)

Trong thi gian trc, khi tc ca my tnh cha nhanh c nh ngy


nay, tnh c gi tr R i hi chi ph nhiu v thi gian v tin bc nn
ngi ta dng mt gi tr xp x thay th l H:
H=

(L + V )
2

8.2.2. Cng nh sng

Trong nghin cu, thit k cng nh sng c hai phng php:


Phng php th nht c i din bng mt b 3 vect n, mi gi tr c gii
hn t 0-1. Trong phng php ny, cng lc 3 vect c dng xc nh tt c cc
thuc tnh mu ca vt.
Phng php th hai, mi thuc tnh nh sng s c biu din bi mt b 3 vect.
Do vy mi mt gi tr nh sng s bao gm mt gi tr mu bao quanh, mt gi tr mu
khuch tn ...
Phng php th nht th m t tht hn, trong khi phng php th hai li t hiu
qu cao trong vic to hiu ng ngh thut. Hin nay th xu hng chung khng cn qu
coi trng vic m t chnh xc s vt hin tng.
Hm phn phi phn x hai chiu BRDF
Nu nhn t cnh ca vt, nh sng nm ri rc ti tng im n l trn khp b
mt vi cng sng s thay i lin tc qua cc gc.

Hnh 8.5 BRDF


Vic c gng a mt m hnh nh sng v mt mu chnh l hm phn phi h s
phn x hai chiu (BRDF). Chc nng ca BRDF c nh ngha nh sau :
130

Chng 8: nh sng
I , r ( , r , r , i , i )
r
p " ( , r , r , i , i ) =
r
I ,r ( , i , i ) cos( i d i )
r

Cc thut ng c nh ngha nh sau :

Khi nim nh ngha


Ir

Cng phn chiu ca nh sng hng ra

Ii

Cng phn chiu ca nh sng hng vo

Bc sng

H s Quang Ph ca tia phn x

(r,r)

hng tia i ra

(i,i)

Hng tia i vo

BRDF c nh ngha l t l ca cng nh sng i ra theo mt hng c bit


v cng lung sng i vo c nh du bng im P.
Theo cng thc trn th n cha hon ton hu ch cho nhng cng vic mang tnh
thc hnh cao. Do vy cc nh nghin cu b nhiu cng sc vo vic nghin cu tm
ra nhng m t, ng dng mang tnh thc tin cao hn ca BRDF.
Mu sc truyn thng ca mi vt cht ti im P s c chia ra thnh 3 yu t
ring bit: Bao quanh (ambient), phn chiu (specular) v khuch tn (diffuse).
8.2.3. Nhng thuc tnh bao quanh ca vt cht

Thuc tnh bao quanh khng phi l mt thuc tnh reallife thc s, nhng n thng
c ng dng cao trong ngh thut v vic g li (debug). Mu bao quanh c th c
m t bng mu ng nht ca chng, m khng thay i cng trn ton b b mt.
V th gi tr nh sng ca mt i tng bao quanh ti mt b mt c xy dng
trong on gi m sau:
Ambient Color Calculation
Surface S = Surface that P lies on;
Color C = S.Material.Ambient;
return C;

V chng ta c th nhn thy rng, nh sng ton cc l tng th ca nhng tc ng


t nhin ca s chiu sng v cc iu kin ca b mt. V l mt nh sng lin tc.

Hnh 8.6 hnh cu Raytraced ch vi thnh phn bao quanh.


131

Chng 8: nh sng
8.2.4. Thuc tnh khuch tn ca vt cht

Mu khuch tn l s tri ra nh nhau theo mi phng hng, v v th ch ph thuc


trn vect nh sng u vo L, v vect php tuyn trc chun N. Hnh v sau cho thy
tng :

Hnh 8.7 M t nh sng khuch tn


M hnh Phong sau khi thc hin thnh phn phn chiu:
Specular Color Calculation
ReflectionVector R
IntersectionNormal N
IntersectionPoint P
Surface S = Surface P lies on
float glossiness = S.material.glossiness
float angle = R.dot(N)
float intensity = Light.Color * S.material.specular
return intensity * pow(angle,glossiness)

Hnh 8.8 hnh cu Raytraced ch vi thnh phn phn chiu


M Hnh Phong:
a s vt th khng ch c m t n thun bng mi thuc tnh phn x hay
khuch tn, m n l s kt hp ca c hai yu t ny thm ch l c cc thuc tnh bao
quanh nu cn.
M hnh Phong c nh ngha trong BRDF nh sau:

Khi nim

nh ngha

Diffuse

Phn nh nng lng phn chiu

Specular

Phn nh ca nng lng khuych tn phn chiu

Gc gia hng tia ti R v hng nhn V


132

Chng 8: nh sng

Hnh 8.9 Phn phi ca Phong.


a s vic m rng thc thi u a ti:

on m rt gn:
Phong Calculation
return
AmbientColorCalculation()+DiffuseColorCalculation()+SpecularColorCalculation();

Lu : nu ta dng mu sc theo hng trc quan ho th s cn dng n phng


php chng cht mu.

Hnh 8.10 Hnh cu Raytraced vi nh sng Phong


8.2.5. S tng tc b mt/nh sng

Mi b mt tng tc nh sng theo nhng cch khc nhau tu theo thuc tnh ring ca
n.

Absorbance
Trong th gii tht mt b mt lun thu ht mt vi lung nh sng khc nhau no
. iu l gii cho s tn sc nhit. V a s nhng thuc tnh ny u b b qua khi
render. i khi qu trnh render cng phi s dng mt s vt thay th ngu nhin (fake)
trnh cc vng quy v hn.

Reflectance
Mt b mt phn chiu nh sng da trn cc yu t nh: b mt bnh thng ca
vt, hng nhn, v gc ti ca nh sng. Tham s h s phn x chnh l gi tr cng
nh sng trong khu vc xem xt c m t trn.
8.2.6. S khc x v s truyn sng

Bt k mt vt th no vi mt trong sut nht nh th u truyn sng. l hin


tng nh sng i qua cc im cong P, tun theo lut Snell. Hin tng ny d thy nht
khi ta quan st mt cc nc, ni m cc i tng mt mt khc hay di b mt
133

Chng 8: nh sng

quan st c v c chuyn v tr. V th nu mt tia ti trong mi trng vt cht m1 (lc


ny khng kh v chn khng u c coi l vt cht) vi h s khc x n1 mt gc 1,
n mi trng vt cht m2 c h s khc x n2; th lut Snell nh ngha l:

y c gi l phng trnh khc x ca tia T.

R l tia ti ca nh sng.
Bin gii gia hai mi trng vt cht c gi l giao din.

8.3. CC CNG NGH


8.3.1. Raytracing

8.3.1.1. Gii thiu


Raytracing bt u c s dng trong ha my tnh t khong 1980 nh l mt s th
nghim sm nht trong vic gii quyt vn chiu sng tng th. Sau c v s ci
tin c a ra, nhng chng ta ch din t mt tng c bn v nhng phn lin quan.
Phn ny c nhiu u im hn v cng cha mt vi k thut mi hn, tuy khng ci
thin cht lng hnh nh nhng li tng tc trong vic x l biu din.

8.3.1.2. Thut ton


tng c bn trong raytracing l ln theo du vt ca cc phn t nh sng ngc chiu
vi ngun pht sng, v d t mt n khung cnh. Khi mt tia sng tip xc vi i
tng trong khung cnh c nh sng cng mnh ti im giao nhau c tnh ton
cho phng i din vi tia sng. Cng ny chnh l mu ca tia sng.
tnh ton cng , chng ta s dng cng thc sau:

I = Ilocal + kr*Ireflected + kt*Itransmitted


Trong :
Ilocal: nh sng trc tip
Kr :

nhn t ph thuc vt cht i din s phn chiu

Ireflected: cng nh sng n t ngun phn chiu


K t:

nhn t ph thuc vt cht i din chn sng

Itransmitted: cng nh sng truyn xuyn qua i tng


Ilocal:(nh sng trc tip) c th c tnh ton s dng bt k s phn chiu m hnh
cc b no, nhng trong thc t iu ny a s lun lun l m hnh Phong c m t
trong phn trc ca ti liu. M hnh thng c tng cng v c gi l bng nhy
sng(Shadow feelers). Bng nhy sng l tia sng c nm xuyn qua khung cnh t
im giao nhau n mi ngun sng xc nh nu c tm nhn (line of sight) hoc nu
nh sng b chn li bi mt vi i tng khc. Nu mt ngun sng b chn li th n b
134

Chng 8: nh sng

b qua trong m hnh cc b. M hnh Phong c th c tnh ton t im giao nhau v


ti im b mt thng thng.
C Ireflectted v Itransmitted u c xc nh bng vic bn mt tia sng mi xuyn qua
khung cnh cng ging nh tia sng c bn xuyn qua im nh ca hnh nh. im
bt u ca chui tia sng ny l im giao nhau, c phng l phng phn chiu ca
Ireflected v hng khc x ca Itransmitted. Vic tnh ton nhng phng hng ny c biu
din (covered) bn di:
Phng hng c tnh ton nh sau:

R = 2(N*L)N - L
Trong :

: php tuyn trc chun ti im giao nhau

L: phng i din vi tia sng n


iu khin vic truyn tia sng (khc x):

T = (n1/n2)L - (cos() + (n1/n2)(L*N))N


Trong :

n1:

ch s khc x ca vt cht n

n2:

ch s khc x ca vt cht i

c xc nh bng cng thc sau:

(sin /sin ) = (n1/n2) v l gc gia L v N


Mt khi bn mt tia sng mi ti mi im giao nhau ( tnh ton Ireflected v
Itransmitted) raytracing s dng mt hm quy. iu kin gii hn cho quy c th hoc
l nh trc chiu su php quy cc i c th t n hoc khi tia sng khng chm
ti bt k i tng no trong khung cnh trong trng hp no c cp pht mt
mu nn.
R rng su hn m ta cho php php quy s lm thi gian dch lu hn nhng
chiu su php quy cc tiu c th lm cho mt phn nht nh ca hnh nh b mt.
Vic tm chnh xc chiu su ca php quy cc i s dng l mt vn ca vic
vn v kim tra cho n khi kt qu hnh nh nhn c tt.
Mt v d lm cch no xc nh trc chiu su php quy c th nh hng
n hnh nh cui cng c th c nhn thy trong nh di. Hnh nh u tin hin th
mt cnh tng quan vi su php quy l 5. Trong nhng nh tip theo, ta c ci nhn
cn cnh mt phn bn trong th v - tc l u c 2 hnh cu tng tc vi nhau. nh 2
cho thy chiu su php quy 0, v d ch m hnh phn x cc b (Phong trong trng
hp ny) c s dng. nh 3 biu din chiu su php quy 1. y ta c th nhn
thy 2 hnh cu phn chiu ln nhau mt ln. Hnh cu cc t (leftmost) cng sng hn khi
mu nn ca cnh c cho php ny ra khi n. nh cn li cho thy chiu su php
quy 2, 3 v 4. Ch thng s tng ng ca hnh cu phn chiu ln nhau v tht kh
nhn ra s khc nhau gia 2 ln cui.

135

Chng 8: nh sng

Hnh 8.11 Hnh cc qu cu phn chiu


Raytracing c th c nhn nh mt cy- x l to thnh t mi va chm tia lm
pht sinh ra nhiu hn 2 tia: 1 phng phn chiu v 1 phng khc x. Nhng tia ny
c gi thit rt mng v khng dn tri. Kt qu ny trong mt s vn c m t
pha di nhng cng c ngha 1 raytracer c th phi nhanh mt khi s im giao
nhau trn 1 pixel c hn bi 2n vi n l chiu su ca php quy. C th thy chiu su
ca php quy khng phi rt cao- thng thng gia 4 v 8 l . 256 im giao nhau
bi vy l cc i v trong trng hp nhng i tng m c ch c 1 tia trn 1 im
giao nhau th sinh ra 1 khi lng ln s giao im trn 1 pixel ti 8. iu ny c ngha l
nhng cnh c phc tp va phi c th biu din li trong 10 phn giy (tens of
second) trn phn cng hin ti v thm ch khung hnh thi gian thc (realtime
framerates) l c th nu thut gii c ti u ha.
Ch : c 3 thnh phn trong cng thc tnh cng c th c tnh ton t im
giao nhau v vect php tuyn trc chun trn im .
M gi cho ton b thut gii nh sau:
Color traceRay(Vector start, Vector direction, int depth){
if (depth < 0) return BLACK;
Object hitObject;
Vector hitPoint;
if (rayHit(start, direction, &hitObject, &hitPoint)) {
Color result;
result = calculateLocalContribution(hitObject, hitPoint);
result += calculateReflection(hitObject, hitPoint,
traceRay(hitPoint, reflectedDirection, depth - 1));
result += calculateRefraction(hitObject, hitPoint,
traceRay(hitPoint, refractedDirection, depth - 1));
return result;
}
else
return BACKGROUND_COLOR;
}
Image raytraceImage(Vector eye) {

136

Chng 8: nh sng
Image image;
for(each scanline Y) {
for(each pixel X) {
image[X][Y] = traceRay(eye,directionFromEyeToXY, RECURSION_DEPTH);
}
}
return image;
}

8.3.1.3. Mu gc (Primitives)
Cnh raytraced phi bao gm nhng i tng (c gi l nhng mu gc) m c th
tnh ton c giao im vi mt tia v vect php tuyn trc chun ti im . Mt
khc chng yu cu mt raytracer v bi vy n d dng c thm vo nhng mu gcch mt trong s phi vit hm thc hin nhim v ny.

8.3.1.4. Mu gc chnh xc (Mathematical primitives)


Nhng i tng nh nhng hnh cu v mt phng th d dng iu khin trong mt
raytracer t tia sng s giao nhau v thng thng rt d tnh ton. Nhng iu ny
cng c th c tnh ton trong mt khong thi gian khng thay i v vi chnh xc
ty (y khng phi l trng hp cho mu gc c m t bn di). y khng i
vo chi tit v tia sng tnh ton ct ngang (intersect), chng c th c tm thy trong
[6] v vic thc hin c th c tm thy trong code.

8.3.1.5. Li a gic (Polygon meshes)


Li a gic rt hu ch m hnh ha nhng i tng ty chn v rt thch hp h
tr nh vic v li mu gc trong mt tia vch nu mun v li khung cnh hin th i
tng t th gii thc nh l t, ci bn, my bay hay ngi nh - tt c nhng i
tng kh hoc khng th m hnh ha thc s m ch s dng mt thut ton i tng
nh l hnh cu, mt phng Trong trng hp y ch lm vic vi nhng li a gic
ni m tt c a gic u l tam gic. y l cch truyn thng biu din mt li a
gic v nh vy cng khng b qu hn ch.
Vi bt k mu gc no trong mt tia vch tt c chng ta cn c th v li n l mt
cch tnh ton im giao nhau vi mt tia sng cho v mt b mt bnh thng m
c im bn trong. Vi nhng i tng ton hc c miu t trn ta c th nhanh
chng tnh ton chnh xc. Vi mt li a gic c phn kh hn v ta s hng vo 2
nhim v ln lt bn di.
Vn tnh ton giao im gia mt li a gic v mt tia sng c th b ph v
trong vic tnh ton giao im gia tia sng v tt c cc hnh tam gic m to ra li. Ci
gn nht ca nhng iu ny l rt nhiu s giao nhau l mt ci m chng ta s dng
im giao nhau gia li v tia sng.
Nh vy chng ta gp phi thch thc vi vic tnh ton giao im gia mt tam
gic v mt tia sng. Nhng c trng c lm trc bi vic tnh ton giao im gia
tia sng v mt phng m c tam gic . Mt im nh vy s lun tn ti tr phi tia
sng song song tuyt i vi mt phng tam gic. Nu trng hp chng ta c th quyt
nh ngay tam gic khng c ct ngang bi tia sng. Nu tia sng ct mt phng
137

Chng 8: nh sng

tam gic th chng ta tip tc kim tra nu im nm trong hnh tam gic. C rt nhiu
cch lm vic ny v gii thut m chng ta chn s dng chi tit v c bn n to
mt na mt phng t mi hnh tam gic 3 on, tt c hng sao cho nhng im trc
giao (normal) ca chng hoc ch i vo trong tam gic hoc ra khi t n. Mt im
trong vn l bn trong tam gic nu n hoc nm gia mt phng hoc ng sau tt c 3
na mt phng (ph thuc vo cch chn phng hng ca na mt phng).
By gi chng ta tr li vi nhim v tnh ton trc giao nh l mt giao im.
tng hin nhin v trc ht l c th n gin tr li trc giao ca mt phng c tam
gic nm trn . Mt hng khc c th phn i rng iu ny s thc s l ng trc
giao ca hu ht nhng im bn trong hnh tam gic . Tuy nhin, li tam gic cng
thng c s dng lm mm hn m hnh, un cong b mt v sau lm nhn b
ngoi ca mt c nhn thy ca li tam gic. Nu s dng nhng mt phng tam gic
trc giao nh l giao ct thng thng th kt qu ta c gia cc cnh vi cc hnh tam
gic n l.
Gii php ph bin nht l tnh ton ci gi l nh trc giao cho li. iu ny c
ngha l mi tam gic s c 2 trc giao lin quan n n 1 cho mi nh trong tam gic
v nhng hnh tam gic s chia s 1 nh cng s chia s nhng nh trc giao tng
ng. nh trc giao c tnh ton bng cch ly trung bnh ca mt phng trc giao cho
nhng tam gic m c nh c s dng. Hiu ng ny c ngha l nh t trn 1
cnh (mp) gia 2 hnh tam gic m 1 gc nht nh i vi mi gc khc s ch trong 1
phng c phn gia mt phng trc giao ca tam gic v s lm mm ngoi nh sng
mp. Trc giao cho 1 im cho bn trong hnh tam gic c tnh ton bi php ni
suy tuyn tnh gia 3 nh trc giao (xem thm chi tit cho gii thut ny trong code).

Hnh 8.12 li a gic


TNG KT: im giao nhau c tnh ton bi vic kim tra mi tam gic trong
li cho s giao nhau vi tia sng v sau s dng giao im gn nht. Trc giao cho
mi giao im c tnh ton bi php ni suy gia 3 nh trc giao ca hnh tam gic.
8.3.2. Radiosity

8.3.2.1. Gii thiu


Phng php Radiosity l mt phn gii php lm sng t vn ton cu, tp trung vo
gii quyt s phn x trc tip(interreflection) gia nhng b mt khuch tn bn trong
mt mi trng ng. Phng php khng gi nhng vn vi khuch tn phn chiu,
phn chiu khuch tn hoc phn chiu phn x phn chiu trc tip.
138

Chng 8: nh sng

8.3.2.2. Tng quan v phng php Radiosity (Overview of the radiosity method)
Mt khi nim chnh ca phng php radiosity l nhng ming v (patches), m l
nhng vng hnh ch nht c pht v nhn radiosity ca nhng ming v khc, nh vy
m phng s tng tc nh.
Hnh hc ca mi trng c chia ra thnh nhng ming v. Nhng ming v, m
khng phi l nhng ngun sng, thot tin cho php cng l khng, trong khi nhng
ming v c ngun sng c t mt lng nng lng ban u, ph thuc vo cng
ca ngun sng.
Mc ch l tnh ton tng lng bc x ca mi ming v nhn c t mi trng,
nh y l mt c lng ca cng nh sng phn tn. iu ny c lm lp i lp
li (iteratively), bng cch tnh ton radiosity ti tt c cc ming v cho n lng nng
lng ti a c tch ra di mt ngng nht nh. im tn cng c m bo bi
thc t, mt lng nht nh nng lng ta ra c nhn li th li c ht li to mi
tng tc.
S tng tc bc x gia nhng ming v phi tnh n vi th: khong cch, gc v
din tch ming v, v xa hn na bt k s can thip no vo nhng ming v cng mang
li nhng gii php.
Nhng vn ny c t ra bi Form Factors. Form Factors miu t phn nh ca
s bc x tch khi mt ming v v n bt k mt ming v khc. Hiu c Form
Factors l trung tm hiu v phng php radiosity
Phng php radiosity sn sinh mt gii php nhn c lp, nh tnh ton cng
nhng radiosity th ch nh hng bi cu trc hnh hc v v tr ca ngun sng.
Mt cnh t vic thc thi, ch s mu trn chic hp

Hnh 8.13 phng php radiosity


8.3.2.3. Mt s gi thit v nhng ming v (Some assumptions about Patches)
Nhng ming v l nhng hnh ch nht, c gi thit c cng radiosity trn mi
vng ca chng. ng thi, nhng ming v c gi thit l mt b mt Lambertian
khuch tn hon ho (Lambertian= mt phng hon ho), khng ch c vy cc b mt
pha di (subsurface) ri rc ca nh sng t vo v tr ( khuch tn hon ho = phn
chiu radiosity n ngang bng trong mi phng).
139

Chng 8: nh sng

Nhng ming v c xy dng da trn hnh hc ca khung cnh. S chnh xc


ca gii php (influcenced) nh hng phn ln bi vt cht (granularity) ca ming v,
nhiu ming v mang li (yield) mt gii php tt hn, nhng cng tng thm thi gian
tnh ton.
Gii php cho s chia nh thch ng ca ming v cng tn ti. Nhng gii thut ny
chia nh ming v vo trong nhng ming v nh hn trong mt khu vc m s thay i
quyt nh ca radiosity, v d trong nhng ranh gii bng . Ci ny c so snh l
gii php tt hn vi t cng vic thc hin hn, so snh ti s b tr vt cht ca tt c
khung cnh cao hn. S chia nh s khng c m t y.
S thc thi ca chng ta s dng nhng hnh tam gic nh nhng ming v, d s
nh ngha ca chng l hnh ch nht:

Hnh 8.14 S dng hnh tam gic nh hnh ming v


Radiosity ca mt ming v trong ton b s lng nng lng pht ra t ming v,
m cho bng nhau ca tng s bc x nhn c v bc x pht ra.

Nhn t mu(Form Factors)


Nhn t mu Fij ca 2 vng (ming v) Ai v Aj l phn nh ca s bc x pht ra
khi Ai v t n Aj:

Nhn t mu c tnh ton t s tng tc bc x gia nhng b mt rt nh, mang


li ton b phng trnh:

Mt iu na kh kh tnh ton phn tch cho hnh hc chung, bi vy cch tip


cn khc gii quyt phng trnh trn l cn thit. Mt gii php s s dng mt
hemicube.
S dng hemicube trong xc nh nhn t mu, nhn t mu hemicube l mt hiu
qu nhng gii php ng chng hnh thnh s xc nh nhn t mu.
140

Chng 8: nh sng

S bin h ca hemicube th thy t bn di bc tranh.

Hnh 8.15 Ming v s dng nhn t mu hemicube


Ming v A v B c cng khu vc khi chiu ti bn cu (cng chiu ti khu vc C).
Nguyn do th 2 trn l s hp nht qua mt bn cu. Vic tm vng trn mt hnh
cu l iu kh hn so vi ch n gin l tm vng ca mt hnh t gic, t y l s
dng mt hemicube.
Hemicube c t ng tm ca ming v, hng nh ca hemicube trc giao vi
vc-t trc giao ca ming v, c th nhn bn di.

Hnh 8.16 Hemicube t tm ming v mt th chia nh


Nm mt ca hemicube c chia thnh nhng mnh nh, gii hn pixels. d
tm nhn t mu gia 2 ming v Pi v Pj, trc tin tt c ming v c chiu ln trn
hemicube.

Hnh 8.17 m t d tm nhn t mu trong hemicube


141

Chng 8: nh sng

Sau nhn t mu c tnh ton bng cch cng nhng vng ca tt c cc pixels
ca ming v PJ c chm ti. Nhn t mu Fij th bng vng ny.
Vic chiu cng gii quyt vn vi vic xen vo gia ming v (gi thit s dng
mt b m Z):

Hnh 8.18 tnh ton nhn t mu


Vng ca mi im c gi l nhn t mu Denta c tnh ton theo cch:

Hnh 8.19 tnh nhn t mu Denta


Cho nh ca hemicube:

Cho cc mt bn:

Vic tnh ton nhn t mu c thc hin cho mi ming v ln lt. Ch rng
vic tnh ton nhng nhn t mu ch ph thuc vo hnh hc / nhng ming v, nh vy
thay i trong mu sc ca nh sng ngun v v tr (ti nhng ming v khc) s khng
yu cy 1 s tnh ton mi ca nhng nhn t mu (nhng mt gii php mi ca mt ma
trn radiosity s c tnh ton, xem bn di).
Ghi ch thc hin: mt cch d kim tra tnh ton nhng nhn t mu, m tng
ca tt c nhn t mu ti mt ming v phi cn bng vi :

142

Chng 8: nh sng

8.3.2.4. Thut ton Radiosity (The Radiosity algorithm)


Tm li, radiosity Bi ca ming v Pi l tng ca nhng radiosity pht ra v radiosity nhn
c t nhng ming v khc:

T khi :

cho ta nhng mi quan h radiosity c bn:

M c th c biu th trong mt ma trn sau:

Gii php ca ma trn phi c thc hin cho mi bc sng trong trng hp
RGB ngha l gi tr mu , xanh l cy v xanh lc. Gii php t n c bi vic
gii quyt ma trn lp i lp li cho n khi s bc x ti a lun phin bi 2 ming v
bn di l mt ngng nht nh. T P l t hn mt (m c ngha l ming v ht mt t
bc x), ton b lng bc x ang gim bt lp i lp li, bo m s kt thc vic lp i
lp li.
8.3.3. Photon Mapping

Trong phn ny chng ta s miu t cch tip cn photon mapping. Phng php ny c
vi li th so vi k thut radiosity, trong khi n khng b gim mt cht lng t li gi
(artifacts) v iu khin c khuch tn phn x khuch tn v phn chiu phn x
khuch tn. Hn na photon mapping cung cp mt gii php d dng v tao nh (elegant)
tr li t quang.

8.3.3.1. Gii thut (The Algorithm)


C 2 bc hay s chuyn tip trong gii thut:
Xy dng photon mapping s dng vch du
Ti s dng li nhng photon mapping ny

Bc u tin: vch du Photon (First Pass: The Photon Tracing)


Trong giai on ny, photon c bn ra t ngun sng s dng k thut raytracing
chun. Khi 1 photon chm ti 1 i tng n c th cng c phn chiu, truyn hoc
ht. Vic g s xy ra c quyt nh bi xc sut v tham s ca b mt vt cht. K
143

Chng 8: nh sng

thut c s dng quyt nh ny c gi l Russian Roulette. tng c bn l


khng phi tt c photon u cn phi c cho php tip tc (survice) khi chm 1 vt
cht, mt khi kt qu ny trong 1 s m ca s photon c lu tr, v c l php quy
v hn. Thay vo l phn chiu photon khc, vn chuyn hoc ht. Cch ny theo l
thuyt xc sut th tt c cc photon s dn dn c ht.
Nhng photon c lu gi trong bn photon th ch c lu tr khi chng
c phn chiu. Vic lu gi nhng photon trn s phn x phn chiu khng cho bt k
thng tin hu ch no, trong khi nhng iu c tr li kh tt s dng k thut
raytracing chun. Mt photon c th c lu gi vi ln dc theo ng dn ca n, v
mi ln 1 photon c lu v tr, nng lng photon i vo v iu khin vo c ct
gi. Cu trc d liu cho vic ct gi photon s trng nh sau:
typedef struct Photon {
Vector pos;
Vector power;
Vector dir;
short flag;
};

Jensen gi mt cu trc d liu gn hn ni anh ta ng gi nng lng v


phng hng vo v t byte hn. Trong s thc hin, chng ta c chn tp trung
vo s r rng ca m thay v kch c v tc . Tuy nhin vi 1 s lng rt ln photon
chng ta gp vi vn hiu nng bi vic ti b nh rt nng. Cu trc ca photon s
dng 38 byte ngc li vi 20 bytes m Jensen gi trong ti liu ca anh y. Bin c
c s dng trong KD s thc hin cy.
Chun b Photon mapping cho s chuyn tr li (Preparing the photonmap for the
rendering pass). Trong thi gian tr li, chng ta cn nh v nhng photon ng ti 1
im ty trong khng gian 3D nhiu thi gian, vi cu trc d liu cho php tm nhanh
hn nhng photon lin k, v cng iu khin tt nhng nhng phn phi khng ng
dng. V iu ny, Jensen gi 1 cy kd cn bng. iu ny cho thi gian tm kin tt
hn v cn bng ca cy kd c th thc hin trong thi gian O(nlog(n)) ni m n l 1 s
photon trong photon mapping. S cn bng ca cy kd c thc hin bi vic tm kim
im gia ca trc ln nht v chn nh l mt ng chia (splitplane). M gii xy
dng mt cy kd cn bng:
balance(photons P) {
find the bounding box of P
choose the largest axis A as splitplane
find the median of P in axis A
divide the pointsets into S1 and S2 according to median
balance(S1)
balance(S2)
}

Nh c tm thy trong nhng hnh nh chng ta th cc kiu khc nhau ca


ngun sng, ch vi im ngun sng xuyn qua. Tuy nhin mt c tnh mnh m khc
tm c bi vic s dng photon mapping, c th v c bn d mu no hoc hnh dng
no ca ngun sng m ta mun. T th duy nht cn thay i l phng hng v ngun
144

Chng 8: nh sng

gc thc t ca lightrays. Ch lm sao 2 nh di y s dng nhng m hnh phn


phi khc nhau, v hiu ng c trn kt qu cui cng. u tin mt ci c bn ti
tt c cc phng, ni m ngay lp tc a nhiu phng sng theo hng ca ca phng.
Sau khi photon mapping c lm cho trc quan s dng mt s chiu sng nh gi
nhng s khc nhau ny tr nn thm ch cn sng hn na.

Bc 2: tr li bn photon (Second Pass: Rendering The Photon Map)


By gi vi s xy dng photon mapping v kh nng nhanh chng xem nhng
photon trong , chng ta sn sng bt u tr li khung cnh thc t.

8.3.3.2. nh gi chiu sng (The Radiance Estimate)


Chng ta nhn thy photon mapping nh s trnh by ca dng n. tnh ton s chiu
sng cho mt im x cho trong khung cnh, ta cn s ton vn thng tin. lm iu
ny ta s dng biu thc cho s phn chiu:

Lr l s phn chiu ti x trong phng w. x l hnh cu ca phng n, fr l


BRDF. Ta c th xp x c dng n s dng photon mapping ca ta bng cch nh v
n photon gn nht n x. Khi gi thit rng mi photon p ct ngang b mt ti x. p l
nng lng ca photon p. Chng ta c nh gi sau:

Trong thc t ta nh ngha 1 bn knh tm kim r v nhn vo khu ln cn vng


quanh x. Trong khu ln cn ny ta s dng n photon gn nht nh gi s chiu sng.
Khi gi thit rng b mt xung quanh x l mt phng cc b ta c th tnh ton din tch
ny da trn vic chiu hnh cu ln trn b mt v s dng vng ca nhng vng trn kt
qu nh gi vng:

Nh vy vic c s chiu sng sau s nh gi xp x:

nh gi ny da trn nhiu gi thit v s chnh xc ph thuc nhiu vo s nhng


photon s dng v bn knh ca s tm kim. Hn na c th bao gm nhng photon sai
trong gc ca mt hp cho v d. S chnh xc c th gim bt bi vic s dng mt a
thay v mt hnh cu. T vic s dng mt hnh cu s hin nhin c li th tnh ton hn
(v d tnh ton vic chiu mt vng v khong cch d kin l mt hm d) ta khng
theo ui cch tip cn ny trong vic thc hin v nhng hin tng gi cnh nht nh
bi vy c th cn phi ch .

145

Chng 8: nh sng

8.3.3.3. Lc (Filtering)
xc tin vic gim bt nhng photon r r vo trong nhng vng v s chiu sng
blurry, vic lc c th s dng gim bt nhng hin tng gi. tng ca vic lc l
lm nhng photon ti gn im x quan trng hn hn l ra khi. Ta th lc hnh nn v
lc gaussian lm gim nhiu v km chnh xc. Nhng t chng ta b gii hn
kim tra trn nhng t quang m khng c ch .
a. nh v photon(Locating the Photons )

Vic nh v nhng photon c lm bng cch tm xuyn qua cy KD v nh v n


im gn nht ti x. Ta thc hin mt gii thut tm kim nhng photon lng ging chung.
N bt u ti nt gc ca cy KD v sau thm photon vo mt danh sch nu chng
trong mt tm nht nh. Cho n photon gn nht trong danh sch c sp xp, sao cho
photon xa nht c xa v thm mt photon ti gn nu danh sch cha n photon.
t c iu ny chng ta s dng mt hng i c quyn u tin gi phn thng tin
tm kim photon.
Cho gii thut tm kim ny chng ta cn mt bn knh tm kim ban u. Trong qu
trnh thc hin bn knh ny c thao tc bng tay cho mi khung cnh ring bit. Mt
iu rt quan trong l chn c bn knh tt, nu n qu ln th vic tm kim s rt
chm, v nu n nh qu th khng s photon tm thy, nn cn mt mc iu
chnh. Ta cng c thc hin vic xc nh bn knh tm kim, khi ng vi mt bn
knh nh v tng dn n nu s photon tm thy vn cha . Chng ta khng c bt c s
ci tin no do iu ny, bi vic tm kim hai hoc ba ln l qu ln.
Di y ta c th nhn thy mt vt lai (hybrid) ca gc hp tr li vi 20000
photon, nhng vi bn knh tm kim l 5 trn 2 ln u v 15 trn 2 ln cui. Ta cng c
th nhn thy s khc nhau s dng phn phi xc sut khc nhau ca nhng photon m t
trong phn u. Ct u tin l phn phi bnh thng , ct th 2 l phn phi xung pha
di GAUSS.

Hnh 8.20 Gii thut tm kim dng nh v photon


b. T trt (Rendering)
Mt ln nh x photon c pht sinh theo vi cch trc quan hn. Photon
mapping l mt ci nhn c lp, nn n c th s dng t gc nhn no trong khung
cnh. Mt cch lm trc quan photon mapping rt nhanh l tnh ton gi tr chiu cho mi
nh trong khung cnh v sau s dng s chiu sng nh c h tr bi a s phn
cng 3D tr li cnh cho bt k gc nhn no. Mt cch khc, hy trc tip to nn s trc
146

Chng 8: nh sng

quan cho nh x. M n gin cho mi pixel theo vt ca mt tia xuyn qua khung cnh
v tnh ton nh gi s chiu sng n b mt im. y l cch tip cn m chng ta s
dng. Trong ti liu Jensen gi tr li hnh nh cui cng s dng phn tn raytracing,
ni m s chiu sng c nh gi trung bnh mt s nh gi mu. Mi mu gm vt
ca mt tia t mt xuyn qua im ti khung cnh. S chiu sng tr li bi mi tia, cn
bng vi s chiu sng ang ri khi theo hng tia sng cho im giao nhau ti b
mt b ct ngang u tin bi tia sng.
Cng thc qu trnh chiu sng c th chia ra thnh tng phn vo trong 4 phn s
dng kin thc ca ta v BRDF. nh hng chiu sng, phn x bng long v lp lnh,
t quang (caustics) v s phn x a khuch tn. Vic lm trc quan hn photon mapping
trc tip s dng raytracing mu mang li kt qu tt, nhng yu cu nhiu photon t
c kt qu tt. c bit t quang th kh lm ng mc nu khng c mt photon
mapping chuyn dng no iu khin t quang. Tr phi ton b nhng kt qu khng
tt nh mt trong s . y phn ln l cch tip cn thiu mt raytracing phn tn thu
nht. Tuy nhin vic s dng mt cch tip cn trc quan ha trc tip lm cho n d
chuyn t photon mapping vo trong ha thi gian thc, ni m photon mapping c th
s dng tr li kt cu cho bn cng c gi l lightmap, nh vy vic lm cho n
c th cho thi gian thc s dng vi vic s dng mt bc tin x l. c thm chi
tit hy xem Radiosity Using Photon Maps
Di y l mt vi bc nh c t trt:

Hnh 8.21 cc bc nh c t trt

8.4. S SO SNH GIA CC K THUT (COMPARISON OF


TECHNIQUES)
Trong phn ny ta s nh gi 3 thut gii v ch n nm kha cnh sau:
Tc - lng thi gian (bao gm c qu trnh tin x l) yu cu tr li mt
hnh nh.
Cht lng nh cch to ra hnh nh, ty chn theo yu cu x l tham s c
yu cu t c kt qu mong mun.
S hn ch hnh hc k thut c th iu khin nhng cnh chuyn bit hoc c
hn ch. C th s tt hn mt vi khung cnh so vi nhng cnh khc.
S thc hin kh khn mt nhiu cng sc thc hin gii thut.
147

Chng 8: nh sng
8.4.1. Raytracing

Raytracing l mt gii thut kh nhanh. Thi gian tr li thng nm trong n v


giy thm ch cho nhng khung cnh kh vi mt s thc hin cn thn.
Nhng hnh nh sn sinh th n tng nhng li rt xa thc t v n thng c
nhn thong qua rng hnh nh c to ra bi mt raytracer. T tt nht m t hnh
nh siu thc. Nhng phn x xut hin vi sc khng gim v hnh bng th rt sc.
Raytracing bi vy cho kt qu rt thc t trn khung cnh ni m nhng c tnh ny th
rt ni bt nh l khung cnh vi nhiu knh, gng v kim loi bng. Mt khc khung
cnh vi i tng khuch tn ging nh thm v ngun sng b mt hoc cnh ngoi
tri khng th c tr li chn thc vi mt raytracer c bn. Kt lun l s tng tc
khuch tn nh sng th ni bt trong thc t nhng n cha c s dng ng mc vo
trong mt raytracer.
C rt t cc yu cu ca khch hng v khng c s hn ch v hnh hc. Hn na
vic thc hin gii thut th kh d.
8.4.2. Radiosity

Radiosity th kh chm so vi raytracing nhng t gii thut khng tnh n s tng tc


phn chiu vi gii php tr li cnh quan c lp. Gii php c th c s dng bi mt
b phn cng tng tc tr li tiu chun, v d: ton b radiosity tnh ton c th l tn
km vi bc tin x l sau s tng tc t l khung hnh (framerates) l c th.
Cht lng hnh nh ca nhng radiosity pht sinh c th l rt tt cho khung cnh,
m khng c s tng tc lng lnh no nhng nhng khung cnh nh vy th khng d
tm thy trong thc t (nhng d hn tm khung cnh ch vi s tng tc lng lnh
cho ci m raytracing tt nht). T khi s tng tc lng lnh c hon ton l i bi
thut gii, khung cnh m cha ng iu ny th khng th tr li khung cnh hin thc.
Vi yu cu ca khch hng v mt khung cnh l cn thit t c nhng kt
qu mong mun. c bit kch c ca ming v v nng lng ca nh sng c th kh
nh gi sm c.
Gii thut s dng ming v hnh ch nht xp x hnh hc khi tnh ton gii php v
t s phc tp ca s ming v hnh vung cng khng qu nhiu. iu ny c ngha
l mun un cong nhng b mt nh mt hnh cu ton hc c th ch xp x ti no
hoc s tnh ton s rt lu. S phc tp ca khung cnh khng th qu cao cho cng mt
l do.
S thc hin gii thut c th s dng lng thi gian kh ln ch yu v c
mt s bc quan trng.
8.4.3. Photon mapping

Photon mapping c th nhanh hn raytracing nu ch c vi photon c s dng. Tuy


nhin trong khi c cht lng hnh nh v thi gian tr li tng ln theo s lng photon
c s dng c l n s c phn chm hn raytracer khi s dng trong thc t.
T khi gii php photon mapping thng c s dng xy dng pha trn ca 1
raytracer bnh thng th n c th sn sinh tt c cc hnh nh nh mt raytracer bnh
148

Chng 8: nh sng

thng. Hiu nng ca phng php photon mapping l n c kh nng m hnh ha rt


nhiu hin tng-vt k l (phenomeanas) trong th gii thc m y l iu khng th
i vi mt mnh raytracing (nh l mu mu ti, t quang, hnh bng mm ). Hnh
nh s rt tt v hin thc khi c s photon c s dng.
Xut hin vn lm sao s dng cho mt kt qu tt yu cu rt nhiu s ngt
qung, v nh vy n khng d tr li hnh nh hon ho ln th u tin. Tc l
photon mapping khng t nhng s hn ch v khung cnh, photon c th cha bt k
loi hnh hc no min l im giao nhau c th c tnh ton v s thc hin ca
phng php kh tin tin mi l. Phn kh nht l ngt qung n vo trong vic sn sinh
mt kt qu c sc thuyt phc.

Tm tt:
nh sng l phn rt quan trng trong ho my tnh. Trong chng ny i su
vo xt cc gii thut ho nh sng, c th l cc gii thut chiu sng ton cc:
Raytracing, Radiosity v Photo mapping.
Mi mt thut ton u xt c im, trnh by cc bc v cc cng thc trong gii
thut, cui cng nh gi u nhc im ca tng gii thut.
Kt thc chng l so snh ba gii thut c a ra.

149

Chng 9: Hnh hc Fractal

CHNG 9: HNH HC FRACTAL


9.1. S RA I V CC NG DNG CA HNH HC PHN HNH
9.1.1. S ra i ca l thuyt hnh hc phn hnh

Trong nhiu thp k n lc gii quyt cc vn nan gii trong nhiu ngnh khoa hc
chnh xc, c bit l vt l v ton hc. Mt cch c th, l thuyt hnh hc phn hnh
c xy dng da trn hai vn ln c quan tm nhng thp nin u th k 20.
Cc vn bao gm:
Tnh hn n ca cc qu trnh pht trin c quy lc trong t nhin.
S m rng khi nim s chiu v o trong l thuyt hnh hc Euclide c in.
Cc cng thc lp c dng:
Xn+1=f(Xn)
Thng c s dng trong cc ngnh khoa hc chnh xc m t cc qu trnh
lp i lp li c tnh xc nh. Cc qu trnh c xc nh bi cng thc trn, trong f
th hin mi lin h phi tuyn gia hai trng thi ni tip nhau Xn v Xn+1, c quan tm
c bit. Cc kho st trong nhng thp nin gn y pht hin ra cc c x k d ca
cc tin trnh lp nh vy.
Vo cc nm 1890 & 1891, trong khi tm kim cc c trng bt bin ca cc i
tng hnh hc qua cc php bin i ng phi trong l thuyt topo, cc nh ton hc
Peano & Hilbert pht minh ra cc ng cong c tnh cht rt c bit. l cc
ng cong khng t ct theo mt quy lut c ch ra bi Peano v Hilbert, chng lp
y mi min hu hn ca mt phng. Hnh hc Euclide c in quan nim cc ng
cong nh vy vn ch l cc i tng mt chiu nh cc ng thng. Tuy nhin trc
quan cho thy cch nhn nh vy v s chiu l rt g b. Do ngi ta bt u ngh n
mt s phn lp mi, trong cc ng c s chiu bng 1 c i din bi ng
thng, cc i tng hai chiu c i din bi mt phng, cn cc ng cong lp y
mt phng i din cho cc i tng c s chiu gia 1 v 2. tng cch mng ny
dn n vic hnh thnh v gii quyt bi ton s chiu hu t gy ra nhiu tranh lun ton
hc trong cc thp k gn y.
Tip sau , vo nm 1904 nh ton hc Thy in Helge Koch a ra mt loi
ng cong khc vi nhng ng cong ca Peano v Hilbert. Cc ng cong Von
Koch khng lp y mt phng nhng li c di thay i mt cch v hn mc d
chng c cha trong mt min hu hn. Nhng ng cong nh vy c rt nhiu trong
t nhin, v d nh cc ng b bin, ng bin ca mt bng hoa tuyt, cc m my,
vv Tt v cc ng cong ny u mt tnh cht c trng l ng dng. N c biu
hin bi s ging nhau gia mt phn rt nh ca ng cong c phng ln vi mt
phn khc ln hn ca cng mt ng cong . Tnh cht ny gi mt v tr quan trng
trong vic hnh thnh nn cc dng cu trc v cng phc tp ca t nhin, nhng vo
thi Von Koch li c hiu bit rt s lc.
150

Chng 9: Hnh hc Fractal

Ch vi s gip ca my tnh in t, bn cht ca tnh ng dng mi c


nghin cu y v chi tit trong tc phm Hnh hc phn hnh trong t nhin ca
Benoit B. Mandelbrot xut bn nm 1982. Trong tc phm ca mnh, Mandelbrot phn
r cc dng cu trc phc tp ca t nhin thnh cc thnh phn c bn gi l fractal. Cc
fractal ny cha ng cc hnh dng t ng dng vi nhiu kch thc khc nhau.
Mandelbrot to nn nhng bc tranh fractal tru tng u tin v nhn thy rng ng
sau cc i tng t nhin nh cc m my, cc dy ni, cc khu rng, vv l cc cu
trc ton hc tng t nhau. Chng c khuynh hng hi ho v mu sc v cn i v
hnh th. Ngoi ra Mandelbrot cng thit lp cch xc nh s chiu v di ca cc
dng fractal c s. Chnh vi nh ngha v s chiu ny, bi ton s chiu khng nguyn
mi c gii quyt mt cch hon chnh. C th ni cng trnh ca Benoit B.Mandelbrot
chnh thc khai sinh l thuyt hnh hc phn hnh sau hn na th k nghin cu lin
tc.
K t khi ra i mt cch chnh thc vo nm 1982 cho n nay, l thuyt hnh hc
phn hnh hc phn hnh pht trin mt cch nhanh chng.
9.1.2. Cc ng dng tng qut ca hnh hc phn hnh

Hin nay c 3 hng ng dng ln ca l thuyt hnh hc phn hnh, bao gm:
ng dng trong vn to nh trn my tnh.
ng dng trong cng ngh nn nh.
ng dng trong nghin cu khoa hc c bn.

9.2. MT S K THUT CI T HNH HC PHN HNH


9.2.1 H ng VONKOCK

Trong phn ny chng ta s cng nhau tho lun cc fractal c pht sinh bng cch s
dng qui initiator / generator vi kt qu l cc hnh t ng dng hon ton. Cc hnh
ny c s chiu t ng dng, s chiu fractal v s chiu Hausdorff-Besicovitch bng
nhau.
S chiu c tnh theo cng thc sau:

D=

log( N )
1
log
R

Trong :
N: L s on thng.
R: L s chiu di ca mi on.
Chng ta bt u bng mt initiator, n c th l mt on thng hay mt a gic.
Mi cnh ca initiator c thay th bi mt generator, m l tp lin thng ca cc on
thng to nn bng cch i t im bt u n im cui ca ng thay th (Thng
thng cc im ca generator l mt li vung hay mt li to bi cc tam gic u).
Sau mi on thng ca hnh mi c thay th bi phin bn nh hn ca generator.
151

Chng 9: Hnh hc Fractal

Qu trnh ny tip tc khng xc nh c. Sau y l mt s ng Von Kock quan


trng.

9.2.1.1. ng hoa tuyt VON KOCK-NOWFLAKE:


ng hoa tuyt c xy dng bi nh ton hc Helge Von Kock vo nm 1904. y
chng ta bt u vi initiator l mt on thng. Cn generator c pht sinh nh sau:

Hnh 9.1 Generator ca ng von kock

Chng ta chia on thng thnh ba phn bng nhau. Sau thay th mt phn ba
on gia bng tam gic u v b i cnh y ca n. Sau chng ta lp li qu trnh
ny cho mi on thng mi. Ngha l chia on thng mi thnh ba phn bng nhau v
lp lai cc bc nh trn.
Ta thy qu trnh xy dng l t ng dng, ngha l mi phn trong 4 phn bc
th k l phin bn nh hn 3 ln ca ton b ng cong bc th (k1).
Nh vy mi on thng ca generator c chiu di R = 1/3 (gi s chiu di on
thng ban u l 1) v s on thng ca generator N = 4. Do vy s chiu fractal ca
ng hoa tuyt l:
log( N ) log 4
D=
=
1,2618
1 log 3
log
R
vit mt on m cho vic pht sinh ra ng hoa tuyt, chng ta cn phi trnh
by v ho con ra (turtle graphic).
Chng hn sau y l mt minh ho cho hnh v trnh by mc 3 ca ng Von
Kock-Snowflake.

Hnh 9.2 ng Von Kock-Snowflake mc 3


9.2.1.2. NG VON KOCK-GOSPER:
Mt dng khc ca ng Von Kock c pht hin bi W.Gosper. Trong ng mi
ny, initiator l mt lc gic u v generator cha ba on nm trn mt li ca cc tam
gic u. Hnh sau cho chng ta thy generator b tr trn li:
152

Chng 9: Hnh hc Fractal

Hnh 9.3 dng ca ng Von Kock


Ta thy ng ny c cht khc bit so vi ng hoa tuyt ch on thng c
thay th khng nm trn bt k cc ng no ca li.
tnh s chiu fractal ca ng Gosper trc ht ta tnh chiu di mi on ca
generator. Gi s chiu di t u mt ca generator n u mt khc l 1.
t:
AC = R => AE = 3AC = 3R
AB2 = AE2 + EB2 2AE.EB.Cos(600)
Ta c:
M AB = 1, AE = 3R, EB = AC = R
1 = 9 R 2 + R 2 2 3R R / 2 = 7 R 2
R=

7
EB = AE 2 + AB 2 2 AEAB cos
2

AB 2 + AE 2 EB 2 1 + 9 R 2 R 2 1 + 8 R 2
cos =
=
=
=
2 AEAB
2 3R 1
6R

1
7 =5 7
1
14
6
7

1+ 8

0 94491
19 01'

V N = 3 nn s chiu fractal ca ng Gosper l:


log 3
D=
1.1291
log 7
Hnh sau l mc u tin ca ng Gosper.

153

Chng 9: Hnh hc Fractal

Hnh 9.4 ng Gosper


on m i vi ng Gosper ging nh on m ca ng hoa tuyt, trong :
NumLines = 3
Mng Angle c gi tr sau: {19.1, -60.0 }
Ngoi ra, ng Gosper c cc mc khc nhau th tng ng vi cc hnh dng khc
nhau.
Hnh sau l mc 3 ca ng Gosper.

Hnh 9.5 ng Gosper mc 3.


9.2.2. ng SIERPINSKI

ng Sierpinski c trnh by sau y l mt ng cong rt c bit, bi v c rt


nhiu cch pht sinh ra n vi cc khi ng ban u hon ton khc nhau nhng li kt
thc vic sinh ra mt loi ng cong duy nht.
Chng ta quen vi phng php u tin pht sinh ra tam gic Sierpinski bng
cch s dng k thut initiator / generator c m t cc phn trc. i vi ng
ny, initiator l mt on thng.
Generator i vi ng cong ny v cc ng c sinh ra mc 1, 2 v 3 c
minh ho nh sau:

Hnh 9.6 Generator ca tam gic Sierpinski mc 2.


154

Chng 9: Hnh hc Fractal

Hnh 9.7 Generator ca tam gic Sierpinski Mc 1

Hnh 9.8 Mc 3
V y l ng Sierpinski mc 4 v 8:

Hnh 9.9 Mc 4 v 8

pht sinh ra ng ny ta dng k thut ging nh cc ng h Von Kock v


Peano.

9.3. CY FRACTAL
Trong cc phn trc, chng ta to ra cc ng fractal bng cch thay th mt cch
lp li ca cc on thng vi cc mu thu nh ca mt generator mu, kt qu l cc
ng c tnh t ng dng. By gi, chng ta s to ra ng cong theo mt hng khc.
Chng ta s bt u vi mt thn cy ti u mt ca n chng ta tch thn cy thnh hai
hng v v hai nhnh. Chng ta s lp li qu trnh ny ti cc u mt ca mi nhnh.
Kt qu chng ta s c mt cy. Trc khi chng ta biu din cc cy t nhin, u tin
chng ta tho lun vi iu v cc cy thc t.
9.3.1. CC CY THC T:

Chng ta phc tho qu trnh to cy c cho trn. Ti mi nt trong qu trnh to cy,


chng ta tch lm hai hng. Kt qu ta c mt cy hai chiu. Chng ta hy vng n c
mt s quan h vi cy thc t 3 chiu. Trc khi i xa hn, chng ta quan st mt vi
cy t nhin. u tin, c hai lp cy l lp cy rng l (deciduous) mi nm v lp cy
tng bch (conifers). Hai lp cy ny hon ton khc nhau. Cy tng bch c khuynh
hng c cc vng ca cc nhnh ti cc cao khc nhau vng quanh trung tm ca
155

Chng 9: Hnh hc Fractal

thn cy. iu ny dng nh khng thch hp vi tt c cc qu trnh r nhnh nh phn


v chng ta s thy cc cy sau y do chng pht sinh khng bao gi ging vi cy tng
bch tht s.
Th hai, i vi cy rng l mc d s xut hin ca chng rt gn vi m hnh ca
chng ta, th nhng vn cn rt nhiu phc tp trong cu trc ca chng. Trong khi ,
vic r nhnh nh phn thng c qui lut v n gin hn nhiu, ch ngoi tr mt vi
thn cy c kh nng tch ra nhiu hn hai nhnh.
9.3.2. BIN DIN TON HC CA CY:

Theo Leonardo da Vinci quan st, kt qu l do tng s cc vng ct ngang ca cc


nhnh cy mt cao cho trc l hng s. iu ny khng gy ngc nhin v cy i
hi chuyn dinh dng t gc n l v cho trc mt lng dinh dng, mt ngi ngh
rng thit din cn thit cho s vn chuyn s khng i bt k chiu cao hay s ng dn.
Khi chng ta chuyn s quan st ny vo cc ng knh (hay cc chiu rng khi chng ta
v thnh cy hai chiu ) th chng ta c c biu thc sau:

D = D + D
0
1
2
y D0, D1, D2 l ng knh ca hai nhnh chia cy lm i, = 2 theo da Vinci.
Do cc dng cc dng cu trc ging cy, m hnh n gin c cho trn c kh
nng p dng cho cc h thng sng tt hn cc cy, v thng c nhiu hn hai con sng
nhnh ca mt h thng sng s ni vi nhau cng mt ni. Cc cy khc c tm thy
trong c th con ngi l h thng ng mch v cung phi dng vn chuyn mu v
oxy, trong i vi h thng cung phi l 3 v i vi ng mch l 2.7.
Khi chng ta xy dng cy chng ta s s dng biu thc:

n+1

1
= 2 Bn

(a)

y Bn l ng knh ca nhnh mc thp hn. Bn+1 biu din ng knh mi


nhnh con khi Bn tch thnh hai nhnh.
Chng ta cng cn xem xt chiu di mi nhnh. McMahon nghin cu cc loi cy
kiu mu khc nhau v a ra cng thc nh sau cho chiu di:

2
L
= 2 3 Ln
n+1

(b)

Vi Ln l chiu di ca nhnh trc v Ln+1 chiu di ca mi nhnh trong hai


nhnh k sau khi nhnh trc c tch ra lm hai.
to thnh mt cy, y chng ta s dng ho con ra.
Gi:
(X,Y) l to ca gc cy.
Height, Width l chiu cao v chiu rng ca cy.
156

Chng 9: Hnh hc Fractal

Letf_Alpha, Right_Alpha l gc Alpha bn tri v gc Alpha bn phi.


Left_Angle, Right_Angle l gc r bn tri v gc r bn phi ca nhnh.
Level l mc ca cy.
Color1 l mu ca thn cy.
Color2 l mu ca tc cy.
Color3 l mu ca l cy.
Thut ton:
(i) Tnh cc h s:
+ Chiu rng tri v phi theo cng thc (a).
Left_Width_Factor = pow (2, -1.0 / Left_Alpha );
Right_Width_Factor = pow (2, -1.0 / Right_Anpha );
+ Chiu cao tri v phi theo cng thc (b)
Left_Height_Factor = pow (2, -2.0 / (3 * Left_Alpha));
Right_Height_Factor = pow (2, -2.0 / (3 * Right_Alpha));
(ii) Xc nh to ngn ca thn cy:
X1 = X;
Y1 = Y + Height;
(iii) V thn cy t (X, Y) n (X1, Y1) vi mu Color1 v chiu rng l Width.
DrawLine (X, Y, X1,Y1, Color1, Width);
(iv) Pht sinh nhnh bn tri:
Xc nh gc gia thn cy v trc x (tc l gc ca con ra)
Turtle_Theta = Point (X, Y, X1, Y1);
Quay con ra v pha bn tri mt gc Left
Turn (Left_Angle, &Turtle_Theta);
Sau gi hm Generator pht sinh ra nhnh bn tri.
Generator (X1, Y1,Left_Width_Factor * Width, Left_Height_Factor * Height,
Level);
v) Pht sinh bn nhnh bn phi:
a) Xc nh gc gia thn cy v trc x (tc l gc ca con ra)
Turtle_Theta = Point (X, Y, X1, Y1);
b) Quay con ra v pha phi mt gc Right_Angle
Turn (-Right_Angle, &Turtle_Theta);
c) Sau gi hm Generator pht sinh ra nhnh bn phi
Generator (X1, Y1, Right_Width_Factor * Width, Right_Height_Factor * Height,
Level);
Hm Generator c on m nh sau:
157

Chng 9: Hnh hc Fractal

Generator (float X, float Y,float Width, float Height, unsigned char Level){
(i) Xc nh v tr con ra hin ti v chiu di mt bc ca con ra
Turtle_X = X;
Turtle_Y = Y;
Turtle_R = Height;
(ii) Xc nh ngng ca tc mi pht sinh v gim mc i mt n v.
Step (&Turtle_X, &Turtle_Y, Turtle_R, Turtle_Theta);
X2 = Turtle_X;
Y2 = Turtle_Y;
Level--;
(iii) V on thng t (X, Y) n (X2, Y2) vi rng l Width v
mu c xc nh nh sau:
+ Nu Level < 3 th mu hin thi l Color2.
+ Nu Level >= 3 th mu hin thi l Color3.
If (Level < 3)
DrawLine (X, Y, X2, Y2, Width, Color2);
Else
DrawLine (X, Y, X2, Y2, Width, Color3);
iv) Nu Level > 0 th chng ta tip tc phn lm hai nhnh tri v phi.
if (Level > 0){
Turtle_Theta = Point(X, Y, X2, Y2);
Turtle (Left_Angle, &Turtle_Theta);
Generator (Turtle_X, Turtle_Y, Left_Width_Factor * Width,
Left_Height_Factor * Height, Level )
Turntle_Theta = Point (X, Y, X2, Y2);
Turn (- Right_Angle, &Turtle_Theta);
Generator (X2, Y2, Right_Width_Factor * Width,
Right_Height_Factor * Height, Level);
}
}
Sau y l hnh minh ho mt cy fractal vi Level = 14, Height = 80, Width = 20,
Left_Alpha = 2.0, Right_Alpha = 2.2, Left_Angle = 20, Right_Angle = 28.

158

Chng 9: Hnh hc Fractal

Hnh 9.10 Minh ho cy Fractal

9.4. TP MANDELBROT
9.4.1. t vn

Trong nhiu thp nin ca th k XX, cc nh ton hc tm nghin cu n mt loi


biu thc phc tp xc nh bi:
zn+1 = zn2 + c, trong zi C, i N & c C (1)
n gin ho vn , trc ht ta xt trng hp c = 0 v z0 R. Khi c 3
trng hp sau:
+ z0 = 1 : khi zn = 1, n 1.
+ z0 < 1 : khi zn 0 khi n .
+ z0 > 1 : khi zn khi n .
y tc tin n 0 hay tin n ca dy (zn) c quyt nh bi gi tr ban
u z0 ca dy. Trong trng hp z0 < 1, gi tr z0 cng nh th dy (zn) tin n 0 cng
nhanh. Ngc li khi z0 > 1, gi tr z0 cng ln th dy (zn) cng tin nhanh ra .
Trong trng hp tng qut, dy (zn) c xc nh bi cng thc (1) trn rt kh
kho st v mt l thuyt. Ch n nm 1979, Mandelbrot mi thnh cng trong vic quan
st dy ny vi s h tr ca my tnh in t. Kt qu c Mandelbrot quan st thy l
mt trong nhng cu trc fractal phc tp v p. N c t tn Mandelbrot ghi
nh cng lao ca tc gi, ngi khai sinh ra l thuyt hnh hc phn hnh.
9.4.2. CNG THC TON HC

K hiu zn = ( xn , yn), c = (p,q), trong :


xn = Re(zn), p = Re(c), yn = Im(zn), q = Im(c), n 0 th h thc truy hi xc nh
(1) c th c vit li theo dng n gin hn nh sau:
xn+1 = xn2 yn2 + p
yn+1 = 2xn .yn + q

(2)

Ngoi ra khi kho st dy (zn) ta tm c tnh cht sau:


159

Chng 9: Hnh hc Fractal

Tnh cht v s hi t ca dy (zn):


Nu tn ti k N sao cho | zk | > 2 th dy (zn) hi t n v cc.
Nu tn ti k N sao cho | zt | < 2, t : k t 1, vi 1 l hng s hu hn th cng
c | zn | < 2, n k. (K hiu | z | ch modul ca s phc z).
9.4.3. THUT TON TH HIN TP MANDELBROT

9.4.3.1. Xy dng thut ton:


Tp Mandelbrot l hnh nh ca dy (zn), vi gi tr khi u z0 = 0. Khi mn hnh my
tnh s chuyn i thnh mt mt phng phc thu hp vi:
Trc x biu din phn thc ca s phc c (gi tr p c nu phn 2/).
Trc y biu din phn o ca s phc c (gi tr q c nu phn 2/).
T tnh cht v s hi t ca dy (zn) phn 2 chng ta c th chia tp cc gi tr
ca c trn mt phng phc thnh 2 lp:
Lp 1:
Gm cc gi tr c lm cho dy (zn) khng tin ra v cc m c gii hn trong mt
vng trn bn knh 2. Mt cch c th, l cc gi tr c sao cho khi xut pht t chng,
ta lun c | zi | < 2, i = 1, 2, , l, trong l do ta chn trc. l gi tr l cng ln
th tnh hi t ca dy (zn) tng ng vi mt gi tr c th cng c kim tra cht ch v
chnh xc. Tuy nhin khi thi gian tnh ton xc nh tnh hi t s tng ln gp
nhiu ln.
Lp 2:
Gm cc gi tr phc c lm cho dy (zn) hi t v v cc. C th l cc gi tr c
khi u dn n | zn | > 2 mt ngng k hu hn no .
Vn t ra y l cn quan st tnh hn n ca dy (zn). Do chng ta tp
trung cc quan st vo cc gi tr c thuc lp 2. Mun nh vy cc gi tr ny phi c
thc hin mt cch ni bt trn mn hnh my tnh bi cc mu khc nhau. Chng ta s t
mu mt phng phc mn hnh theo qui tc sau:
Cc gi tr c thuc lp 1 c t mu en v khng c tnh cht g ng ch .
Cc gi tr c thuc lp 2 c t bng cc mu khc nhau ng vi cc ngng tin
ra v hn k khc nhau. Do s lng mu c th hin th trn mt mn hnh ho
l hu hn, vic t mu cc gi tr ny s c thc hin theo k thut t mu xoay
vng c ch ra cc phn tip sau y.

9.4.3.2. Thut ton tng qut th hin tp Mandelbrot:


Thut ton gm cc bc sau:
Bc 1:
Xut pht vi mt gi tr khi u c = (p,q).
Bc 2:
Kim tra c thuc lp 1 hay lp 2.
Bc 3:
160

Chng 9: Hnh hc Fractal

Nu c thuc lp 1 th t im nh tng ng vi c trn mn hnh bng mu en,


ngc li t im nh ny bi mu tng ng xc nh t k thut t xoay vng.
Bc 4:
Chn mt gi tr c mi v tr li bc 1 cho n khi qut ht ton b gi tr c cn
kho st (i khi chng ta khng cn kho st ton b m ch kho st mt min con c
yu cu ca mt phng phc). Khi thut ton kt thc.

Hnh 9.11 tp Mandelbrot

9.5. TP JULIA
9.5.1. t vn :

i vi biu thc zn+1 = zn2 + c, ngoi hng kho st nh trnh by trong phn tp
Mandelbrot, cn c hng kho st khc bng cch cho c c nh v xem xt dy (zn) ng
vi mi gi tr khc ca z0. Theo hng ny chng ta s thu c 1 lp cc i tng
fractal mi c gi l tp Julia.
Tp Julia v tp Mandelbrot l hai lp cc i tng fractal c mi lin h rt cht
ch vi nhau. Mt tnh cht ng ch l tp Mandelbrot c th xem nh mt loi bn
Mandelbrot c th cho ra cc dng tp Julia y sc li cun. Cc v tr nh vy c
quan st thy gn bin ca tp Mandelbrot. Nht l gn cc chm nhn. Ngoi ra khi
phng to mt phn ca tp Mandelbrot, ta s thu c mt hnh rt ging vi tp Julia
c to bi gi tr ca tm phn c phng to.
9.5.2. Cng thc ton hc:

th hin tp Julia trn mn hnh my tnh, ta vn s dng cc cng thc nh trong phn
tp Mandelbrot, nh l:
xn+1 = xn2 yn2 + p
yn+1 = 2xnyn + q
Ngoi ra cc tnh cht nu v gii hn ca dy (z0) vn c s dng cho tp
Julia.
9.5.3. Thut ton th hin tp Julia

im khc bit so vi tp Mandelbrot y l gi tr p v q c gi c nh, mt


phng mn hnh bin i thnh mt phng phc thu hp biu din cc gi tr ca x0 vi:
161

Chng 9: Hnh hc Fractal

Trc x biu din phn thc ca s phc z0.


Trc y biu din phn o ca s phc z0.
Ngoi ra cn c s phn lp cc gi tr ca z0 nh sau:
Lp 1:
Bao gm cc gi tr (z0) c | zk | < 2, vi 0 k N trong N l hng s hu hn.
Tc l lp 1 gm cc gi tr z0 lm cho dy (z0) khng tin ra v cc.
Lp 2:
Bao gm cc gi tr (z0) c | zn | > 2, vi n k, k Z+, tc l gm cc gi tr lm cho
dy (zn) tin ra v cc.
Ngc li vi tp Mandelbrot, khi th hin tp Julia trn mn hnh, chng ta quan
tm n cc gi tr z0 lm cho dy (zn) khng hi t n v cc. Do k thut t mu ca
tp Julia vn l k thut xoay vng nhng hon ton ngc li vi k thut t mu tp
Mandelbrot. Trong k thut t mu ny:
Cc im nh tng ng vi cc gi tr z0 thuc lp 1, s c gn mu ty thuc
ln ca | zl| vi l l ngng quyt nh hi t ca dy (zn) nu trong nh ngha v lp
1.
Cc im nh tng ng vi gi tr z0 thuc lp 2 s c gn mu trng vi mu
nn ca bng mu ang s dng.
Vi cc thay i nh vy, tp Julia s c th hin bng thut ton trnh by nh
sau:

Thut ton tng qut th hin tp Julia:


Gm cc bc sau:
Bc 1:
Xut pht vi 1 gi tr khi u z0 = (x0, y0) v gi tr c nh c = (p, q).
Bc 2:
Kim tra z0 thuc lp 1 hay 2.
Bc 3:
T mu im nh tng ng vi z0 theo k thut t mu c nu trn.
Bc 4:
Chn gi tr z0 mi v lp li bc 1 cho n khi qut ht tt c cc gi tr z0 cn
kho st.

162

Chng 9: Hnh hc Fractal

Hnh 9.12 Minh ho tp Julia

9.6. H CC NG CONG PHOENIX


H cc ng cong Phoenix do Shigehiro Ushiki trng i hc Kyoto tm ra. Phng
trnh ca ng cong c xc nh bi:
Zn+1 = zn2 + p + q.zn-1
Trong :
Zi C i, N.
p = (p, 0) C.
q = (q, 0) C.
Phng trnh c khai trin thnh cc phn thc v o ca zn c dng:
xn+1 = xn2 yn2 + p + q.xn-1
yn+1 = 2xn.yn + q.yn-1
vi:

xn+1 = Re(zn+1);
yn+1 = Im(zn+1).

Khi vic th hin ng cong ny ln mn hnh gn ging vi vic th hin tp


Julia. Tuy nhin c hai im thay i quan trng:
Thay i 1:
Trc x ca mn hnh biu th phn o ca s phc z0.
Trc y ca mn hnh biu th phn thc ca s phc z0.
y chng ta o ngc cc trc thc v o ca mt phng phc thng thng l
th hin hnh nh theo chiu ng ch khng phi chiu ngang. Hnh 14.1 trnh by 1
loi ng cong loi ny vi yu cu r rng l phi i vai tr ca trc x v y hnh
nh c th c th hin tt trn mn hnh. Do tng ng vi mt im nh (Col,
Row) trn mn hnh s l s phc z = (x, y) c dng:
x = ymax Row * x;
y = ymin Col * y;
163

Chng 9: Hnh hc Fractal

Vi:

y max y

min
Max _ Row
xmax x
min
y =
Thay i 2:
Max _ Col
Thay i v thut ton t mu. y vi cc im thuc lp 1 (theo nh ngha
nu phn v tp Julia) chng ta s s dng 3 loi mu tu theo ngng hi t:
x =

Mu 1: c s dng t cc im z0 cho ra gi tr | zk | < 2 vi ti a k = 32 ln


lp.
Mu 2: c s dng t cc im z0 cho ra gi tr | zk | < 2 vi s ln lp t 33
n 64.
Mu 3: c s dng t cc im z0 cho ra gi tr | zk | < 2 vi s ln lp vt qu
64 ln.
Cn i vi cc im thuc lp 2, chng ta s t chng bng mt mu khc vi mu
nn hin ti.
Vi cc thay i nh vy, on m dng xc nh gi tr z0 thuc lp 1 hay 2, cng
vi k thut t mu im nh s c vit di dng:
for(Col = 0; Col<Max_Col; ++Col)
{
for(Row=0; Row<= Max_Row; ++Row){
xn = ymax - Row* x;
yn = xmin + Col* y;
X =Y= 0;
Count = 0;
While((Count < Max_Iterations) & (X+Y < 4)){
X = x n2 ;
Y = y n2 ;
yn+1 = 2xnyn + q yn-1;
yn-1 = yn ;
xn+1 = X Y + qxn-1 + p;
xn-1 = xn;
xn = xn+1;
yn = yn+1;
++Count;
}
if(Count > Max_Iterations)
T mu im nh (Col, Row) bng mu dnh cho cc im loi 2;
else
if (Count >= 64)
T mu im (Col, Row) bng mu 3;
else
if (Color >= 32)
T im nh (Col, Row) bng mu 2;
else
T im nh (Col, Row) bng mu 1;
}
}

164

Chng 9: Hnh hc Fractal

y l nh ca ng cong Phoenix

Hnh 9.13 ng cong Phoenix

Bi tp
1. Vit chng trnh sinh ng C_curve.
2. Vit chng trnh sinh ng Dragons.
3. Vit chng trnh sinh ng Kon.
4. Vit chng trnh sinh ng Mandelbrot.
5. Vit chng trnh sinh ng Pythagoras.

165

Mc lc

PH LC
Hng dn s dng th vin ho trong C/C++ hay BC

1. Yu cu
Phi c tp tin iu khin mn hnh EGAVGA.BGI (thng thng tp ny thng
nm trong th mc \BC\BGI hay TC\BGI khi ci t).
Nu chng ta c s dng ti font ch th cn phi c thm cc file (*.CHR) nh:
GOTH.CHR (ch Gothic), LITT.CHR (ch Small Font), SANS.CHR (ch Sans Serif),
TRIP.CHR (ch cao gp 3).
dng c th vin cc hm ho cn c dng lnh:
#include <graphics.h> v t mc chn Graphics library l ON ([x] trong menu
Options/Linker/Libraries.
Khi cn tham kho c php, cch s dng ca bt k mt hm ho 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 ho nhn t hp phm CTRL+F1 ngay ti
dng ch <graphics.h>.

2. Khi to v ng ch ho
phn gii ca mn hnh c o bng s im theo chiu ngang nhn vi s
im theo chiu dc ca mn hnh ho. To gc ca mn hnh ho (0,0) l im
nm ti gc trn cng pha bn tri. Mi kiu ho dng mt h to ring. H to
cho mn hnh VGA l 640x480.
Khi ng ho vi mn hnh ngm nh:
#include <graphics.h>
void main(void){
int
gdriver, gmode, errocode;
gdriver = DETECT;//ngm nh
initgraph(&gdriver,&gmode,C:\TC\BGI);
//tm mode mn hnh trong
th mc BGI
errorcode = graphresult();
if (errorcode !=grOk) {
printf(\n Khng khi to c);
getch();exit(1);
}
...................// Cc thao tc ho tip theo
closegraph();
}

V d: vit chng trnh hai ng thng ct nhau


#include <conio.h>
#include <graphics.h>
#include <math.h>
// h s i t sang radian
#define RADS 0.017453293

166

Mc lc
void giaodiem(double x1, double y1, double x2, double y2,
double a1, double b1, double a2, double b2) {
double dx, dy, da, db, x, y, t, tich;
dx = x2 - x1;
dy = y2 - y1;
da = a2 - a1;
db = b2 - b1;
tich = db * dx - da * dy;
if (tich != 0) {
t = ((a1 - x1) * dy - (b1 - y1) * dx) / tich;
if (t>=0.0 && t<=1.0) {
x = t * (a2 - a1) + a1;
y = t * (b2 - b1) + b1;
line(x1, y1, x2, y2);
line(a1, b1, a2, b2);
setfillstyle(SOLID_FILL, RED);
fillellipse(x, y, 3, 3);
}
}
}
void main() {
int gr_drive = DETECT, gr_mode;
double x1, y1, x2, y2, a1, b1, a2, b2;
printf("\nNhap vao toa do doan thang thu nhat: ");
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
printf("\nNhap vao toa do doan thang thu hai: ");
scanf("%lf%lf%lf%lf", &a1, &b1, &a2, &b2);
initgraph(&gr_drive, &gr_mode, "");
giaodiem(x1, y1, x2, y2, a1, b1, a2, b2);
getch();
closegraph(); //ng ch ho
}

3. Cc hm c bn
3.1. Bng mu ca mn hnh ho.
Setbkcolor(int color)

thit lp mu nn cho mn hnh ho

setcolor(int color)

t mu v cho nt v hin ti

getmaxcolor()

ly s mu cao nht c s dng trong ch ho hin ti

setallpalette(struct palettetype far s lm thay i ton b mu trong bng mu palette


*palette)
setpalette( int colox, int colory)

s lm thay i mu th colorx thnh mu colory

getpalette(struct palettetype far s ly li gi tr ca palette ang dng


*palette)
textheight(W)

ly chiu cao ca dng vn bn

outextxy(int x, int y, char * msg) Ch th a xu k t msg ra mn hnh ho ti v tr (x,y)

167

Mc lc
3.2. im

n gin nht chnh l im, mi i tng khc u c xy dng nn t im.


int getmaxx()

S chm im ln nht theo chiu ngang trong ch ho hin ti

int getmaxy()

S chm im ln nht theo chiu dc trong ch ho hin ti

putpixel( x, y, color)

v mt im sng ln mn hnh ti im (x, y) c mu color

getpixel(x,y)

nhn bit mu hin ti ca im (x, y)

3.3. ng

Cc hm cho ng:
moveto(int x, int y)

di chuyn v tr con tr hin ti ca mn hnh ho ti to (x,y)

getx(), gety()

ly to ca con tr hin ti theo chiu ngang v chiu dc mn hnh


ho

lineto(int x, int y)

v mt ng thng t v tr con tr hin ti ti v tr c to (x, y) trn


mn hnh ho

line(int x1, int y1, int x2, V mt ng thng t to (x1,y1) n to (x2, y2) trn mn hnh
int y2)
ho. ng thng mi c v khng ph thuc vo v tr hin thi ca
con tr mn hnh
linerel(int dx, int dy)

V mt on thng t v tr con tr hin ti ti v tr (x +dx, y+dy). Sau khi


v con tr chuyn ti v tr mi (x+dx, y+dy)

3.4. Hnh ch nht

rectangle(int x1, int y1, int x2, int y2) v hnh ch nht c to pha gc trn bn
tri l (x1, y1) v gc di bn phi c to (x2,y2).
bar(int x1, int y1, int x2, int y2) v hnh ch nht c t mu pha trong. Hai ch th
rectangle v bar khc nhau ch rectangle ch to nn mt hnh ch nht vi ng vin
bao quanh.
bar3d(int x1,int y1,int x2,int y2,int depth, int top) v khi hp ch nht, mt ngoi
ca n l hnh ch nht xc nh bi cc to (x1,y1,x2,y2) hnh ch nht ny c t
mu, depth l chiu su ca khi 3 chiu, top nhn gi tr 1 hoc 0 khi 3 chiu c np
hay khng c np.
3.5. Hnh trn

Tt c cc hm di y, gc tnh theo v gi tr t 00 n 3600 .


arc(int x, int y, int gd,int gc,int r) v cung trn c (x,y) ta tm trn, r bn knh,
gd gc u, gc gc cui.
circle( int x, int y, int r) l hm v hnh trn c tm ti im (x,y) vi bn knh r.
ellipse(int x, int y,int gd, int gc,int xr, int yr) v 1 hnh ellipse c (x,y) to tm
cung, gd gc u, gc gc cui, xr l bn trc ngang, yr l bn trc ng.
pieslice(int x, int y, int gd, int gc, int r) v v t mu hnh qut c (x,y) l to tm
qut, gd l gc u, gc l gc cui, r l bn knh.
168

Mc lc
3.6. a gic

drawpoly(int numpoints, int far *polypoints) s v nn mt ng gp khc bt k


vi numpoints l s im m ng gp khc i qua, polypoints (mng) to im
(x1,y1,x2,y2....). Khi im cui (xn,yn) trng vi im u (x1,y1) th c mt a gic.
fillpoly(int numpoints, int *polypoints) s t mu a gic bng mu hin thi.
setfillstyle(int pattern, int color) dng xc nh mu t cho a gic, trong mu
t l cc hng s nguyn c nh ngha nh sau:
Tn hng mu

Gi tr

M t

EMPTY_FILL

T bng mu nn

SOLID_FILL

T bng nt lin

LINE_FILL

T ------

LTSLASH_FILL

T ////

SLASH_FILL

T ///// in m

BKSLASH_FILL

T \\\\\ in m

LTBKSLASH_FILL

T \\\\

HATCH_FILL

T ng gch bng nht

XHATCH_FILL

T ng gch bng ch thp

INTERLEAVE_FILL

T ng t qung

WIDE_DOT_FILL

10

T bng du chm tha

CLOSE_DOT_FILL

11

T bng du chm dy

3.7. Vn bn

outtext( char far *textstring) s hin th ni dung xu textstring ti v tr hin thi


ca mn hnh ho.
outtextxy(int x, int y, char far *textstring) hin th ni dung xu textstring ti to
(x, y) trong mn hnh ho.
settextstyle(int font, int direction, int charzise) dng xc lp kiu ch vi cc font
ch khc nhau.
Trong int font c xc lp thng qua cc hng sau:
TN FONT

Gi tr

ngha

DEFAULT_FONT

Font 8x8 bit-mapped

TRIPLEX_FONT

Stroked triplex font

SMALL_FONT

Stroked small font

SANS_SERIF_FONT

Stroked sans-serif font

GOTHIC_FONT

Stroked gothic font


169

Mc lc

int direction c xc nh nu HORIZ_DIR = 0 l nm ngang t tri qua phi,


VERT_DIR =1 l thng ng t di ln trn.
int charsize nhn gi tr t 1 n 10 l h s phng i ch.
settextjustification( int hoz, int vert) xc nh v tr dng vn bn c a ra mn
hnh ho bi outtext() v outtextxy().
Trong int hoz c th nhn mt trong cc hng sau:
LEFT_TEXT =0 vn bn xut hin pha bn tri con tr mn hnh ho
CENTER_TEXT =1 vn bn xut hin gia vi tm l con tr mn hnh
ho
RIGHT_TEXT =2 vn bn xut hin pha bn phi con tr mn hnh ho
Cn int vert l tham s c th nhn cc gi tr sau:
BOOTTOM_TEXT=0 vn bn xut hin pha trn con tr
CENTER_TEXT=1 vn bn xut hin quanh con tr
TOP_TEXT=2 vn bn xut hin pha di con tr
textheight(char *s) tr v chiu cao (theo pixel) ca chui do s tr ti. Vi 8x8 bit
map Font v h s khuych i ch l 1 th textheight(H)=8
textwidth(char *s) tr v chiu di ca chui tnh theo pixel.
3.8. Ca s (viewport)

viewport l 1 vng hnh ch nht trn mn hnh ho ging nh window trong


textmode.
setviewport(int x1, int y1, int x2, int y2, int clip) trong (x1,y1,x2,y2) l gc tri
trn v gc phi di tho mn iu kin nh sau:
0<=x1 <= x2 v 0<= y1 <= y2
Tham s clip: clip=1 khng cho php v ra ngoi viewport
clip=0 cho php v ra ngoi viewport
getviewsettings(struct viewporttype *vp) nhn viewport hin hnh,
struct viewporttype {
int left,top,right,bottom;
int clip;
}

clearviewport(void) xo viewport
cleardevice(void) xo mi th trn mn hnh v a con tr v to (0,0) ca mn
hnh
Ch : nh s dng viewport ta c th vit cc chng trnh ho c trc to ,
bng cch thit lp viewport vi clip=0 (cho php v ra ngoi gii hn)
3.9. To hnh nh chuyn ng

Nguyn s mi m chng ta s xy dng l to hnh nh chuyn ng trn mn hnh


ho. V nguyn tc, c th to nn nhng hnh nh chuyn ng chng ta cn c
mt hnh mu, sau lu hnh mu trn mn hnh ho li bng ch th getimage(int x1,
170

Mc lc

int y1, int x2, int y2, void far *bitmap); trong bitmap l min nh dng lu hnh nh
ca hnh ch nht c to (x1,y1) v (x2, y2) trn mn hnh ho.
Ch th getimagesize(int x1, int y1, int x2, int y2) dng xc nh kch thc b
nh dng ct hnh nh gii hn trong hnh ch nht c to (x1, y1), (x2,y2).
Ch th putimage(int x, int y, void far * bitmap, int copymode) dng khi phc
li hnh nh c ct gi bng getimage(). Ch th putimage() kt hp vi ch th lm
tr (delay() ) sao cho s cc hnh nh hin th trn mn hnh ho khong 24 hnh/giy
chng ta s nhn c mt hnh nh chuyn ng.
V d 1: To hnh nh chuyn ng l mt mi tn.
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define ARROW_SIZE 10
void draw_arrow(int x, int y);
int main(void) {
/* request autodetection */
int gdriver = DETECT, gmode, errorcode;
void *arrow;
int x, y, maxx;
unsigned int size;
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "\\TC\\BGI");
/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) { /* an error occurred */
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}
maxx = getmaxx(); x = 0;
y = getmaxy() / 2;
/* draw the image to be grabbed */
draw_arrow(x, y);
/* calculate the size of the image */
size = imagesize(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE);
/* allocate memory to hold the image */
arrow = malloc(size);
/* grab the image */
getimage(x, y-ARROW_SIZE, x+(4*ARROW_SIZE), y+ARROW_SIZE, arrow);
/* repeat until a key is pressed */
while (!kbhit()){
/* erase old image */
putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);
x += ARROW_SIZE;
if (x >= maxx)
x = 0;
/* plot new image */
putimage(x, y-ARROW_SIZE, arrow, XOR_PUT);

171

Mc lc
}
/* clean up */
free(arrow);
closegraph();
return 0;
}
void draw_arrow(int x, int y) {
/* draw an arrow on the screen */
moveto(x, y);
linerel(4*ARROW_SIZE, 0);
linerel(-2*ARROW_SIZE, -1*ARROW_SIZE);
linerel(0, 2*ARROW_SIZE);
linerel(2*ARROW_SIZE, -1*ARROW_SIZE);
}

Cc code chng trnh v d cho bi tp lp trnh


Bi 1: quay i tng
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#include<alloc.h>
#define RADS 0.017453293
struct point{
int x,y,z;
}
a[4]={
{110,180,80},
{10,200,80},
{120,50,80},
{110,180,250}
};
int noi[4][4];
void Bresenham_Line(int x1,int y1, int x2, int y2, int c){
if(x1 == x2){
int i;
if(y1 < y2)
for(i = y1; i <= y2;i ++){
putpixel(x1,i,c);
delay(10);
}
else
for(i = y2; i<= y1; i ++){
putpixel(x1,i,c);
delay(10);
}
}
if(y1 == y2){
int i;
if(x1 < x2)
for(i = x1; i <= x2; i ++){
putpixel(i,y1,c);delay(10);

172

Mc lc
}
else
for(i = x2; i <= x1; i ++){
putpixel(i,y1,c);
}
}
if(x1 < x2){
if(y1 < y2) {
if((y2 - y1)/(x2-x1) < 1){
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = 2*Dy - Dx;
putpixel(x1,y1,c);
for(i = x1; i < x2; i ++){
if(p < 0)
p += 2*Dy;
else{
p += 2*(Dy - Dx);
y1 ++;
}
x1 ++;
putpixel(x1,y1,c);
}
}
else{
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = 2*Dx - Dy;
putpixel(x1,y1,c);
for(i = y1; i < y2; i ++){
if(p < 0)
p += 2*Dx;
else{
p += 2*(Dx - Dy);
x1 ++;
}
y1 ++;
putpixel(x1,y1,c);
}
}
}
if(y1 > y2)
{
if((y2 - y1)/(x2 - x1)> -1 ){
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = 2*Dy + Dx;
putpixel(x1,y1,c);
for(i = x1; i <= x2; i ++){
if(p > 0)
p += 2*Dy;

delay(10);

delay(10);

delay(10);

173

Mc lc
else{
p += 2*(Dy + Dx);
y1-- ;
}
x1 ++;
putpixel(x1,y1,c);

delay(10);

}
}
else {
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = 2*Dx + Dy;
putpixel(x1,y1,c);
for(i = y1; i >= y2; i --){
if(p < 0)
p += 2*Dx;
else{
p += 2*(Dx + Dy);
x1++ ;
}
y1 --;
putpixel(x1,y1,c);
delay(10);
}
}
}
}
if(x1 > x2){
if(y1 < y2)
{
if((y2-y1)/(x2-x1) > -1){
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = -2*Dy - Dx;
putpixel(x1,y1,c);
for(i = x1; i > x2; i --){
if(p < 0){
p=p - 2*Dy - 2*Dx;
y1 ++;
}
else
p =p - 2*Dy;
x1 --;
putpixel(x1,y1,c);delay(10);
}
}
else {
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = -2*Dx - Dy;
putpixel(x1,y1,c);
for(i = y1; i < y2; i ++){

174

Mc lc
if(p < 0)
p -= 2*Dx;
else{
p -= 2*(Dx + Dy);
x1 --;
}
y1 ++;
putpixel(x1,y1,c);
delay(10);
}
}
}
if(y1 > y2){
if((y2-y1)/(x2-x1) < 1) {
int i;
int Dx = x2 - x1;
int Dy = y2 - y1;
int p = 2*Dy - Dx;
putpixel(x1,y1,c);
for(i = x1; i > x2; i --){
if(p > 0){
p =p - 2*Dy +2*Dx ;
y1--;
}
else
p -= 2*Dy;

x1 --;
putpixel(x1,y1,c);
}
}
else
{
int i;
int Dx = x1 - x2;
int Dy = y1 - y2;
int p = 2*Dx + Dy;
putpixel(x1,y1,c);
for(i = y1; i > y2; i --){
if(p < 0) {
p =p - 2*Dx + 2*Dy
x1 --;
}
else
p =p - 2*Dx ;
y1 --;
putpixel(x1,y1,c);
}

delay(10);

delay(10);

}
}
}
}
void Dothi(){

175

Mc lc
Bresenham_Line(getmaxx()/2,getmaxy()/2,getmaxx()-10,getmaxy()/2,15);
Bresenham_Line(getmaxx()/2,10,getmaxx()/2,getmaxy()/2,15);
Bresenham_Line(getmaxx()/2,getmaxy()/2,getmaxx()/2170,getmaxy()/2+170,15);
Bresenham_Line(getmaxx()/2-170,getmaxy()/2+170,getmaxx()/2170,getmaxy()/2+166,15);
Bresenham_Line(getmaxx()/2-170,getmaxy()/2+170,getmaxx()/2163,getmaxy()/2+167,15);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(getmaxx()-9,getmaxy()/2+1," ");
outtextxy(getmaxx()-9,getmaxy()/2+10,"y");
outtextxy(getmaxx()/2,10,"-");
outtextxy(getmaxx()/2 - 10,10,"z");
outtextxy(getmaxx()/2-155,getmaxy()/2+170,"x");
}
point Diem3d(int x , int y , int z){
point p;
if(x>=0&&y>=0&&z>=0) {
p.x = int(getmaxx()/2+y - x*cos(RADS*45));
p.y = int(getmaxy()/2-z + x*cos(RADS*45));
}
if(y>=0&&x<0&&z>=0) {
p.x = int(y+getmaxx()/2-x*cos(RADS*45));
p.y = int(getmaxy()/2-z+x*cos(RADS*45));
}
if(x>=0&&y<0&&z>=0) {
p.x = int(getmaxx()/2+y-x*cos(RADS*45));
p.y = int(getmaxy()/2-(z-x*cos(RADS*45)));
}
if(x>=0&&y>=0&&z<0) {
p.x = int(getmaxx()/2+y-x*cos(RADS*45));
p.y = getmaxy()/2-z+x*cos(RADS*45);
}
if(y>=0&&x<0&&z<0) {
p.x = int(getmaxx()/2+y-x*cos(RADS*45));
p.y = int(getmaxy()/2+(-z-x*cos(RADS*45)));
}
if(x>=0&&y<0&&z<0) {
p.x = int(getmaxx()/2+y-x*cos(RADS*45));
p.y = int(getmaxy()/2-z+x*cos(RADS*45));
}
if(z>=0&&y<0&&x<0) {
p.x = int(getmaxx()/2-(-y+x*cos(RADS*45)));
p.y = int(getmaxy()/2-(z-x*cos(RADS*45)));
}
if(x<0&&y<0&&z<0) {
p.x = int(getmaxx()/2+y-x*cos(RADS*45));
p.y = int(getmaxy()/2-z+x*cos(RADS*45));
}
return(p);
}
point hinhchieu(int &x, int &y , int &z , int chieu){
point p;

176

Mc lc
if(chieu==1){
p.x =int( getmaxx()/2+y - x*cos(RADS*45));
p.y =int( getmaxy()/2 + x*cos(RADS*45));
}
if(chieu==2){
p.x =int ( getmaxx()/2+y-x*cos(RADS*45)-y);
p.y =int ( getmaxy()/2-z+x*cos(RADS*45));
}
if(chieu == 3){
p.x =int( getmaxx()/2+y-x*cos(RADS*45)+x*sin(RADS*45));
p.y =int( getmaxy()/2-z);
}
return(p);
}
point quay(int &x, int &y, int &z, int goc , int chieu){
point p;
if(chieu==1){
p.x = x*cos(RADS*goc) + z*sin(RADS*goc);
p.z = -x*sin(RADS*goc) + z * cos(RADS*goc);
p.y = y;
}
if(chieu==2){
p.y = y*cos(RADS*goc) - z*sin(RADS*goc);
p.z = y*sin(RADS*goc) + z * cos(RADS*goc);
p.x =x;
}
if(chieu==3) {
p.x = x*cos(RADS*goc)-y*sin(RADS*goc);
p.y = x*sin(RADS*goc)+y*cos(RADS*goc);
p.z = z;
}
return p;
}
void chieumat(point k[],int t, int m ){
int i,j=0;
int n[4][4];
for(i = 0 ; i<4 ; i++)
for(j = 0 ; j<4 ; j++) {
n[i][j]=1;
n[j][i]=1;
}
for(i = 0 ; i< 4 ; i++) {
k[i] = hinhchieu(k[i].x,k[i].y,k[i].z,t);
}
for( i = 0 ; i< 4 ; i++)
for( j = 0 ; j< 4 ; j++){
if(i!=j&&n[i][j]==1&&n[j][i]==1){
Bresenham_Line(k[i].x,k[i].y,k[j].x,k[j].y,m);
n[i][j]=0;
n[j][i]=0;
}
}
}

177

Mc lc
void main(){
clrscr();
point b[4],c[4],l[4];
int j=0;
int goc[2]={45,35};
int driver = DETECT, mode;
initgraph(&driver,&mode,"c:\\tc\\bgi");
Dothi();
for(int i = 0; i < 4; i ++)
b[i] = Diem3d(a[i].x,a[i].y,a[i].z);
for( i = 1; i < 4; i ++ ){
Bresenham_Line(b[j].x,b[j].y,b[i].x,b[i].y,10);
}
Bresenham_Line(b[1].x,b[1].y,b[2].x,b[2].y,10);
Bresenham_Line(b[1].x,b[1].y,b[3].x,b[3].y,10);
Bresenham_Line(b[2].x,b[2].y,b[3].x,b[3].y,10);
settextjustify(LEFT_TEXT,RIGHT_TEXT);
printf("\nQuay quanh truc : oy goc 45");
printf("\nQuay quanh truc : ox goc 35.5");
for( i = 0 ; i< 4 ; i++){
c[i] = quay(a[i].x , a[i].y , a[i].z , goc[1] ,1);
}
for(i = 0 ; i< 4 ; i++) {
c[i] = quay(c[i].x,c[i].y,c[i].z,goc[2],2);
}
for(i = 0; i< 4; i ++)
l[i] = c[i];
for( i = 0; i < 4; i ++)
c[i] = Diem3d(c[i].x,c[i].y,c[i].z);
outtextxy(10,110,"Chon mat chieu: ");
outtextxy(10,120,"xoy: Bam so 1.");
outtextxy(10,130,"xoz: Bam so 2.");
outtextxy(10,140,"yoz: Bam so 3.");
outtextxy(10,150,"Bam so 4 de ket thuc");
char m;
do{
m = getch();
for(i = 0;i < 4; i ++)
c[i] = l[i];
switch (m){
case '1' :{
chieumat(c,1,5);
break;
}
case '2' :{
chieumat(c,2,7);
break;
}
case '3' : {
chieumat(c,3,9) ;
break;
}
}

178

Mc lc
}while( m !='4');
closegraph();
}

Bi 2: xn ta
#include <conio.h>
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#define ROUND(a) ((double)(a+0.5)
#define TRUE 1
#define FALSE 0
int cliptest(double p, double q, double *u0, double *u1){
double r;
int retVal = TRUE;
if (p < 0.0){
r = q / p;
if (r > *u1)
retVal = FALSE;
else
if (r > *u0)
*u0 = r;
}
else
if ( p > 0.0){
r = q / p;
if (r < *u0)
retVal = FALSE;
else
if (r < *u1)
*u1 = r;
}
else{
if (q < 0.0)
retVal = FALSE;
}
return (retVal);
}
void clipline(double x1, double y1, double x2, double y2,
double xmin, double ymin, double xmax, double ymax){
double u0 = 0.0, u1 = 1.0, dx, dy;
double oldx1, oldy1, oldx2, oldy2;
oldx1 = x1;
oldy1 = y1;
oldx2 = x2;
oldy2 = y2;
dx = x2 - x1;
if (cliptest(-dx, x1 - xmin, &u0, &u1))
if (cliptest(dx, xmax-x1, &u0, &u1)){
dy = y2 - y1;
if (cliptest(-dy, y1 - ymin, &u0, &u1))
if (cliptest(dy, ymax - y1, &u0, &u1)){
if (u1 < 1.0){
x2 = x1 + u2 * dx;

179

Mc lc
y2 = y1 + u2 * dy;
}
if (u0 > 0.0){
x1 += u0 * dx;
y1 += u0 * dy;
}
setcolor(RED);
line(oldx1, oldy1, x1, y1);
line(x2, y2, oldx2, oldy2);
setcolor(YELLOW);
line(x1, y1, x2, y2);
}
}
}
void main(){
int gr_drive = DETECT, gr_mode;
char c;
double x1, y1, x2, y2;
initgraph(&gr_drive, &gr_mode, "");
rectangle(100,50, getmaxx()-100, getmaxy()-50);
randomize();
outtextxy(100, getmaxy()-10, "Nhan phim bat ky de sinh duong khac;
ESC de thoat");
do {
x1 = random(getmaxx() / 2);
y1 = random(getmaxy());
x2 = getmaxx()/2 + random(getmaxx() / 2);
y2 = random(getmaxy());
clipline(x1, y1, x2, y2, 100, 50, getmaxx()-100, getmaxy()-50);
c = getch();
} while (c != 27);
closegraph();
}

Bi 3: Php chiu
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#include<alloc.h>
#define RADS 0.017453293
struct point{
int x,y,z;
}
a[8]={
{30,100,50},
{30,230,50},
{30,230,90},
{30,100,90},
{120,100,50},
{120,230,50},
{120,230,90},

180

Mc lc
{120,100,90}
}
int n = 3,*d;
int noi[20][20];
void Dothi(){
line (getmaxx()/2,getmaxy()/2,getmaxx()-10,getmaxy()/2);
line (getmaxx()/2,10,getmaxx()/2,getmaxy()/2);
line (getmaxx()/2,getmaxy()/2,getmaxx()/2-170,getmaxy()/2+170);
line
(getmaxx()/2-170,getmaxy()/2+170,getmaxx()/2170,getmaxy()/2+166);
line
(getmaxx()/2-170,getmaxy()/2+170,getmaxx()/2163,getmaxy()/2+167);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(getmaxx()-9,getmaxy()/2+1,"0");
outtextxy(getmaxx()-9,getmaxy()/2+10,"y");
outtextxy(getmaxx()/2,10,"-");
outtextxy(getmaxx()/2 - 10,10,"z");
outtextxy(getmaxx()/2-155,getmaxy()/2+170,"x");
}
point Diem3d(int &x, int &y, int &z){
point p;
p.x = int(getmaxx()/2+ y - x*cos(RADS*45));
p.y = int(getmaxy()/2 - z + x*cos(RADS*45));
return p;
}
point chance(int &x , int &y , int &z){
point p;
if(x>=0&&y>=0&&z>=0){
p.x = getmaxx()/2+y - x*cos(RADS*45);
p.y = getmaxy()/2-z + x*cos(RADS*45);
}
if(y>=0&&x<0&&z>=0){
p.x = y+getmaxx()/2-x*cos(RADS*45);
p.y = getmaxy()/2+z-x*cos(RADS*45);
}
if(x>=0&&y<0&&z>=0){
p.x = getmaxx()/2+y-x*cos(RADS*45);
p.y = getmaxy()/2-(z-x*cos(RADS*45));
}
if(x>=0&&y>=0&&z<0){
p.x = getmaxx()/2+(sqrt(pow(x,2)+pow(y,2)))*cos(RADS*45);
p.y = getmaxy()/2+(sqrt(pow(x,2)+pow(y,2)))*cos(RADS*45)-z;
}
if(y>=0&&x<0&&z<0){
p.x = getmaxx()/2+y-x*cos(RADS*45);
p.y = getmaxy()/2+(-z-x*cos(RADS*45));
}
return(p);
}
point hinhchieu(int &x, int &y , int &z , int chieu){
point p;
if(chieu==1){

181

Mc lc
p.x =int( getmaxx()/2+y - x*cos(RADS*45));
p.y =int( getmaxy()/2+x*cos(RADS*45));
}
if(chieu==2){
p.x =int ( getmaxx()/2+y-x*cos(RADS*45)-y);
p.y =int ( getmaxy()/2-z+x*cos(RADS*45));
}
if(chieu == 3){
p.x =int( getmaxx()/2+y-x*cos(RADS*45)+x*sin(RADS*45));
p.y =int( getmaxy()/2-z);
}
return(p);
}
point quay(int &x, int &y, int &z, int goc , int chieu){
point p;
if(chieu==1){
p.x = x*cos(RADS*goc) + z*sin(RADS*goc);
p.z = -x*sin(RADS*goc) + z * cos(RADS*goc);
p.y = y;
}
if(chieu==2){
p.y = y*cos(RADS*goc) - z*sin(RADS*goc);
p.z = y*sin(RADS*goc) + z * cos(RADS*goc);
p.x =x;
}
if(chieu==3){
p.x = x*cos(RADS*goc)-y*sin(RADS*goc);
p.y = x*sin(RADS*goc)+y*cos(RADS*goc);
p.z = z;
}
return p;
}
void chieumat(point k[],int t, int &m ){
int i,j;
for(i = 0 ; i< 8 ; i++)
k[i] = hinhchieu(k[i].x,k[i].y,k[i].z,t);
for( i = 0 ; i< 8 ; i++)
for( j = 0 ; j< 8 ; j++){
if(noi[i][j]==1&&noi[j][i]==1){
Bresenham_Line(k[i].x,k[i].y,k[j].x,k[j].y,m);
}
}
noi[0][3]=1,noi[3][0]=1;
noi[4][7]=1,noi[7][4]=1;
noi[3][7]=1,noi[7][3]=1;
}
void main(){
clrscr();
d = &n;
point b[8],g[3][8],c[8],l[8];
int t, goc ;
int driver = DETECT, mode;
initgraph(&driver,&mode,"c:\\tc\\bgi");

182

Mc lc
Dothi();
for(int i = 0; i < 8; i ++)
b[i] = Diem3d(a[i].x,a[i].y,a[i].z);
for( i = 0; i < 3; i ++ ){
line(b[i].x,b[i].y,b[i + 4].x,b[i + 4].y);
line(b[i].x,b[i].y,b[i+1].x,b[i+1].y);
line(b[i+4].x,b[i+4].y,b[i+5].x,b[i+5].y);
noi[i][i+4]=1 , noi[i+4][i] =1;
noi[i][i+1] = 1, noi[i+1][i]=1;
noi[i+4][i+5]=1, noi[i+5][i+4]=1;
}
noi[0][3]=1,noi[3][0]=1;
noi[4][7]=1,noi[7][4]=1;
noi[3][7]=1,noi[7][3]=1;
line(b[0].x,b[0].y,b[3].x,b[3].y);
line(b[4].x,b[4].y,b[7].x,b[7].y);
line(b[3].x,b[3].y,b[7].x,b[7].y);
settextjustify(LEFT_TEXT,RIGHT_TEXT);
printf("\nQuay quanh truc :");
printf("\ny.Bam so 1");
printf("\nx.Bam so 2.");
printf("\nz.Bam so 3.");
scanf("%d",&t);
printf("\nQuay goc bao nhieu do:");
scanf("%d",&goc);
for( i = 0 ; i<= 7 ; i++){
c[i] = quay(a[i].x , a[i].y , a[i].z , goc ,t);
l[i] = c[i];
}
for( i = 0; i < 8; i ++)
c[i] = Diem3d(c[i].x,c[i].y,c[i].z);
for( i = 0; i < 3; i ++ ){
line(c[i].x,c[i].y,c[i + 4].x,c[i + 4].y);
line(c[i].x,c[i].y,c[i+1].x,c[i+1].y);
line(c[i+4].x,c[i+4].y,c[i+5].x,c[i+5].y);
}
line(c[0].x,c[0].y,c[3].x,c[3].y);
line(c[4].x,c[4].y,c[7].x,c[7].y);
line(c[3].x,c[3].y,c[7].x,c[7].y);
outtextxy(10,410,"Chon mat chieu: ");
outtextxy(10,420,"xoy: Bam so 1.");
outtextxy(10,430,"xoz: Bam so 2.");
outtextxy(10,440,"yoz: Bam so 3.");
outtextxy(10,450,"Bam so 4 de ket thuc");
char m;
do{
m = getch();
for(i = 0;i < 8; i ++)
c[i]= l[i];
switch (m){
case '1' :{
chieumat(c,1,*(d));
break;

183

Mc lc
}
case '2' :{
chieumat(c,2,*(d));
break;
}
case '3' :
{
chieumat(c,3,*(d)) ;
break;
}
}
}while( m !='4');
closegraph();
}

184

Ti liu tham kho

TI LIU THAM KHO


[1] James D.Foley, Andrie van Dam, Steven K.Feiner, Jonhn F. Hughes, Computer
Graphics Principles and Practice, Addison Wesley, 1994.
[2] Hong Kim, Dng Anh c, L nh Duy, V Hi Qun. Gio trnh c s
ho My tnh, NXB Gio dc, 2000.
[3] L Tn Hng, Hunh Quyt Thng. K thut ho my tnh, NXB khoa hc v
k thut, 2002.
[4] Steven Harrington, Computer Graphics A Programming Approach, McGraw Hill
International Edition, 1987.
[5] Gerald Farin, Curves and Surfaces for Computer Aided Geometric Design A
Practical Guide, Academic Press Inc, 1990.
[6] [Watt92] ACM Press, A. Watt and M. Watt. Advanced Animation and Rendering
Techniques. Addison Wesley Longman Limited, Edinburgh Gate, England, 1992.
[7] [CG92] Springer, M.de Berg, M. van Kreveld, M. Overmars, O. Schwarzkopf.
Computational Geometry. Springer-Verlag 1997, Germany.

[8] [Jensen2000] Henrik Wann Jensen, Niels Jrgen Christensen. A Practical Guide
to Global Illumination using Photon Maps. Siggraph 2000 Course 8.

185

You might also like