You are on page 1of 222

ho My tnh

Ths .Trn Thanh Phong


B mn k thut my tnh - 2011
Ni dung mn hc

Cc thut ton v ng.

Cc thut ton ct xn(Clipping).

Cc thut ton t mu.

Lp trnh ho.
Chng1. TNG QUAN

I. Cc khi nim c bn
1. ho my tnh
Mt lnh vc ca khoa hc my tnh nghin cu:
Cc thut ton, cc k thut kin to, x l v iu
khin hin th cc m hnh(model), hnh nh(image) trn
mn hnh my tnh
K thut my tnh, c bit l ch to phn cng(cc loi
mn hnh, cc thit b xut, nhp, cc v mch ha...).
2. K thut ha my tnh

2.1. K thut ho im
(Sample based-Graphics- ng dng ha da trn s ha).
Nguyn l:
Cc i tng ha c to ra bi li cc

pixel(picture element-im nh) ri rc.


Cc pixel ny c mt m t v ta xc nh v tr

v gi tr mu (sample values), thng thng l


sng hay mu sc.
Cc pixel ny c th c to ra bng thao tc s ha
nh bng cc chng trnh v hoc s dng thit b
nh my qut
Th d v ha im
K t B s dng k thut ha im
V on thng s dng k thut ha im

18
17
16
15
14
13
12
11
10

20 21 22 23 24 25 26 27 28 29 30
V ng trn s dng k thut ha im
2. K thut ha my tnh
2.2. K thut ho vector
(Geometry-based graphics
-ng dng ha da trn c trng hnh hc)
Nguyn l:
Dng cc c trng hnh hc v cc thuc tnh
m t i tng. Sau cc i tng s c
s ha phc v cho hin th.
Th d v ha vect
K t B s dng k thut ha vect
To im sng:
Mt chm cc in t (tia in
t) pht ra t mt sng in t,
3. Thit
vt qua cun li b hin
tia dn nth
v ho:
Mntrn
tr xc nh hnh CRT(Cathode
mn hnh c Ray Tube)
ph mt lp pht quang.

Ti mi v tr tng tc vi tia
int ht pht quang s pht
ln mt chm sng nh
sng ca im nh ph
thuc vo cng dng tia
in t. Lng ha mc sng
bng cc gi tr trong on [0,1]
To mu im sng:
+ Cu to im pht quang:
gm ba im pht quang
mu: R(red); G(green);
B(blue)
+ Ty theo pht sng ca
cc im pht quang mu
v s trn mu nhn
c im nh c mt
mu trong t nhin
+ im nh( Pixel Picture
Element): Phn t nh
nht trn mn hnh m ta
c th kim sot c
+ Thng tin v im nh: v
tr, sng, mu sc
c s ha dng nh
phn
4. Cc ch tiu k thut mn hnh ha

a) phn gii(Resulation): S im nh trn inch


theo chiu dc v chiu ngang. Thng c tnh
theo s im nh c c ca mn hnh.
V d: Ngang: 320 Dc: 200 phn gii : 320*200

b) su mu(Depth): S mu c th ca mt im
nh 2i
V d:1bit(2mu), 8bit(256mu), 24bit(16.777.216 mu)
5. Mt s chun mn hnh mu ha
Nm Chun phn gii S mu

1981 CGA 640 x 200 en trng


160 x 200 16 mu
1981 MDA 720 x 350 en trng
1984 EGA 640 x 350 16 mu trong 64 mu
1987 VGA 640 x 480 16 mu trong 256 mu
320 x 200 256 mu trong 256 mu
1990 XGA 800 x 600 16M mu
1024 x 768 16M mu
SXGA 1280 x 1024 16M mu
UXGA 1600 x 1200 16M mu
6. Cc ch hot ng mn hnh

a) Ch vn bn( Text Mode)


Ch hin th c cc k t trong bng m ASCII

Mn hnh chia thnh cc dng v cc ct im


nh: 80* 25 hoc 40*25. Giao im dng, ct l
ma trn im nh.
Qun l cc ma trn im nh, khng hin th
c hnh nh
6. Cc ch hot ng mn hnh

b) Ch ha( Graph Mode):

Qun l c tng im nh

Hin th c k t ln hnh nh :
hnh nh th hin bi li cc im nh
7. Cc lnh vc ca ho my tnh

1. Kin to ho
CAD/CAM System
ho minh ho

ho hot hnh v ngh thut

2. X l ho
X l nh

K thut nhn dng

K thut phn tch v to nh


8. Cc ng dng ca ha my tnh

To giao din
To biu dng trong thng mi, khoa hc v

k thut
T ng ha vn phng v ch bn in t

Thit k vi s tr gip ca my tnh

Lnh vc gii tr, ngh thut

Lch vc bn
9. Cc chun giao din ca h ho

CGI (Computer Graphics Interface System): H chun


cho cc phng php giao tip vi cc thit b ngoi vi.
PHIGS (Programmers Hierarchical Interactive Graphics
Standard): Xc nh cc phngphp chun cho cc
m hnh thi gian thc v lp trnh hng i tng.
OPENGL: Th vin ha ca hng Silicon Graphics,
c xy dng theo ng chun ca mt h ha
nm 1993.
DIRECTX:Th vin ho ca hng Microsoft,

Direct X/Direct3D 1997


Chng 2.
GII THUT V CC I TNG HA C S
I. im on thng:

1. im: x
1.1 Trong h trc ta thc: M
a) H trc s dng: h ta
Decartes( h trc qui c bn
tay phi) e2

b) M t im trong h trc ta O e1 y
e cac 2D: mt im trong
h trc e cac c m t
bng cp s (x,y) trong
x,y R
I. im on thng:

1.2 Trong h trc ta mn hnh:


a) H trc ta mn hnh: h trc x
qui c bn tay tri
b) M t im trong h trc ta
mn hnh : mi im c
biu din bi cp to (x,y),
y
nhng x,y N.Gi tr x,y b gii
hn theo gi tr phn gii ca
mn hnh

1.3 Hin th im: S dng hm


ha h thng
SetPixel(x,y: Integer; color: Word);
Trong :
x,y: ta ;color: gi tr mu
2. on thng:
B

2.1. V trong h trc ta thc:

T t im u mt A n im
u mt B.

A
2.2 Hin th trong h trc ta mn hnh
xi xi 1
im c xc yi 11

nh bc th i: ( xi , yi )
yi
im k tip:
( xi 1 , yi 1 )

xi xi 1
Ta c:
xi 1 xi 1; yi 1 { yi , yi 1}
yi 1
hoc
yi 1 yi 1; xi 1 {xi , xi 1} yi
II. Thut ton DDA(Digital Defrential
Annalyze)

1. Bi ton: Xy dng thut ton v ng thng qua hai im


A(x1,y1); B(x2,y2).
Phng trnh ng thng qua A,B:
y = mx+b vi m=(y2-y1)/(x2-x1); b=y1-mx1
Bin thin ca ng thng

Gimchm Gim nhanh Tng chm Tng nhanh


2. Phn tch: Begi
n
a)Trng hp x1= x2:
ymax:=Max(y1,y2)
ng thng AB ymin:=Min(y1,y2);
y:=ymin; x:=x1;
song song trc Oy
SetPixel(x,y,color)
b) Trng hp y1=y2:
S
ng thng AB
y<= ymax
song song trc Ox

(tng t) End

y := y+1
c) Xt trng hp 0< m <1
Gi s bc th i (i=0,1,) tm c im
hin th
( xi ; yi )
Gi im hin th bc (i+1) l ( xi 1 , yi 1 )
Ta c:
xi 1 xi 1

yi 1 yi , yi 1
2. Thut ton DDA

Gi (x,y) l im hin th ca ng thng


Trng hp 0<m1: x = 1

xi 1 xi 1

x : x 1

y : Round ( y m)
Trng hp m>1: y=1 ( hon i x cho y)

yi 1 y i 1

y : y 1

x : Round ( x 1 / m)

Tng t cho trng hp -1<m<=0; m<= -1


Thut ton DDA

(1) Nhp A(x1,y1); B(x2,y2)


(2) Tnh x = x2 - x1;y = y2 - y1; Step = Max(|x| , |y|)
(3) Khi to cc gi tr:
IncX = x/Step;IncY = y/Step; {bc tng khi v}
x = x1; y = y1;
(4) V im (x,y); {V im u tin}
(5) Cho i chy t 1 n Step:
x = x + IncX; y = y + IncY;
V im (Round(x),Round(y))
Bi tp: S dng thut ton DDA tm cc im hin th
ca on thng qua hai imA(1,2), B(13,8)

i 1 2 3 4 5 6 7 8 9 10 1 12 13
1
X+IncX 2 3 4 5 6 7 8 9 10 1 12 13
1
x 1 2 3 4 5 6 7 8 9 10 1 12 13
1
Y+IncY 2. 3 3. 4 4. 5 5. 6 6. 7 7.5 8
5 5 5 5 5
y 2 3 3 4 4 5 5 6 6 7 7 8 8
Cc im hin th on thng qua A(1,2); B(13,8)

7
6

1 2 3 4 5 6 7 8 9 10 11 12 13
III. Thut ton Bresenham

1. Bi ton : Tm cc im hin th on
thng qua hai im
A(x1,y1); B(x2,y2) yi+1 A
2. Phn tch d
Phng trnh ng thng: y = mx + b Xt y M
trng hp 0 < m < 1
yi d
Gi s im hin th bc th I l: 2
B 2
( xi , yi )
Gi im hin th bc (i+1) l
( xi 1 , yi 1 )
xi 1 xi 1 xi xi+1
Ta c:
yi 1 yi , yi 1
Doh s gc 0< m<=1,
nn:
yi+1
xi+1=xi+1 v
yi+1=yi hoc yi
yi+1=yi+1
yi-1

