Professional Documents
Culture Documents
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
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.
1.2. CC K THUT HO
1.2.1. K thut ho im (Sample based-Graphics)
Hnh 1.1 nh ho im
Cc tham
s t trt
T trt
Thit b ra
Wireframe Model
Skin Model
Skeletal Model
Muscle Model
Hair Model
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.
ho minh ho
ho hot hnh v ngh thut
K thut ho
X l nh
X l
ho
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
12
13
200, 600
5/1000 inch
1500
My v 6,15/1000 inch
1000, 2000
14
NEC
Hybrid
Hitachi EDP
Standard Dot-trio
SONY
Trinitron
15
(interaction data)
(Display
commands)
00000000000000
00000000000100
0000
Keyboard
Display
processo
Data input
CRT
16
24
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
Hnh 1.10 Cng ngh truyn nh sng trong mn hnh tinh th lng
CRT Displays (mn hnh CRT)
Advantages (u im)
Mu sc a dng (C su v rng)
Mu sc bo ho v t nhin
Hnh hay b mo ti 4 gc
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
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
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
20
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
c u [0,1]
x(u) = x1 + u( x2 - x1 )
y (u)= y1 + u( y2 - y1 )
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
21
22
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
x < x2
no
Kt thc
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;
23
d>0
A
B
b=-dx v c= Bdx
24
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
no
Kt thc
x2 + y2 = r2
25
26
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
d2
27
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
color);
color);
color);
color);
color);
color);
color);
color);
29
tiep tuyen = -1
gradient
B
M
i
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
32
33
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)
Tam gic
li
lm
t ct
min
34
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]); }
4-connected 8-connected
35
int i,j;
yqmax
yq
yq
yqmin
x
37
Pi+1
Pi-1
Pi+1
Pi
Pi
Pi-1
Pi
Pi+1
Pi+1
Pi-1
Pi
B
y
neo
neo
x
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
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
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
41
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 ']
0 1
x = ax
y = y
[X ]* [T ] = [x
a 0
y ]*
= [(ax ) y ] = [x'
0 1
y ']
0 d
[X ]* [T ] = [x
a 0
y ]*
= [ax dy ] = [x'
0 d
y ']
0 Sy
42
Sy=-1
Sx=Sy=-1
P
i xng qua y
i xng qua x
i xng qua gc to
[X ]* [T ] = [x
1 b
y ]*
= [x bx + y ] = [x'
0 1
y ']
P
y=bx+y
bx
[X]* [T ] = [x
1 0
y ]*
= [x + cy
c 1
cy
y ] = [x '
y ']
x=x+cy
P
43
Ta c:
P[x y]= [rcos rsin]
P[x y] = [rcos(+) rsin(+)]
P[x y]
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
1 0
0 1
Ta c:
44
[X '] = [X ]* [T1] = [x
0 1
y ]*
= [ y
1 0
x]
1 0
x ]*
= [ y x]
0 1
[X "] = [X ']* [T 2] = [ y
[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 .
P = P + [T]
[T ] =
dx
dy
P ' = P.[T ] = [x
a b 0
y 1]* c d 0
dx dy 1
x=ax + cy +dx
45
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
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
( x, y )
( x, y )
cos sin 0
y ' 1] = [ x y 1] sin cos 0
0
0
1
= [( x cos y sin ) ( x sin + y cos ) 1]
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);
47
[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
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
48
[ 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]
0 0 0
0
0
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
z' = z
cos
sin
[Tz ] =
0
sin
cos
0
0
0 0
0 0
1 0
0 1
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
y' = y
cos
0
[Ty ] =
sin
0 sin
1
0
0 cos
0
0
0
0
0
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
=
.
.
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
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
51
Bc 1:
y
b
c
z
x
V
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
b
a + b2 + c2
2
a2 + c2
a2 + b2 + c2
52
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
1
v
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
tt
,Z
1
v
tt +
53
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
P
G
Q
Q
M
x
z
56
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 )
1
[Ttt ] = 0
xw
0
1
yw
0
0
1
xv max xv min
x
xw min
w max
[T s ] =
0
0
yv max yv min
y w max y w min
0
1
[Ttt ] = 0
xv
0
1
yv
0
0
1
58
xv max xv min
x w max xw min
0
[T ] =
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
59
B(1000)
D(1010)
ymax
A(0001)
ymin
xmin
C(0100)
xmax
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)
y c = y1 + m( xc x1 )
xmin = -3
61
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;
}
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
P2
ymax
left
P1
Ul
U1=1
Ur
Ut
U0=0
right
ymin
Ub
bottom
xmin
xmax
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
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
u1=-2/5 (uk=qk/pk)
P2 = 5 q2=6
u2=6/5
P3 = -2q3=0
u3=0
P4 = 2 q4=6
u4=3
u3=5/6
P4 = -6 q4=1
u4=-1/6
Vy
65
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)
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
67
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
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
I2
I1
P2(6,4)
C(5,3)
I3
P1(-1,2)
A(1,1)
B(5,1)
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
xc = 1
y c = y1 + ( xc x1 )m
= 2 + (1 (1)). 2 = 2 4
7
7
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.
2.
3.
4.
5.
70
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
71
Exploded/cutaway
scenes (ct lt)
Hnh chiu ng
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)
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
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
Xin
Trc giao
Mt im
Axonometric
Chiu
bng
Hai im
Cavalier
Trimetric
Chiu
ng
Cabinet
Chiu
cnh
Ba im
Dimetric
Isometric
Php chiu
khc
73
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
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
f x = x x'2 + y x'2
f y = x'2y + y '2y
f z = x'2z + y '2z
75
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.
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
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
76
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
fz = 0
fz =1/2
fz = 1
fz = 0
fz =1/2
fz = 1
= sin 1 (
Khi fz =1/2 th:
2 2
1/ 2
= sin 1 (
) = sin 1 (0.378) 22.208
7/4
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
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
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
= 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
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
D
H
G
E
x
A E
F B
A
z
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
[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
[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'
82
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
Mt tm chiu ti P(0,0,10)
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
o Vt l - physics
o Sinh l - physiology
6.1.2. Yu t vt l
Chng 6: Mu sc trong ho
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
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
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
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
27
86
88
Chng 6: Mu sc trong ho
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
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
I255=rI254=r255I0=1
6.2.2. Php hiu chnh gama
90
Chng 6: Mu sc trong ho
91
Chng 6: Mu sc trong ho
Chng 6: Mu sc trong ho
6.2.4. Ma trn Dither v php ly xp x bn tng
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
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.
93
Chng 6: Mu sc trong ho
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).
Xg
Yg
Zg
X b R
Yb G
Z b B
Chng 6: Mu sc trong ho
C 1 R
M = 1 G
Y 1 B
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
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
Chng 6: Mu sc trong ho
97
Chng 6: Mu sc trong ho
98
Chng 6: Mu sc trong ho
Chng 6: Mu sc trong ho
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);
X a11
Y = a
21
Z a31
a12
a 22
a32
a13 R
a 23 G
a33 B
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
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
103
Chng 8: nh sng
Chng 8: nh sng
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
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 .
Chng 8: nh sng
(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
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
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)!
107
Chng 8: nh sng
7.1.5. ng cong B-spline
Chng 8: nh sng
0 p0
0 1
0 p1
.
3 2 1 p'0
2 1
1 p '1
Pn-1
Pn-1
Po
z
P1
Chng 8: nh sng
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
(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.
N
i =0
i,k
(u) = 1
111
Chng 8: nh sng
Cp (k)
Vector nt (m=n+k)
[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
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.
s lng nt (m = n + k)
[0 0 1 2 3 3]
[0 0 0 1 2 2 2]
[0 0 0 0 1 1 1 1]
1=<i<=k
k+1<i<=n+1
ui = n-k+2
n+1<i<=n+k+1
113
Chng 8: nh sng
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
Chng 8: nh sng
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.
115
Chng 8: nh sng
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.
k1 + k2 + k3 + ... + kn =1
Chng 8: nh sng
7.2.3. M hnh ho cc mt cong (Surface Patches)
7.2.3.1. Mt k (Ruled Surface)
Surface
3
2.
2
1.
1
0.
Duong
cong
Duong
0.
cong
0.
0.
1 1
0.
0.
0.
0.
117
Chng 8: nh sng
cos
2
3
7
=
2
3
4
sin
2
3
3 3
Chng 8: nh sng
0
cos(
2
v
)
sin(
2
v )
T (v ) =
0 sin(2v ) cos(2v )
0
0
10v
0
0
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
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
120
Chng 8: nh sng
3
Q(u , v ) = Cij u i v j
0 u, v 1
i =0 j =0
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
[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
121
Chng 8: nh sng
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
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}
Chng 8: nh sng
m
Q(u , v ) = [U ] [N ] [B ] [M ] [V ]
T
[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
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
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.
Q (u, w) = N i ,k (u ). M j ,h ( w).Pi , j
i =1 j =1
(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.
Chng 8: nh sng
2.
3.
4.
126
Chng 8: nh sng
CHNG 8: NH SNG
8.1. GII THIU
8.1.1. Mc tiu chnh 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
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).
Khi
nim
nh ngha
P l im m ta tnh ton cc gi tr mu sc
129
Chng 8: nh sng
Q: v tr ca nh sng
(L + V )
2
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
Ii
Bc sng
(r,r)
hng tia i ra
(i,i)
Hng tia i vo
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;
Chng 8: nh sng
8.2.4. Thuc tnh khuch tn ca vt cht
Khi nim
nh ngha
Diffuse
Specular
Chng 8: nh sng
on m rt gn:
Phong Calculation
return
AmbientColorCalculation()+DiffuseColorCalculation()+SpecularColorCalculation();
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
Chng 8: nh sng
R l tia ti ca nh sng.
Bin gii gia hai mi trng vt cht c gi l giao din.
Chng 8: nh sng
R = 2(N*L)N - L
Trong :
n1:
ch s khc x ca vt cht n
n2:
ch s khc x ca vt cht i
135
Chng 8: nh sng
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.
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).
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
Chng 8: nh sng
Chng 8: nh sng
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):
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
T khi :
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.
Chng 8: nh sng
Chng 8: nh sng
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 )
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:
Chng 8: nh sng
8.4.1. Raytracing
Chng 8: nh sng
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
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
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.
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 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.
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'
153
Hnh 9.8 Mc 3
V y l ng Sierpinski mc 4 v 8:
Hnh 9.9 Mc 4 v 8
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:
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)
2
L
= 2 3 Ln
n+1
(b)
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
9.4. TP MANDELBROT
9.4.1. t vn
(2)
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
162
xn+1 = Re(zn+1);
yn+1 = Im(zn+1).
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 =
164
y l nh ca 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();
}
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)
setcolor(int color)
t mu v cho nt v hin ti
getmaxcolor()
167
Mc lc
3.2. im
int getmaxy()
putpixel( x, y, color)
getpixel(x,y)
3.3. ng
Cc hm cho ng:
moveto(int x, int y)
getx(), gety()
lineto(int x, int y)
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)
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
Mc lc
3.6. a gic
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
XHATCH_FILL
INTERLEAVE_FILL
T ng t qung
WIDE_DOT_FILL
10
CLOSE_DOT_FILL
11
T bng du chm dy
3.7. Vn bn
Gi tr
ngha
DEFAULT_FONT
TRIPLEX_FONT
SMALL_FONT
SANS_SERIF_FONT
GOTHIC_FONT
Mc lc
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
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);
}
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
[8] [Jensen2000] Henrik Wann Jensen, Niels Jrgen Christensen. A Practical Guide
to Global Illumination using Photon Maps. Siggraph 2000 Course 8.
185