xi xi+1
Phng trnh ng
thng qua 2 im
(x1, y1) v (x2, y2) l
y=mx+b vi yi+1 P
(xi+1,y=f(xi+1)) d2
m=Dy/Dx v b=y1-mx1.
t d1=y-yi v d1
d2=(yi+1)-y, do vic yi S
chn ta ca yi+1 ph
xi xi+1=xi+1
thuc vo d1 v d2 ( hay
du ca (d1 - d2):
Nu d1-d2<0 th chn
yi+1=yi
Ngc li, chn
yi+1=yi+1
d1 - d2 = (2y 2yi 1) l mt s thc do cha m
Xt
pi = Dx (d1 - d2) = Dx (2y - 2yi - 1) = 2Dy xi - 2Dx yi + C
(C = 2Dy + (2b - 1)Dx)
Do du ca pi v (d1-d2) ging nhau nn khi xt du
ca pi th ta xc nh c yi+1
Mc khc,
pi+1 pi = (2Dy xi+1 - 2Dx yi+1 + C) - (2Dy xi - 2Dx yi + C)
= 2Dy 2Dx(yi+1 yi)
T y, ta suy ra cch tnh pi+1 theo pi:
Nu pi<0 th yi+1=yi nn pi+1 = pi + 2Dy
Ngc li th yi+1=yi+1 nn pi+1 = pi + 2Dy 2Dx
Gi tr p u tin c tnh ti (x1, y1) l
Begin
0< m <= 1

p = 2Dy - Dx;
const1=2Dy; const2=2(Dy-Dx);
x = x1; y = y1;putpixel(x,y,color);

x<x2 End

p<0

p=p+const2;
p=p+const1; y = y + 1;

x=x+1;
putpixel(x,y,color);
Begin
m>1

p = 2Dx - Dy;
const1=2Dx; const2=2(Dx-Dy);
x = x1; y = y1;putpixel(x,y,color);

y<y2 End

p<0

p=p+const2;
p=p+const1; x = x + 1;

y=y+1;
putpixel(x,y,color);
Begin

p = 2Dy - Dx;
const1=2Dy; const2=2(Dy-Dx);
x = x1; y = y1;putpixel(x,y,color);

x<x2 End

p<0

p=p+const2;
p=p+const1; y = y + 1;

x=x+1;
putpixel(x,y,color);
Bi tp: p dng thut ton Bresenham tm
cc im
hin th ng thng qua hai im A(1,2),
B(13,8)
i 1 2 3 4 5 6 7 8 9 10 1 12 13
1
x

y
Ve ng thang
theo thuat toan DDA(tt)
Ve ng thang
theo thuat toan DDA(tt)

2.Cac trng hp he so goc m cua phng trnh


ng
thang la : -1<m<0 ,m>1 , 0<m<1 , m<-1 . Do o
e co
the ve ng thang trong moi trng hp
chung ta phai
khao sat tat ca cac trng hp he so goc m .
3.Ngoai ra chung ta con phai xet 2 trng hp
ac biet cua
ng thang la :
- ng thang song song vi truc x ( y1 = y2 )
- ng thang song song vi truc y ( x1 = x2 )
Ve ng thang theo thuat toan
DDA(tt)
Xet trng hp 0<m<1 , x1<x2
Chung ta co :
x1<x2 0
y
1 x y
x

y = y2-y1

>
>
x = x2-x1
Ve ng thang theo thuat toan
DDA(tt)
Nhan xet :Do khoang bien thien cua
xXet trng
ln hn khoanghp 0<m<1
bien thien cua ,y x1<x2
,
do o se cho vong lap chay t x1
en x2 , tang gia tr x len mot n
v sau moi bc lap, the vao phng y 2 -y 1
trnh ng thang va tnh y theo x.
Chung ta co thuat toan tho nh sau
: >
- iem ve au tien : (x1,y1)
>
- for(x=x1 ; x<x2 ; x++) x 2 -x 1
{ y=m*x+b;
putpixel(x,round(y),color);
}
Ve ng thangtheo thuat toan
DDA(tt)
Xet trng hp 0<m<1 , x1<x2

Cai tien : gia s a ve c iem


(xi,yi) bc th i.Can
tm (x i+1 ,x
yi+1
i 1 xi bc
) 1 th i+1
Chung ta co : y
i 1
m. x b i 1
Lap he phng trnh sau :
y m . x b
i i

y y m .(x x ) m
i 1 i i 1 i

y y m
i 1 i
Ve ng thangtheo thuat toan
DDA(tt)
Xet trng hp 0<m<1 , x1<x2

T ket qua t he phng trnh tren ,


chung ta thay rang gia
tr y bc sau se bang gia tr y
bc trc cong them
m

Thuat toan tho ban au c viet lai nh


sau :
Ve ng thang
theo thuat toan DDA(tt)
Xet trng hp 0<m<1 , x1<x2

void DDA1(int x1, int y1, int x2, int y2, int color)
{ float y=y1;
float m= (float)(y2-y1)/((x2-x1);
putpixel(x1,y1,color);
for(int x=x1;x<x2;x++)
{ y+=m;
putpixel(x,round(y),color);
}
}
int round(float y ) { return (int)(y + 0.5);}
Ve ng thang theo thuat toan
DDA(tt)
Xet trng hp 0<m<1 , x1<x2

void main()
{ int x1,y1 ,x2 , y2 ,color;
InputData(x1, y1 ,x2 , y2 ,color);
if (InitGraphics())
{ DDA1(x1,y1,x2,y2,color);
getch();
CloseGraphics();
}
}
Ve ng thangtheo thuat toan
DDA(tt)
Xet trng hp 0<m<1 , x1<x2

V du : Chay th thuat toan , khi cho (x1,y1)= (1,2) ;


(x2,y2)=(13,8)

82
m 0.5
13 1
xi 12 3 4 5 6 7 8 9 10 11 12 13
yi 2 2.5 3 3.5 4 4.5 5 5.5 6 6.8 7 7.5 8
round(yi) 2 3 3 4 4 5 5 6 6 7 7 8 8
Ve ng thang theo thuat toan DDA(tt)

Bai Tap :
Ve ng thang trong cac trng hp con lai cua
he so goc
m ( -1< m < 0 , m >1 , m <-1 ) , va 2 trng hp ng
thang
song song vi truc x va y.

Hng dan : Ap dung cach lam nh trong trng hp


0<m<1

Nhan xet thuat toan DDA :


* Thuat toan co o chnh xac cao .
* Toc o thc hien cham .
Ve ng thang theo thuat toan
Bresenham

Y tng : Thay the cac phep tnh toan


tren so thc bang cac phep tnh tren so
nguyen trong cac giai thuat ve ng
.Thuat toan Bresenham da vao khoang
cach e xac nh iem ve tiep theo .

Khao sat trng hp : 0< m<1


Ve ng thang theo thuat toan
Bresenham (tt)

Gia s a ve c iem (X i,Yi)


bc
th i , chung ta can ve iem
(Xi+1,Yi+1)
(x i +1 , y )
bc th (i+1) . y i +1 P
d 2
Khi o : y
Xi+1=Xi+1
d 1
yi S
Yi+1 { Yi , Yi+1 }
Goi Y la gia tr thc cua ng xi x i +1
thang tai
(Xi+1) : Y= m*(Xi+1) +b
Goi d2 la khoang cach t Y i+1
en Y : d2=Yi+1-Y
Ve ng thang theo
thuat toan Bresenham (tt)
Goi d1 la khoang cach t Y en Y i
d1=Y-Yi

Chung ta co : d1-d2 = 2mXi 2Yi +2m+ 2b-1


Neu d1 < d2 : khoang cach d1 < d2 , do

o iem ve tiep theo se la (X i+1=Xi+1,


Yi+1=Yi )
Ngc lai : khoang cach d1 > = d2 , do o

iem ve tiep theo se la (X i+1=Xi+1, Yi+1=Yi


+1)

at Pi = X*(d1-d2) = 2YXi - 2XYi + C


Ve ng thang theo thuat toan
Bresenham (tt)

Chung ta se tnh Pi+1 theo Pi :


Ta co : Pi+1 = 2YXi+1 - 2XYi+1 + C
Pi+1- Pi = 2Y - 2X(Yi+1 - Yi) (*)

Neu Pi< 0 d1 - d2 < 0 => d1 < d2 , Yi+1=Yi


the vao * ta c :
Pi+1 = Pi + 2Y
Ngc lai : d1 - d2 > = 0 : => d1 >= d2 ,
Yi+1=Yi +1
Pi+1 = Pi + 2(Y-X)
Ve ng thang theo thuat toan
Bresenham (tt)

Tnh gia tr P au tien :


Ta co : P = X*(d1-d2)
= X*(2mXi 2Yi +2m+ 2b-1)

iem ve au tien : ( X1,Y1).

Thay Xi , Yi trong bieu thc P thanh X1 , Y1 , chung ta


c :

P =2Y- X
Cai at thuat toan Bresenhamtrong
trng hp 0<m<1
void Bres1(int x1 , int y1 , int else
x2 , { P + = twoDyDx
int y2 , int color) ;
{ Dx= x2-x1; y++;
Dy= y2 -y1; }
twoDy= 2*Dy; putpixel(x,y,color);
twoDyDx = 2*(Dy - Dx) ; }
P=twoDy Dx ; }
putpixel(x1,y1,color)
;
for(x=x1; x<x2 ; x++)
{ if (P < 0) P+=
Ve ng thang theo thuat toan
Bresenham (tt)

V du : Chay th thuat toan , khi cho x1=(1,2) ;


x2=(13,8)
Chung ta co : Dx = 12
Dy= 6
twoDyDx = -12
twoDy =12
P = -1

Xi 1 2 3 4 5 6 7 8 9 10 11 12 13
Yi 2 2 3 3 4 4 5 5 6 6 7 7 8
Pi -1 11 -9 3 -9 3 -9 3 -9 3 -9 3 -9
Ve ng thang theo thuat toan
Bresenham (tt)

Bai Tap :
Ve ng thang trong cac trng hp con lai
cua he so goc m theo thuat toan Bresenham.

Hng dan : Ap dung cach lam nh trong trng


hp 0<m<1 .
Ve ng tron theo thuat toan Bresenham

Khao sat mot so tnh chat :


* Phng trnh : X2+Y2 = R2 , tam O(0,0) , ban
knh R
* ng tron co tnh oi xng qua cac cung
1/ 8 , ngha la ng vi mot iem co toa
o (x,y) thuoc 1 cung nao o,chung ta
hoan toan co the xac nh (-x,y) c
(x,y) toa o 7
iem con lai bang cach lay oi xng qua
(-y,x) (y,x)
cac cung.
R
(-y,-x) 2 (y,-x)

(-x,-y) (x,-y)
Ve ng tron theothuat toan
Bresenham(tt)

T tnh chat cua ng tron , do o e ve


1 chung
ng tron
ta ch can8 ve ng tron la u.
1
8
Chon cung th nhat e ve (hnh ve)

iem ve au tien (x=0 ,y=R)


(-y,x)
(-x,y) . (x,y)

(y,x)

R
(-y,-x) 2 (y,-x)

(-x,-y) (x,-y)
Ve ng tron theothuat toan
Bresenham (tt)

Trong cung 1/8 nay , khoang bien thien cua x


ln
hn khoang bien thien cua y ,nen x i+1 = xi +1
Gia s a ve c (xi , yi) bc th i .
Can xac nh (xi+1 , yi+1)
bc th (i+1)
Chung ta co :
xi 1 xi 1

yi 1 yi , yi 1
Ve ng tron theo thuat toan
Bresenham (tt)

Goi y la gia tr thc cua ng


tron (xi+1,y)
y2=R2 (xi+1)2
d1
y
Goi d1 la bnh phng khoang d2
cach t yi en y
d1=yi2-y2

Goi d2 la bnh phng khoang


cach t y en yi-1
d2= y2 (yi - 1)2

Ve ng tron theo thuat toan


Bresenham (tt)

Lay d1-d2 c : d1-d2 = 2(xi+1)2 + yi2 + (yi-1)2 2R2


Trng hp 1 : Neu d1<d2 th y gan y i hn , khi
o yi+1 = yi
Trng hp 2 : Ngc lai , neu d1 > d2 th y gan y i
1 hn , khi o yi+1 = yi 1

d1
y
d2
Ve ng tron theo
thuat toan Bresenham (tt)

at Pi = d1 - d2

Tnh Pi+1 theo Pi


Pi+1 - Pi = 4xi + 2(yi+12-yi2) + 2(yi+1-yi) + 6 (*)

Neu Pi < 0 , ngha la d1 < d2 , yi+1 = yi the vao * ,


ta c :
Pi+1=Pi + 4xi + 6

Neu Pi > = 0 , ngha la d1 > = d2 yi+1 = yi 1 the


vao * , ta c :
Pi+1 = Pi + 4(xi yi) + 10

Ve ng tron theo
thuat toan Bresenham (tt)

Tnh gia tr P au tien :

Ta co : P = d1-d2
= 2(xi+1)2 + yi2 + (yi-1)2 2R2

iem ve au tien : ( X= 0,Y = R).

Thay Xi , Yi trong bieu thc P thanh 0 va R ,


chung ta se c :

P =3 2R
Ve ng tron theo
thuat toan Bresenham (tt)

Lu o : (x0,y0) ----------------------> P1
P1 ----------------------> (x1,y1)
(x1,y1) ----------------------> P2

V du : Chay th thuat toan khi cho R=8
Chung ta co :
Xi 0 1 2 3 4 5
Yi 8 8 8 7 6 5
Pi -13 -3 -11 5 7 17
Ve ng tron theo
thuat toan Bresenham (tt)
void Bres ( int R , int color)
{ int p =3 2*R; int x = 0; int y= R;
putpixel(x,y,color) ;
put7(x,y,color) ;
while (x < y)
{ x++;
if (p < 0) p + = 4*x+6 ;
else { y--;
p + = 4*(x-y) +10 ;
}
}
putpixel(x,y,color) ;
put7(x,y,color) ;
}
}
Ve ng tron theo
thuat toan Bresenham (tt)

void put7 ( int x , int y , int color)


{ putpixel(x,-y,color) ;
putpixel(y,x,color) ;
putpixel(y,-x,color) ;
putpixel(-x,y,color) ;
putpixel(-x,-y,color) ;
putpixel(-y,x,color) ;
putpixel(-y,-x,color) ;
}
Ve ng tron theo
thuat toan Bresenham (tt)

Bai tap : ve ng tron co tam (xc,yc) bat


ky

Hng dan :
Cch lm ging nh cch lm trong trng hp tm l (0,0)
nhng s xc nh li im v theo tm (xc,yc)

Ve ng tron theo
thuat toan Midpoint

T phng trnh ng tron :


x2+y2=r2 => x2+y2 -r2 = 0 (-x,y) (x,y)
t f(x,y) = x2+y2 - r2
(-y,x) (y,x)
Vay vi moi P(x,y) (Oxy) , ta noi :
R
P(x,y) E((0,0),r) , neu f(x,y) = 0
(-y,-x) 2 (y,-x)
P(x,y) nam trong E , neu f(x,y) < 0
P(x,y) nam ngoai E , neu f(x,y) > 0 (-x,-y) (x,-y)

Chn v cung 1/8 th nht nh hnh v , trong cung nay


khoang bien thien cua x ln hn khoang bien
thien cua y
,nen xi+1 = xi +1
Ve ng tron theo
thuat toan Midpoint(tt)

Gia s a ve c iem (Xi,Yi) bc


th i , can xac nh
(Xi+1,Yi+1) bc (i+1)
Nh vay: Q(x i
+1 , y )
yi S
Xi+1=Xi+1

Yi+1 {Yi, Yi 1} Yi 1/2


MidPoint
y i -1 P

xi x i +1
Ve ng tron theo
thuat toan Midpoint(tt)

2
1 1
(Xi 1) (Yi- ) R
2 2
atF(Xi 1, Yi - )
2
2
2 2 5 2
Fi Xi 2 Xi Yi Yi R
4

Neu Fi < 0 (Xi+1 , Y) gan vi Yi =>


Yi+1=Yi

Ngc lai : (Fi >=0) (Xi+1,Y) gan vi Yi-


1
Ve ng tron theo
thuat toan Midpoint(tt)

Tnh Fi+1 theo Fi

Chung ta lay Fi+1 - Fi c :

Fi+1 - Fi = 2Xi + 3 +(Yi+12 Yi2) +(Yi+1 Yi) (*)

Neu Fi < 0 Fi+1 = Fi + 2Xi+3 , do the Yi+1 = Yi vao *

Ngc lai : Fi+1 = Fi + 2(Xi -Yi) + 5 , do the Yi+1 =Yi-


1vao *
Ve ng tron theo
thuat toan Midpoint(tt)

Tnh gia tr F au tien : 2


Ta co : 1 1
F(Xi 1, Yi- ) (Xi 1) (Yi-
2
) R
2

2
2
2 5 2 2
F X 2X Y Y R
i
i i i i
4

iem ve au tien : ( X= 0,Y = R).


Thay Xi , Yi trong bieu thc F thanh 0 va R ,
chung ta c :
F =5/4 R ~ 1 - R
Ve ng tron theo
thuat toan Midpoint(tt)

Lu thut toan:
(X0,Y0) -----------------------> F1
F1 ----------------------------> (X1,Y1)
(X1,Y1) -----------------------> F2
F2 ----------------------------> (X2,Y2)
Ve ng tron theo
thuat toan Midpoint(tt)

V du : Chay th thuat toan khi cho ban


knh R=8

Xi 0 1 2 3 4 5

Yi 8 8 7 7 6 5

Fi 7 1 4 5 6 11
Ve ng tron theo
thuat toan Midpoint(tt)

void Midpoint (int R, int x++ ;


color)
{ int x=0; int y= R;
int f=1-R; putpixel(x,y,color) ;
putpixel(x,y,color);
put7(x,y,color);
put7(x,y,color);
}
while(x<y)
}
{ if ( f<0 ) f + =
2*x+3;
else
{ y-- ;
Ve ng tron theo
thuat toan Midpoint(tt)

void put7 ( int x , int y , int color)


{ putpixel(x,-y,color) ;
putpixel(y,x,color) ;
putpixel(y,-x,color) ;
putpixel(-x,y,color) ;
putpixel(-x,-y,color) ;
putpixel(-y,x,color) ;
putpixel(-y,-x,color) ;
}
Bai tap

Viet chng trnh ve elipse theo thuat toan


Bresenham va Midpoint
Bai 2 :
Cac Thuat Toan To Mau

nh ngha vung : Vung la mot phan cua man hnh


c
bao bi mot hay nhieu ng bien kn co mau sac
bat ky

To mau cho vung ngha la thay the cac gia tr mau


sac cua cac iem anh nam ben trong vung bang cac
gia tr mau mi can to .
Phng Phap To Mau

Co 2 phng phap :

To mau theo lan can

To mau theo dong quet


To mau theo lan can

Lan can 4: Vi moi iem P(x,y) cho


trc , goi NP4 la
tap lan can 4 iem cua P nh sau :
NP4 = { (x-1,y) ,(x+1,y),(x,y-1),
(x,y+1)} V du : cho p(2,3) ,
tren
vay NP4 bao gom 4
iem {(3,3),(1,3),
y trai (x,y) phai
(2,2),(2,4)}

di

x
To mau theo lan can

Lan can 8: Vi moi iem P(x,y) cho trc , goi NP8 la


tap lan can 8 iem cua P nh sau :
NP8 = { (x-1,y)
,(x+1,y)
trai ,(x,y-1)
,(x,y+1)
,(x+1,y+1)
y (x,y) ,(x+1,y-1)
,(x-1,y+1)
,(x-1,y-1)
}

x
Thuat toan to mau theo lan can

Input: iem P(x,y) thuoc vung can to .


bc ( boundary color) : mau sac cua ng
bien
vung can to
nc ( new color) : mau mi can to cho
vung

Thuat toan :
B1: Xuat phat t iem P(x,y) thuoc vung can
to
B2 :Neu P khong phai la bien va P cha c
to mau ,
th : * To mau cho P vi mau mi
* Goi e qui cho NP4 / NP8
Thuat toan to mau theo lan can

Hnh anh minh


hoa :

P
Cai at to mau theo lan can 4

void FloodFill4(int x, int y , int bc ,int nc)


{ int color ; color=getpixel(x,y);
if ((color!=bc) && (color!=nc))
{ putpixel(x,y,nc);
FloodFill4(x-1,y,bc,nc);
FloodFill4(x+1,y,bc,nc);
FloodFill4(x,y-1,bc,nc);
FloodFill4(x,y+1,bc,nc);
}
}
Cai at to mau theo
lan can ng cheo

void FloodFillD(int x, int y , int bc ,int nc)


{ int color ;color=getpixel(x,y);
if ((color!=bc) && (color!=nc))
{ putpixel(x,y,nc);
FloodFillD(x+1,y+1,bc,nc);
FloodFillD(x+1,y-1,bc,nc);
FloodFillD(x-1,y-1,bc,nc);
FloodFillD(x-1,y+1,bc,nc);
}
}
Cai at to mau theo lan can 8

void FloodFill8(int x, int y , int bc ,int nc)


{ int color ;
color=getpixel(x,y);
if ((color!=bc) && (color!=nc))
{ putpixel(x,y,color);
FloodFill4( x, y , bc , nc);
FloodFillD(x, y , bc , nc);
}
}
V du to mau hnh tron

# include<conio.h>
# include<stdio.h>
# include<graphics.h>

void FillCircle(int Xc,int Yc ,int R, int bc , int nc )


{ CircleBres(Xc,Yc,R,bc);
FloodFill(Xc,Yc,bc,nc);
}
void main()
{ int Xc,Yc,bc,nc,R ;
printf(Hay nhap Xc, Yc, R, bc,nc :) ; scanf(%d%d
%d%d%d%d,&Xc,&Yc,&R,&bc,&nc);
initgraphics();
FillCircle(Xc,Yc,R,bc,nc);
closegraphics();
}
V du to mau tam giac

- Ve tam giac vi mau sac la bc


- Tm tam cua tam giac , chnh la :
Xg= (X1+X2+X3) / 3 ;
Yg=(Y1+Y2+Y3) / 3 ;
- Goi ham FloodFill4 vi au vao la
tam cua tam
giac va hai mau la bc, nc
Thuat toan to mau
theo lan can cai tien

Nhn xt :
Phng php t mu theo ln
cn s dng qui c u im
l n gin , d ci t , t
c vng c hnh dng bt
k, tuy nhin ch cho php t
mu vng c din tch nh.
Thuat toan to mau theo lan can

Bi tp :
Ci tin li thut ton t mu theo ln cn t c vng
c din tch ln hn.

Hng dn :
1. Khng gi qui cho tt c cc im theo ln cn ( 4 , 8 ,
ng cho) m ch chn mt s cc im trong cc im
ny lm im ht ging v tin hnh thao tc t t cc
im ny.
Thuat toan to mau theo lan can

2. Tieu chuan e la iem hat giong


iem nay cha c to va khong phai iem bien.
iem nay thoa :
- iem trai au tien.
- hoac ben trai cua no la iem bien (neu no
khong
phai la iem trai au tien).
Bai 3 :
To mau theo dong quet

Khuyt im ca viec s dung e qui trong phng phap


to mau
theo lan can la iem yeu lam cho phng phap nay
ch cho phep
to vung co dien tch nho . e cai tien chung ta co
phng phap to
mau theo dong quet .

ac iem cua phng phap nay la :


To c vung co dien tch ln bat ky .

t tham so hn .
To mau theo dong quet

Khai niem dong quet :Dong quet la dong


iem sang tren
man hnh

y
To mau theo dong quet

V du to mau hnh ch nhat bang phng


phap to mau
l r
theo dong quet :

setcolor(color); y t
for(int y=t;y<=b;y++)y
line(l,y,r,y); b
To Mau Tam Giac

Cho tam giac co toa o lan lt :


(x1,y1) ; (x2,y2)
;(x3,y3), vi gia thiet y1<y2<y3
(x1,y1
)

(x2,y
2)

(x3,y3)
To Mau Tam Giac

Phng php :
Cho vng lap y chay t Y1 Y2 :
1. Tm hoanh o giao iem xl, xr gia
dong quet y vi cac canh trai va
canh phai cua tam giac.
2. To dong y bat au tai cot xl, ket
thuc tai Ycot2 xr. 3
2

yY1
1
x x
To Mau Tam Giac

Trong trng hp tong quat ta co the chia


tam giac bat ky
thanh 2 tam giac con :
Tam giac ay phang (flat bottom)
Tam giac nh phang (flat top)

Flat Top

Flat Bottom
To Mau Tam Giac ay Phang

(x1,y1)
Gia thiet tam giac ay phang
co toa o (x1,y1) ; (x2,y2) ;
(x3,y3) ;
y1< y2
Do tam giac ay phang nen :
y2=y3

Goi YL=mLXL+BL :La phng trnh


canh trai cua tam giac (x2,y2) (x3,y3)

Goi YR=mRXR+BR,:La phng trnh


canh phai cua tam giac
To Mau Tam Giac ay Phang

Thuat toan tho :


Khi tao xl =xr =x1;
for(int y=y1 ; y<y2 ; y++)

{ * Tnh xl t phng trnh canh trai


* Tnh xr t phng trnh canh phai
* goi ham line(xl , y , xr , y ) e ve 1 dong quet
}
Cai tien :
- iem ve au tien xl = xr = x1 ; y = y1
To Mau Tam Giac ay Phang

- Gia s a tnh c xl , xr bc th i
phng trnh canh trai va canh phai .
Can xac nh xl , xr bc (i+1)
- Chung ta co he phng trnh sau :
i 1 1 i 1 1
X Y b
L
m L m L
L

i 1 i 1
XL Y b
m L m L
L

______________________
i 1 i 1
X X L
L
m L
To Mau Tam Giac ay Phang

i 1 i 1
Lam tng t chung ta c
X R : XR
m R

T 2 cong thc va co c , chung ta


co thuat toan cai tien to mau tam giac
ay phang , nh sau :
Cai at ham to mau tam giac ay
phang

void FlatBottom(int x1,int y1,int x2,int y2,int x3,int y3

,int color)
{ float ml,mr,xl,xr; int y;
ml=(float) (y2-y1) / (x2-x1);
mr=(float) (y3-y1) / (x3-x1);
xl=xr=x1; setcolor(color);
for(y=y1;y<y2;y++)
{ xl + = 1/ml;
xr += 1/mr ;
line(round(xl),y,round(xr),y) ; }
}
To mau tam giac nh phang

Gia thiet tam giac nh


phang co toa o (x1,y1) ;
(x2,y2) ; (x3,y3) ;
y1 < y3 (x1,y1) (x2,y2)
Do tam giac nh phang
nen : y1=y2

Goi YL=mLXL+BL :La phng


trnh canh ben trai cua tam
giac (x3,y3)

iem ve au tien xl = xr = x3 ; y = y3
Goi Y =m X +B :La phng
To mau tam giac nh phang

-Gia s a tnh c xl , xr bc th i
phng trnh canh ben trai va canh ben
phai . Can xac nh xl , xr bc (i+1) .
Vi cach lam tng t nh trong trng hp
tam gic y phng nh tren , chung ta tnh c :
xl = xl- 1/ml;
xr = xr- 1/mr ;

Thuat toan to mau tam giac nh phang


c viet nh sau :
Cai at ham to mau tam giac nh phan

void FillFlatTop(int x1,int y1,int x2,int y2,int x3,int y3 ,int color)


{ float ml,mr,xl,xr; int y;
ml=(float) (y2-y1) / (x2-x1);
mr=(float) (y3-y1) / (x3-x1);
xl= xr= x3; setcolor(color);
for(y=y3 ; y>y2 ; y--)
{ xl = xl- 1/ml;
xr = xr- 1/mr ;
line(round(xl),y,round(xr),y) ;
}
}
int round(float y) { return (int )(y+0.5); }
To mau tam giac tong quat

Bc 1 : sap xep lai th t cac iem ,


sao cho :y1<y2<y3
To mau tam giac tong quat

Bc 2 :
Neu y2=y3 : goi ham to mau tam
giac ay phang
Neu y1=y2 : goi ham to mau tam
(x1,yphang
giac nh
1)

(x3, y2) ;
(x2,y (x1, y2)
2)

(x3,y3
To mau tam giac tong quat

Neu y1 # y2 # y3 : goi ham to mau tam


giac nh phang , roi goi ham to mau
tam giac ay phang .
Toa o(x1,y
giao iem A ?
1)

(x2,y A (xA=?,
2)
y2) (x3,y3
)
To mau tam giac tong quat
(x1,y
1)

(x2,y
2)
A (xA=?, y2)
(x3,y3
) 2 iem (x1,y1) va
Phng trnh ng thang qua
(x3,y3) : y=mx+b , vi m = ( y3 y1) /(x3 x1) ,b = y1
mx1 ;

Do iem A nam tren ng thang (x1,y1) va


(x3,y3) , do o toa o iem A phai thoa phng
trnh ng thang qua 2 iem (x1,y1) va (x3,y3) ,
nen :
yA = mxA +b hay yA mxA b =0
To hnh a giac loi

p0
Cach to
p3 1. Chia a giac loi
co n nh {p0,
p1
p1, ... , pn-1} thanh n-
p2
2 tam giac.
1 p0p1p2
p0

p1
2 p0p2p3
pn-1 - ...
p2
pn-2
i p0pipi+1
p3 - ...
n-2 p0pn-2pn-1
To hnh a giac

Nguyen ly chia tam giac : Moi a giac


khong t cat eu co the phan chia
thanh cac tam giac.
Thuat toan to a giac tong quat

1.Bc 1 Tm ymin va
ymax
ymax
ymin = min{yi, (xi, yi) I1 I2 I3 I4
P} y
ymax = max{yi, (xi, yi) P
P}

y ymin
2.Bc 2 To tng
dong
- Lap y : ymin ymax
* Tm cac giao
Thuat toan to a giac tong quat

Neu dng thuat toan tong quat nay va


chuyen sang cai at,chung
ta se gap mot so van e sau :
1. ng vi moi dong quet , khong phai luc
nao tat ca cac canh cua a giac cung
tham gia cat dong quet.Do o e cai thien
toc o can phai co mot cach nao o e
han che c so canh can tm giao iem
ng vi moi dong quet .
2. Viec tm giao iem cua canh a giac vi
moi dong quet se gap cac phep toan nh
nhan , chia tren so thc neu dung cach
Thuat toan to a giac tong quat

3. Neu so giao iem tm c gia cac canh


a giac va dong quet la le th viec nhom
tng cap giao iem ke tiep nhau e hnh
thanh cac oan to co the se khong chnh
xac .ieu nay ch xay ra khi dong quet i
ngang qua cac nh cua a giac . Ngoai ra
viec tm giao iem cua dong quet vi cac
canh nam ngang la mot trng hp ac
biet can co cach x ly thch hp.
e giai quyet cac van e tren , chung ta
co mot so cai tien cho
thuat toan tong quat nh sau :
Thuat toan to a giac tong quat

1.e han che so canh can tm giao iem ng v


moi dong quet ,
ta xay dng mot so cau truc d lieu nh sau :
a. Canh a giac : Moi canh cua a giac c xay
dng t hai nh
ke nhau Pi(xi,yi) va Pi+1(xi+1,yi+1) gom cac thong
tin :
- Ymin : Gia tr tung o nho nhat trong 2 nh
cua canh.
- xIntersect: Hoanh o giao iem cua canh vi
dong quet ang
Thuat toan to a giac tong quat

1.e han che so canh can tm giao iem ng


vi moi dong quet ,
ta xay dng cau truc d lieu nh sau :
b.Danh sach cac canh kch hoat AET :
Danh sach nay dung e lu cac tap canh cua
a giac co the cat
ng vi dong quet hien hanh va tap cac
iem giao tng ng .No
co mot so ac iem sau :
- Cac canh trong danh sach c sap theo
Thuat toan to a giac tong quat

- Thay oi ng vi moi dong quet ang xet ,


do o danh sach nay se c cap nhat lien
tuc trong qua trnh thc hien thuat toan .e
ho tr cho thao tac nay , au tien chung ta
se tao mot danh sach lu tat ca cac canh
cua a giac goi la ET Edge Table c sap
theo th t tang dan cua Ymin , sau o sau
moi lan dong quet thay oi se di chuyen
cac canh trong ET thoa cac ieu kien sang
AET.
- Moi dong quet y = k ch cat mot canh cua
a giac khi va ch khi k > = Ymin va deltaY >
0 . Chnh v vay vi canh to chc cua ET ( sap
Thuat toan to a giac tong quat

2. Cong thc tm giao iem nhanh :


Neu goi xk va xk+1 lan lt la hoanh o giao
iem cua mot canh
nao o vi cac dong quet y =k va y = k +1 ,
ta co :
xk+1 = xk +1 /m
Nh vay neu lu hoanh o giao iem xk ng
vi dong quet k , cung
vi he so m cua canh , chung ta de dang tnh
xac nh gia tr hoanh
o xk+1 theo cong thc tren.ieu nay rut gon
Thuat toan to a giac tong quat

3. Giai quyet trng hp dong quet i ngang


qua nh :
Quy tac e tnh so giao iem khi dong quet i
ngang qua nh :
- Tnh mot giao iem neu chieu cua 2 canh
ke cua nh o co xu hng tang hay
giam .
- Tnh hai giao iem neu chieu cua 2 canh ke
cua nh o co xu hng thay oi : tang-
giam hay giam tang.
e kiem tra canh la tang hay giam , chung ta
Bai Tap

1.Cai at thuat toan to mau a giac bat


ky da tren nhng cai
tien cua thuat toan to mau a giac tong
quat.

2.Ap dung phng phap to mau theo dong


quet e to mau
a giac loi .
Bai 4 : CLIPPING OAN THANG VI
HNH CH NHAT

I. Gii thieu : Do gii han cua thiet b hien th , nen chung


ta khong the ve toan bo the gii thc len may tnh c
.Do o tai mot thi iem chung ta ch the hien c mot
phan cua the gii thc len may tnh .
Bai 4 : CLIPPING OAN THANG VI
HNH CH NHAT

Bai toan clipping ( xen hnh) la bai toan chon ra


oi tng
e hien th. Clipping la mot trong nhng bai
toan c s cua
o hoa.

Khi xem xet cac thuan toan clipping , thong


thng ngui
ta xem xet dui 2 kha canh :
* toc o
* o chnh xac .
Cac loai clipping (xen hnh)

Xen iem
Xen oan thang
Xen a giac
Xen oi tng
CLIPPING OAN THANG VI
HNH CH NHAT

II. Thuat toan Cohen Sutherland

Bai toan : Cho oan thang p1p2 . Hay tm


phan cua oan
thang p1p2 nam trong ca so hnh ch
nhat co ten la
Window (neu co) .

Ba trng hp co the xay ra khi clipping


oan thang vi
ca so hnh ch nhat :
CLIPPING OAN THANG VI
HNH CH NHAT
(Thuat toan Cohen-Sutherland)

TH1: oan thang P1P2 nam trong ca so Window

TH2: oan thang P1P2 nam ngoai ca


so Window
TH3: oan thang P1P2 giao (co 1 hoac 2
giao iem ) vi ca so Window , can tnh
P1
giao iem trong trng
P1 hp nay.
P1 P1
P2
P2
P2
TH1 TH2 TH3
P2
Lm sao xc nh v tr ca P1P2 vi ca s ????
CLIPPING OAN THANG VI
HNH CH NHAT
(Thuat toan Cohen-Sutherland)

Khai niem ma vung ( areacode) cua mot iem : Vi


moi
p(x,y) thuoc Oxy .Ngi ta lien ket no vi mot ma
vung C
c nh ngha nh sau :
typedef struct Areacode
{ Boolean left , top , right , bottom ;
} TAreacode , *LAreacode ;

Chung ta co thuat toan tnh ma vung cho mot iem


p(x,y)
nh sau :
CLIPPING OAN THANG VI
HNH CH NHAT
(Thuat toan Cohen-Sutherland)

C->left = True , neu y Window


p.x<Window.l , ngc lai la
False. w.top
C->top = True , neu
p.y>Window.t , ngc lai
P.y P
la False.
w.bottom
C->right =True , x
w.left P.x w.right
neu p.x>Window.r , ngc lai
la False.
C->bottom = True , neu Cho iem P(x,y) .
p.y<Window.b , ngc Hoi ma vung C
lai la False. cua iem P ?????
CLIPPING OAN THANG VI
HNH CH NHAT
(Thuat toan Cohen-Sutherland)

V du : Cho ca so hnh ch nhat W=(left, top ,


right , bottom ) = ( 5 , 10 , 10 , 5) . Hay tnh ma
vung P1 ,P2 : y
a. P1=(6,7 ) , P2=(8,9 )
top =10
P2
P2 b
a P1
b. P1=(9,6 ) , P2=(12,7 ) P1 c
P1
bottom =5 P2
x
left =5 right =10

c. P1=(14,7 ) , P2=(18,4 )
CLIPPING OAN THANG
VI HNH CH NHAT
(Xac nh trng hp)

Goi c1, c2 lan lt la -Ben phai:


ma vung cua P1, P2: c1 = ( D D T D )
TH1: oan thang nam c2 = ( D D T D )
trong -Ben di:
c1 = (F F F F) c1 = (D D D T )
c2 = (F F F F) c2 = (D D D T )
TH2: oan thang nam
ngoai:
TH3: Xay ra khi TH1 va
-Ben trai:
TH2
c1 = ( T D D D ) khong xay ra.
c2 = ( T D D D )
Tnh va cap nhat giao
-Ben tren:
iem cho P1 va P2 mi
c1 = ( D T D D ) Ket luan : Gia tr ma
c2 = ( D T D D ) vung cua mot iem
se cho biet v tr cua
CLIPPING OAN THANG
VI HNH CH NHAT
( Thuat toan )

Input:
Tpoint P1,P2:
Trect Window;
Boolean vis; // cho biet co thay P1P2 trong
ca so Window ?

Thuat toan :
done = False;
do
{
Tnh m vng cho P1,P2
Neu TH1: vis=True; done = True;
Neu TH2: vis=False; done = True;
Ngc lai: // TH3
CLIPPING OAN THANG
VI HNH CH NHAT
( Thuat toan )

Neu P1.x=P2.x hoac P1.y=P2.y th:


X ly ng thang ng (ngang).
Ngc lai:
{
- Neu c.l = True tnh giao iem vi ng LEFT ,
cap nhat vao
P1.
- Ngc lai neu c.t = True tnh giao iem vi
ng TOP , cap
nhat vao P1
- Ngc lai neu c.r =True tnh giao iem vi
ng RIGHT , cap
nhat vao P1.
- Ngc lai neu c.b = True tnh giao iem vi
CLIPPING OAN THANG
VI HNH CH NHAT
( Tnh giao iem )

Goi P(x,y) la giao iem cua P1P2 vi canh


Trngca
hpso
giao. vi canh right
: y
Do P nam tren P1P2 , do o P
phai thoa man phng trnh
cua P1P2 .
Phng trnh P1P2 : y =mx +b
top
P
P1
. P2

Vi m = ( P2.y P1.y) / ( P2.x bottom


P1.x) x
b = P1.y m*P1.x left right
Ta P.y=P1.y
co : P.y+ (=window.right
m*P.x +b P1.x)*m
(*)
Ma P.x
P.x= = Window.right
Window.right
The vao (*) ta c
-
CLIPPING OAN THANG
VI HNH CH NHAT
( Tnh giao iem )

* Trng hp giao vi canh


left :
P.y=P1.y + ( Window.left
P1.x)*m
P.x=Window.left

* Trng hp giao vi canh


top :
P.x=P1.x + ( Window.top
P1.y) / m
P.y=Window.top

* Trng hp giao vi canh


CLIPPING OAN THANG
VI HNH CH NHAT

1. Tm phn ca an thng P1P2 nm trong ca s hnh ch nht


Window ( l , t , r , b) = ( 0 , 10 , 10 , 0 )
a. P1= ( 2 , 3 ) ; P2=( 8 , 6 )
b. P1= ( -12 , 1 ) ; P2=( -18 , 2 )
c. P1= ( 5 , 6 ) ; P2=( 12 , 8 )
d. P1= ( -12 , -12 ) ; P2=( 2 , 18 )
2. Cho bit trng hp xu nht s ln phi tnh giao im l bao
nhiu . Cho v d minh ha v xc nh cc giao im ny nu cho
Window ( l , t , r , b) = ( 0 , 10 , 10 , 0 )
Bai 5 :CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

AI SO VECTOR Vector ch phng:


Bieu dien: c=BA
typedef struct Tvector{ Cu the :
float x,y; c(cx,cy) = ( bx ax ,
}Tvector, *Lvector; by ay)
Vector ai dien: a = A - O V d : cho A(5,2) ,
y B(4,10)
c(cx,cy)= (4-5 , 10 -2)
a A
= (-1 , 8)

x
CLIPPING OAN THANG
VI A GIAC LOI

a. Phng trnh phap Giai :


vector -Vector ch phng
cua ng thang: c(x,y) c tnh bang (
nx x + n y y = d B.x- A.x , B.y A.y)
Vay c(x,y) = ( 2-1 , 1
(-3)) = ( 1,4)
Trong o :
nx = - cy = -4
- n(nx,ny): phap
ny = - cx = 1
vector
d= n.a =( -4,1) * ( 1,-3)
- d: hang so.
= -7
Phng trnh phap
Vd : cho A(1, -3 ) ; vector :
B(2,1) . Hay xac
-4x + y = -7
CLIPPING OAN THANG
VI A GIAC LOI

b. Khai niem na mat phang trong, na


mat phang ngoai
Cho ng thang l(n,d), chia mat phang
Q ra
l
lam 2 na:
alpha
Inside: la na khong cha vector n. n
Outside: la na cha vector n. A
Outside
Vi moi Q(x,y)Oxy, ta noi: Inside
-Q Inside: neu tch vector ( Q-A)*n < 0
Goc alpha >90 =>n.Q < d
-Q Outside: n.Q > d
CLIPPING OAN THANG
VI A GIAC LOI
c. a giac loi.
Tnh chat: a giac loi la a giac ma neu
cat no bang ng thang i qua mot canh
th toan bo phan con lai cua a giac se
nam ve cung mot pha( inside hoac outside
so vi ng thang)
Bieu dien: ngoai mo hnh polypoint ( bao gom
so nh
typedef structva toatypedef
o cac nh)
struct , tatypedef
Line co the
struct Poi
bieu dien a giac
PolyLine { theo mo
Tpoint n; hnh
// polyline
{ int xnh
,y ;
saunum;
{ int : // so vector n } TPoint ,*LPoint;
nh int d ;
Tline l[Max]; } TLine, *LLine;
} TPolyLine,
CLIPPING OAN THANG
VI A GIAC LOI
Chuyen a giac bieu dien polypoint thanh
polyline

Xay dng li t pi,pi+1 bang cach :


* c = pi+1 pi
* ni.x = - c.y , ni.y = c.x
*di = n.pi

Lu y : trong qua trnh xay dng cac canh l i


t pi,pi+1 canphai am bao la vector phap
tuyen n cua li phai hng ra ngoai. e
vector phap tuyen n cua li hng ra ngoai th
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan kiem tra mot iem Q nam trong hay
ngoai a giac loi)

Input : a gic li W={sodinh , l0 , l1 , l2 , l(sodinh-1)}


im P(x,y) cn kim tra
Ouput : bin Namtrong = True P nm trong W
bin Namtrong = False P nm ngoi W
Namtrong =True; i=0;
do { if (w.l[i].n*p > w.l[i].d)
{ Namtrong = False;
break; }
else i++;
} while(i<w.sodinh);
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan kiem tra mot iem Q nam trong hay
ngoai a giac loi)

Bi tp :

Cho a gic P bao gm 3 nh vi ta ln lt l (0,2) ; (2,2);


(3,-1) . Hy kim tra xem im Q nm trong hay ngoi a gic P .
a. Q(2,1)
b. Q(1,-1)

Nhn xt : Thut ton kim tra mt im nm trong hay ngoi a gic


n gin v c chnh xc tuyt i.
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

Bi ton : Cho mt a gic li W v on thng P1P2 c ta (x1,y1) ;


(x2,y2) .Yu cu : Tm phn ca P1P2 nm trong W (nu c)
Gii thut :
Xt P1P2 ln lt vi tng cnh L ca a gic li W . mi buc c
2 trng hp c th xy ra :

- Trng hp 1 : P1P2 song song vi cnh L ca W


n
c n
P1 P2
Outside
Outside
L
L Inside
W Inside
P1
c P2
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

Neu tch vector n*c =0 P1P2 song song vi L


Khi neu tch vector n*P1 > d th P1P2 nam ngoi W , ket
thuc
thuat toan
Ngc lai neu tch vector n*P1 < d th P1P2 Inside so vi
canh L n
c n
P1
ang xt . ChuyenP2 sang kiem tra canhOutside
tiep theo.
Outside
L
L Inside
W Inside P1
c P2
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

Trng hp 2 : P1P2 khng song song vi cnh L ca W


tch vector n*c # 0
Gi t l gi tr m ti P1P2 giao vi cnh L , ta c :
- Gi P l giao im ca P1P2 vi cnh L : n*P =d (1)
- Phng trnh ng thng P1P2 dng chnh tc :
P(t) = P1 + c*t (2) , t [ 0 , 1] L
n P
The (2) vao (1) : P2 . P1
n*(P1+c*t) = d
=> n*P1 + n*c*t =d
=> t = (d- n*P1) / t
n*c ;
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

Trng hp 2 : P1P2 khng song song vi cnh L ca W ( tt)


- Gi tin l gi tr ca t ( vi mi t < tin ) : phn ca on thng
tng ng vi t vn cha bc vo a gic .
-Gi tout l gi tr ca t : phn ca on thng tng ng vi t
vn cha bc ra khi a gic .
-Khi to ban u tin =0 , tout = 1

n
P2 P1

tin=0 t tout=1
CLIPPING OAN THANG
VI A GIAC LOI
Trng hp 2 : P1P2 khng song song vi cnh L ca W ( tt)

Tnh va cap nhat giao iem P1 , khi tao


tin=0 , tout=1
n
P1 P2 Neu (t < tin)
{ vis = False ; // khong
t =1 t t =0 thay
out in

P1P2
n trong W.
P1
P2
break;
tout=1 tin=0 t }
Neu (t< t ) t =t
CLIPPING OAN THANG
VI A GIAC LOI
Trng hp 2 : P1P2 khng song song vi cnh L ca W ( tt)

Tnh va cap nhat giao iem P2 , khi tao tin=0


, tout=1
n
P2 P1 Neu (t > tout)
{ vis = false ; // khong
thay
tin=0 t tout=1 P1P2
trong W.
n
P2 break;
P1
}
tin=0 tout=1 t Neu (t> tin) tin =t
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

c = P2 P1, tin =0, tout =1, i=0;


do
{ Neu n.c = 0 th P1P2 song song vi canh li
Neu n.p1 > d th
vis = False , return;
Ngc lai Neu n.c > 0 th
Tnh va cap nhat tin (P2)
Ngc lai: Tnh va cap nhat tout (
P1)
i++;
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

//Cap nhat lai P1 , P2 :

Neu (vis =true) // co thay P1P2 trong a giac


{
P2.x = P1.x + c.x * tin

P2.y = P1.y + c.y * tin

P1.x = P1.x + c.x * tout

P1.y = P1.y + c.y * tout


}
CLIPPING OAN THANG
VI A GIAC LOI
(Thuat toan CYRUS-BECK)

Bai tap :
Cho a giac P bao gom 3 nh co toa o nh sau :
{ (1 , -1) ; ( 3 , 2 ) ; (4 , -1) } va 2 iem P1 , P2 co
toa o P1 =( 1 ,0 ) ; P2 = ( 4 ,0) . Hay tm phan P1P2
nam trong a giac P ( neu co) .

Hng dan :
B1 : Chuyen a giac P t polypoint thanh polyline .
B2 : Ap dung thuat toan cyrus beck e tm phan
P1P2 nam trong a giac loi.
Bai 6 :
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

Bai toan: Cho a gac q gm m nh v a gic p


gm n nh . Hy tm phn ca a gic q nm trong a gic p
(nu c)

Thuat toan:
* Bc 1: Chuyen a giac P t polypoint
thanh polyline (W)

* Bc 2: Xet tat ca cac canh cua q lan


lt vi tng canh Li cua W , khi o : co 4
trng hp co the xay ra:
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

4 trng hp co the xay ra , khi xt canh qjqj+1


ca a gic q v canh Li ca a gic p:
qj li li
qj+1
qj qij
qj+1
TH1 TH2

li qj
li
qj
qj+1 qij qj+1
TH3 TH4
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

- Gi out l a gic kt qa li
khi clipping q vi a gic w
- Khi tao out= {}
TH1: qj, qj+1 inside so qj+1
vi li TH1
- Xuat ra nh
qj+1 li
out = out + [qj+1] qj+1
qj qij
TH2: qj inside, qj+1 TH2
outside
- Tnh giao qij
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

- Gi out l a gic kt qa
khi clipping q vi a gic w li
qj
TH3: qj outside, qj+1 qj+1
qij
inside
- Tnh giao qij TH3
- Xuat ra qij
out = out + [qij] li
- Xuat ra qi+1
out = out + qj+1
[qj+1] TH4

TH4: qj , qj+1 outside


CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

Thut ton :
- Input : a gic W , a gic q
- Output : Gi out l a gic kt qa khi clipping q vi a gic W
-Khi to out ={ }
- for ( i = 0 ; i < w.num ; i++)
for( j= 0 ; j < q.num 1 ; j++)
{ 1 . Nu qj, qj+1 inside so vi li
out = out + {qj+1}
2 . Nu qj, inside , qj+1 outside so vi li
* Tnh giao im S
* out = out + {S}
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

Thut ton (tt) :


{3 . Nu qj, inside , qj+1 outside so vi li
* Tnh giao im T
* out = out + {T}
* out = out + {qj+1}
}
Xt cnh qnum-1qo v xt 4 trng hp trn .
Xc nh giao im S , T trong trng hp 2 , 3 :
xc nh ta giao im S , T chng ta gi li thut ton
cyrus beck vi tham s u vo l qj, , qj+1 v a gic li W .
CLIPPING A GIAC
( Thuat toan Sutherland Hogman )

Bi tp :
Cho a giac P bao gom 3 nh co toa o nh sau :
{ (1 , -1) ; (3,2 ) ; (4 , -1) } va a giac Q bao gom 3
nh co toa o nh sau : { (1 , 1) ; ( 2 , 5 ) ; (1 , 4) } .
Hay tm phan a giac Q nam trong a giac P ( neu
co) .

Hng dan :
B1 : Chuyen a giac P t polypoint thanh polyline .
B2 : Ap dung thuat toan Sutherland Hogman e tm
phan a gic Q nam trong a giac loi W.
Bai 7 :
Cac phep bien oi Affine

Phep bien oi :
Phep bien oi la mot anh xa t
khong gian R2 vao R2 :
- Bien mot iem P thanh mot iem P
- Bien mot oi tng S thanh oi tng
S T
P

P Anh

S
Cac phep bien oi Affine c s
(tt)

Phep thay oi t le :Dung e thay oi kch thc


cua cac oi
tng
Tham so : y
Tam t le : O
He so t le : sx, sy

-f : R2 R2
(2,3) (4,3)
(Sx,Sy)
P(x,y) Q(x,y) (5,1.5) (10,1.5)

x
Qx=Px*Sx
Qy=Py*Sy
Cac phep bien oi Affine c s
(tt)

Phep dch chuyen :Dung e


thay oi
v tr cua cac oi tng t v
tr nay
sang v tr khac.
Tham so :
o dch chuyen tren truc Ox : t x ty
o dch chuyen tren truc Oy : t y
tx
f:R 2 R 2

(tx,ty)
Qx=Px + tx
P(x,y) Q(x,y)
Qy=Py+ ty
Cac phep bien oi Affine c s
(tt)

Phep quay : Dung e thay oi hng cua


cac oi tng
Tham so :
- Tam quay : O y
- - Goc quay :

f : R2 R2

P(x,y) Q(x,y)

Qx=Px Cos - PySin


x
Qy=Px Sin + Py Cos
Cac phep bien oi Affine c s
(tt)

Phep bien dang ( xien) : Dung e co ,


keo oi tng
f : R2 R2
(h,g)
P(x,y) Q(x,y)
Xien theo phng x :
Qx = Px + h.Py
Qy = Py O x O x
Xien theo phung y
Qx=Px
Qy=Py + g. Px
Dang ma tran cua cac phep
bien oi affine c s (tt)

Moi phep bien oi affine eu co the viet di


dang :
Qx= a*Px + c*Py + e
Qy= b*Px+ d*Py + f
Trong o : a,b,c,d,e,f la cac hang so

Hay co the viet :


a b
(Qx, Qy) (Px, Py) e . f
c d
Vay Q= P* M + tr ,trong o: M la ma tran bien
oi
tr la vector dch chuyen
Dang ma tran cua cac phep
bien oi affine c s (tt)

Cu the :
a/ oi vi phep dch chuyen :

1 0 ,tr=(Tx,Ty)
M
0 1
b/ oi vi phep thay oi ty le
Sx 0 ,tr=(0,0)
M
0 Sy
Dang ma tran cua cac phep
bien oi affine c s (tt)

c/ oi vi phep quay :

cos sin
M ,tr=(0,0)
sin cos

d/ oi vi phep bien dang :


1 g ,tr=(0,0)
M
h 1
Tong hp cac phep bien oi

Bai toan : Cho phep bien oi T1 , ma tran


bien oi M1 , vector
dch chuyen tr1 t P bien oi thanh P1 .Cho
phep bien oi T2 ,
ma tran bien oi M2 , vector dch chuyen tr2
t P1 bien oi
thanh Q

.
T1
.
Hoi khi bien oi t P thanh Q th ma tran
bien oi M va vector
dch chuyen tr se la nh
T2
P1 the nao ?.
P Q
T
Tong hp cac phep bien oi (tt)

Chung ta co
Q=P1 * M2 + tr2
P1= P *M1 + tr1
Q=(P * M1+ tr1) * M2 + tr2

Vay Q= P * M + tr , vi M=M1 * M2 ;
tr = tr1*M2 + tr2
Tong hp cac phep bien oi (tt)

Phep bien oi ngc

Bai toan : Cho anh Q vi ma tran bien oi la M va vector


dch
chuyen la tr

Hoi iem P se co toa o bang bao nhieu ?

T bieu thc : Q= P * M +tr =>(Q-tr) = P * M

Vay chung ta co toa o iem P la : P = (Q-tr) * M -1

Trong o M-1 la ma tran nghch ao cua ma tran M


Nguyen ly phan ra phep bien
oi

Moi phep bien oi affine bat ky eu co


the phan ra thanh mot chuoi cac phep
bien oi c s.
T

T1 Tn

T2 T3
He toa o ong nhat va cac
phep bien oi

a/ He toa o :
He toa o He toa o
e cac thuan nhat
P(Px, Py) P(Px, Py, 1)

P(Px, Py) P(wPx, wPy, w)

b/ Dang ma tran cua cac phep bien oi trong


he toa o ong nhat :
Moi phep bien oi Affine trong he toa o ong
nhat eu co the
biu din di dang :
Q= P * M
He toa o ong nhat va cac phep
bien oi (tt)

Cu the :
- oi vi phep tnh tien:
Chung ta co : Q = P * M 1 0 0

(Qx, Qy,1) (Px, Py,1) 0 1 0
Tx Ty 1

- oi vi phep thay oi t le :

Sx 0 0

M 0 Sy 0
0 0 1

He toa o ong nhat va cac
phep bien oi (tt)

oi vi phep quay : Cos Sin 0



M Sin Cos 0
0 0 1

oi vi phep xien :
1 g 0

M h 1 0
0 0 1

Tom lai :Moi phep bien oi Affine trong he toa
o ong nhat
eu co the bieu dien di dang : Q= P * M
trong o : M la ma tran bien oi
He toa o ong nhat va cac
phep bien oi (tt)

Tong hp cac bien oi Affine:


Cho phep bien oi T1 co ma tran bien oi M1

Cho phep bien oi T2 co ma tran bien oi M2

.
.
Cho phep bien oi Tn co ma tran bien oi Mn

Khi o phep bien oi T la tong hp cua cac phep bien


oi
Ti
T : M=M1 * M2 * M n
He toa o ong nhat va cac
phep bien oi (tt)

Phep bien oi ngc


Bai toan : Cho anh Q vi ma tran bien oi
la M va vector
dch chuyen la tr

Hoi iem P se co toa o bang bao nhieu ?

T bieu thc : Q= P * M
Vay chung ta co c iem P se la : P = Q *
M-1
He toa o ong nhat va cac
phep bien oi (tt)

co ma
phep bien oi
Neu T tran M la
a b 0 :

M c d 0 , vi ad - bc 0

e f 1

-
th
d b
0
ad bc ad bc

c a

-1
M 0
ad bc ad bc
cf de be af
1
ad bc ad bc
Cac Phep Bien oi Affine (tt)

V du : Tm anh Q cua iem P khi quay P mot goc


quanh tam
C(Cx,Cy) bat ky

Bc 1 : Goi M1 la ma tran khi tnh tien tam C ve goc


toa o
O(0,0) 1 0 0

Chung ta co M : 1 0 1 0
Cx Cy 1

Bc 2 : Goi M2 la ma tran khi quay quanh O(0,0) mot
goc
Cac Phep Bien oi Affine (tt)

Cos Sin 0
Chung ta co :
M 2 Sin Cos 0
0 0 1

Bc 3 : Goi M3 la ma tran khi tinh tien


C(Cx,Cy) tr ve v
1 0 0
tr ban au
M3 0 1 0
Chung ta co :
Cx Cy 1
Cac Phep Bien oi Affine (tt)

- Goi M la ma tran khi quay P mot goc


quanh tam
y ta co: M = M1 * M2 * M3
C(Cx,Cy) , chung
Q
Vay Q :
P2
C
Q=P*M
P

> x
O P1
Bai 8 :
o hoa 3D
Cac he thong toa o

1.He toa o Decart , he toa o cau


Z Z

P(R,,)
. P(x,y,z) Y


O
X
X

He toa o Decart He
toa o cau
o hoa 3D
Cac he thong toa o

2.He toa o tay trai / tay phai


Y Y

O O

X X

Z Z

He toa o tay phai He toa o


tay trai
o hoa 3D
Cac he thong toa o

3.He toa o cuc bo / toan cuc

z
z

x y

He toa o cuc bo He toa


o toan cuc
o hoa 3D
Qui trnh hien th oi tng 3D

Qui trnh hin th trong ha 3D l mt chui cc bc ni tip nhau ,


kt qa ca mi bc s l u vo ca cc bc tip theo .
Input : Mo hnh cac oi tng
Output : Hnh anh cua cac oi tng tren man hnh

Qui trnh gm 8 bc :
Bc 1 : Modeling Transformation : Bin i t h ta i tng sang
h ta th gii thc.

Bc 2 : Trivial Rejection : Loi b cc i tng khng nhn thy c

Bc 3 : Illumination : Chiu sng i tng


o hoa 3D
Qui trnh hien th oi tng 3D

Bc 4 : Viewing Transformation : Chuyn t world space sang eye space

Bc 5: Clipping : Loi b phn nm ngoi viewing

Bc 6 : Projection : Chiu t eye space xung screen space

Bc 7 : Rasterization : Chuyn i tng sang dng pixel

Bc 8: Display : Hin th i tng .


o hoa 3D
Qui trnh hien th oi tng 3D
Chieu sang
Xen + Chieu

vung quan sat


Ve

vung hien th

He toa o man hnh


Cac mo hnh bieu dien oi
tng

Hai mo hnh bieu dien oi tng la :


- Mo hnh khung wireframe model
- Mo hnh danh sach a giac - object model

Mo hnh khung (wireframe model ) :


Object = { Num : so nh tao oi
tng
Pt[max] : danh sach nh
NumE : so canh
L[max] : Danh sach canh
} TwireFrame , * LwireFrame ;
Cac mo hnh bieu dien oi
tng

Mo hnh danh sach a giac - object model


Object = { Num : so nh tao oi
tng
Pt[max] : danh sach nh
NumF : so mat ( Faces)
f[max] : Danh sach mat
} Tpoly , * Lpoly ;

Trong o thong tin trong moi mat


f[i] se la :
Cac mo hnh bieu dien oi
tng

Moi f[i] = { Color : mau sac cua mat


Vis : bien nay cho biet mat nay
co thay c khong?
Num : so nh cua mat
L[max]: danh sach cac nh tao mat
} Tface , * Lface ;
Cac mo hnh bieu dien oi
tng

Nhan xet: Mo hnh khung ch co the bieu dien c nhng


oi
tng rong . Trong khi mo hnh a giac c s dung bieu dien
cac oi tng ac .

4 3

8 7

1 2

5 6
He toa o ong nhat
, cac phep bien oi affine tren
3D
Dang ma tran cua cac phep bien oi trong he toa
o ong nhat :

Moi phep bien oi Affine trong he toa o ong nhat


eu co the
biu din di dang :

Q= P * M

Trong o : M la ma tran bien oi


He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep tnh y
tien:
Thamso:
oditren
trucOx : Tx
oditren
trucOy : Ty
oditren
trucOz : Tz

O x
z
1 0 0 0

0 1 0 0
(Qx, Qy, Qz,1) (Px, Py, Qz,1)
0 0 1 0

Tx Ty Tz 1

He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep thay Ma tran


oi t le :
M : Sx 0 0 0
Thamso:

Tamt le
:O 0 Sy 0 0
M
Hesotletren
3 truc: s , s , s 0 0 Sz 0
x y z
0 0 0 1

y

O x
z
He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep quay :
y

Thamso:
v x, y, z

Truc quay : v ={x, y, z}


Gocquay: alpha

O x

z
He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep quay :Quay quanh truc oz


y
Thamso:
Truc quay : v ={0,0,1} Q
Goc quay: alpha

Ma tran M : P
Q
cos sin 0 0

sin cos 0 0 P
M O x
0 0 1 0

0 0 0 1 z

He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep quay :Quay quanh truc oy


y
Thamso:
Truc quay : v ={0,1,0}
Gocquay: alpha
Ma tran M :

cos 0 sin 0

0 1 0 0
M
sin 0 cos 0 O x

0 0 0 1

z
He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep quay :Quay quanh truc ox


Thamso: y

Truc quay : v ={1,0,0}


Gocquay: alpha

Ma tran M :
1 0 0 0

0 cos sin 0
M
0 sin cos 0
O x
0 0 0 1

z
He toa o ong nhat
, cac phep bien oi affine tren
3D

oi vi phep xien :
1
h yx h zx
0

M
h xy
1 h zy
0
h h 1 0
xz yz
0 0 0 1

Tom lai :Moi phep bien oi Affine trong he


toa o ong nhat
eu co the bien oi di dang : Q= P * M
trong o : M la ma
tran bien oi
He toa o ong nhat
, cac phep bien oi affine tren
3D

Tong hp cac bien oi Affine:


Cho phep bien oi T1 co ma tran bien oi M1

Cho phep bien oi T2 co ma tran bien oi M2

.
.
Cho phep bien oi Tn co ma tran bien oi Mn

Khi o phep bien oi T la tong hp cua cac phep


bien oi Ti
T : M=M1 * M2 * M n
o hoa 3D
He thong cac phep chieu

a.nh ngha tong quat : phep chieu la phep bien


oi mot
iem trong he thong toa o n chieu thanh mot iem
trong
he thong toa o m chieu , trong o m < n .

b.nh ngha ve phep chieu 3D : phep chieu 3D la


phep
bien oi mot iem trong he thong toa o 3 chieu
thanh mot
iem trong he thong toa o 2 chieu .
o hoa 3D
He thong cac phep chieu

c.Co 2 phep chieu c ban :


- Phep chieu phoi canh.

- Phep chieu song song

Phep chieu phoi canh : la phep chieu c nh


ngha bi
nhng tia chieu thang xuat phat t tam chieu
(center projection)
i qua oi tng va cat mat phang chieu (projective
plane ).
o hoa 3D
He thong cac phep chieu

Hnh minh hoa phep chieu phoi canh :


Q

Q'
P

P'
P r o je c tiv e p la n e
C e n te r P r o je c tio n
o hoa 3D
He thong cac phep chieu

Tnh chat phep chieu phoi canh :


- Khong bao toan ty le kch thc cua
oi tng .
- Anh chieu cua oi tng nam xa tam
chieu se nho hn oi tng cung kch
thc nhng gan tam chieu hn.
o hoa 3D
He thong cac phep chieu

Phep chieu song song : Trong phep chieu song song


cac
v tr toa o c chuyen xuong mat phang chieu doc
theo
cac ng thang song song (tia chieu) hay cung co the
noi
phep chieu song song la phep chieu co tam chieu at
vo
cc .

Tnh chatphep chieu song song :


- Bao toan ty le ve kch thc cua cac oi tng.
- Phep chieu song song cho hnh anh chnh xac ve oi
tng , cung nh kch thc oi tng nhng khong cho
thay c o sau cua oi tng .
o hoa 3D
He thong cac phep chieu

Hnh minh hoa phep chieu song song :

Q. . Q'

P. . P'
Projective plane
o hoa 3D
He thong cac phep chieu

Co 2 loai phep chieu song song da vao tia


chieu
- Phep chieu song song trc giao la phep chieu
song song co tia chieu vuong goc vi mat
phang chieu .

- Phep chieu song song khong trc giao la phep


chieu song song co tia chieu khong vuong
goc vi mat phang chieu .
o hoa 3D
Phep chieu phoi canh n gian

Phep chieu phoi canh c goi la n gian ,


neu no b rang buoc bi
mot so cac ieu kien nh sau :
He toa o quan sat trung vi he toa o oi
tng .
He toa o tay trai .

Mat phang quan sat trung vi mat phang


Oxy
Mat at tren mot truc .
Phep chieu phoi canh
Mat at tren truc z

Q
Cho iem P(x,y,z) , y
mat at tren truc oz e(0,0,E) P
z
Q ' P'
P 'y

P 'x
>
x

e ( 0 ,0 ,E )

P(x,y,z) se la bang bao nhieu sau khi thc hien


phep chieu ?
Phep chieu phoi canh
Mat at tren truc z

Xet tia chieu i t mat e en iem P

Phng trnh tham so co dang : e(t)=(1-t).e t + tP ;


t [0..1]
Px=(1-t).ex + tPx
Py=(1-t).ey + tPy
Pz=(1-t).ez + tPz = 0 (do mat at tren truc z)

T cac phng trnh tren , chung ta c :


Phep chieu phoi canh
Mat at tren truc z

1
t
Pz
1
E

Px
P' x
Pz
1
E

Py
P' y
Pz
1
E
Phep chieu phoi canh
Mat at tren truc x

Tng t trng hp mt t trn trc x

P' x 0

Py
P' y
Px
1
E

Py
P' z
Px
1
E
Phep chieu phoi canh
Mat at tren truc y

Tng t chng ta c trng hp mt t trn trc y


P' y 0

Px
P' x
Py
1
E

Pz
P' z
Py
1
E
Cac thuat toan kh
mat khuat cua oi tng

Mat khuat la mat khong nhn thay cua oi


tng khi quan sat oi tng , goc quan sat
se quyet nh nhng mat nao cua oi
tng la mat khuat.

Nguyen tac chung la bat ky mat nao b


che khuat se khong c ve len man hnh .
Van e la lam the nao e kh (loai bo)
cac mat khuat khi ve cac oi tng 3D ?.

Co nhieu thuat toan co the dung e kh


mat khuat cua oi tng.
Cac thuat toan kh
mat khuat cua oi tng

Mot so thuat toan :


Thuat toan loai bo mat sau
Thuat toan depth sorting
Thuat toan z-buffer
Thuat toan Scanline
Thuat toan Warnock
Thuat toan BSP
Thuat toan Ray casting
Thuat toan loai bo mat sau

Khi quan sat mot oi tng , tuy vao v tr


quan sat co nhng mat thay va nhng
mat khong thay cua oi tng
Thuat toan loai bo mat sau

Xet a giac U co N mat , thuat toan loai


bo mat sau se tien
hanh duyet tuan t qua cac mat cua a
giac U va xac nh
xem mat o co thay hay khong .
Thuat toan loai bo mat sau

Thuat toan:
for(i=0 ; i < NumF ; i++)
{ - Tnh vector phap tuyen hng ngoai n i
cua fi
- Tnh vector hng nhn vi
- Neu (vi*ni< 0) th fi.vis =0; // khong thay
mat fi
Ngc lai : f .vis =1 ; // nco thay mat f
i i

}
v

mat a giac
Bai tap

1. Xay dng cau truc d lieu bieu


dien oi tng theo mo hnh khung
va mo hnh a giac bang C / C++.
2. Cai at giai thuat chon loc mat sau
3. Cai at phep chieu phoi canh ,
song song .

You might also like