You are on page 1of 36

HA MY TNH

Trng i Hc Bch Khoa TP H Ch Minh


Khoa Khoa hc & K thut My tnh
CHNG 5:
BIN I HNH
Slide 2 Faculty of Computer Science and Engineering - HCMUT
NI DUNG TRNH BY
Gii thiu nhng khi nim c bn ca php bin i
affine.
Php bin i hnh 2D
Php bin i hnh 3D
Bin i h trc ta
S dng php bin i affine trong chng trnh
V khung cnh 3D vi OpenGL
Slide 3 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
Php bin i affine l khi nim c bn nht ca ha
my tnh, l trng tm ca OpenGL.
Dng khung ta v h ta ng nht.
Php bin i affine tng th l hp ca 3 php bin i
affine c bn: php bin i t l, php quay v php tnh
tin.
x
y
x
y
z
trc khi
bin i
sau khi
bin i
sau khi
bin i
trc khi
bin i
a) b)
Slide 4 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
ng dng ca php bin i
To khung cnh 3D
t nhng i tng
n gin
dng hnh mu
12 ln
To i tng
phc tp t i
tng n gin
Slide 5 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
ng dng ca php bin i

#
#
Nhn khung cnh
nhng gc nhn khc
nhau bng cch thay i
hng, v tr ca camera
To hot hnh bng
cch di chuyn v quay
h ta ring ca
tng i tng
Slide 6 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
S dng php bin i trong OpenGL
x
x
y
y
z z
P
3

P
1

P
2

CT
X l &
hin th
P
1
, P
2
,... Q
1
, Q
2
,...
glBegin(GL_LINES);
glVertex3f(. . .); //gi P1 n ng ng
glVertex3f(. . .); //gi P2 n ng ng
glVertex3f(. . .); //gi P3 n ng ng
glEnd();
ng ng
ha: l mt lot
nhng thao tc
c p dng cho
cc im gi
xung ng ng.
Slide 7 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
Bin i i tng v bin i h trc ta
Bin i i tng: h trc ta gi nguyn, bin
i i tng.
Bin i h trc ta : bin i h trc ta , biu
din i tng trong h trc mi.
Slide 8 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
nh ngha php bin i tng qut
Php bin i lm thay i im P trong khng gian
2D (hoc 3D) thnh mt im Q bng mt cng thc
hay thut ton T no .

x
y
x
y
z
P
Q
T
0
P
Q
a) b)
P = (Px, Py, 1); Q = (Qx, Qy, 1) (Q - nh)
(Qx, Qy, 1) = T (Px, Py, 1) (T php bin i)
Q = T(P).
Slide 9 Faculty of Computer Science and Engineering - HCMUT
CC KHI NIM C BN
Php bin i affine
L php bin i thng dng trong ha my tnh
C dng n gin: ta ca Q l t hp tuyn tnh
cc ta ca P.
Q
x
= m
11
P
x
+m
12
P
y
+m
13

Q
y
= m
21
P
x
+m
22
P
y
+m
23




|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 1 0 0 1
23 22 21
13 12 11
y
x
y
x
P
P
m m m
m m m
Q
Q
T
hng th 3 lun l
(0, 0, 1)
Slide 10 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php tnh tin
Q
x
= P
x
+ m
13

Q
y
= P
y
+ m
23

|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 1 0 0
1 0
0 1
1
23
13
y
x
y
x
P
P
m
m
Q
Q
|
|
|
.
|

\
|
1 0 0
1 1 0
2 0 1
x
y
x
y
2
1
Slide 11 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php bin i t l
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 1 0 0
0 0
0 0
1
y
x
y
x
y
x
P
P
S
S
Q
Q
Q
x
= S
x
P
x

Q
y
= S
y
P
y

x
y
x
y
x
y
|
|
|
.
|

\
|
1 0 0
0 3 . 1 0
0 0 3 . 1
|
|
|
.
|

\
|
1 0 0
0 5 . 0 0
0 0 5 . 1
Php bin
i t l
u
Php bin
i t l
khng u
Slide 12 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php bin i t l (php i xng)

y
y
x
|
|
|
.
|

\
|
1 0 0
0 1 0
0 0 1
y
x
x
|
|
|
.
|

\
|

1 0 0
0 1 0
0 0 1
|
|
|
.
|

\
|

1 0 0
0 1 0
0 0 1
Slide 13 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php bin i t l (php i xng)
x
y
|
|
|
.
|

\
|

1 0 0
0 2 0
0 0 1
Slide 14 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php quay
Q
x
= P
x
cos(u) P
y
sin(u)
Q
y
= P
x
sin(u) + P
y
cos(u)

|
|
|
.
|

\
|

1 0 0
0 ) cos( ) sin(
0 ) sin( ) cos(
u u
u u
y
x
y
x
60
0

|
|
|
|
.
|

\
|

1 0 0
0 5 . 0 2 / 3
0 2 / 3 5 . 0
Slide 15 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php quay (chng minh)
x
y
P
Q
R
u

u u u u
u u u u
u
u
cos sin sin cos cos sin
sin cos sin sin cos cos
) sin(
) cos(
y x y
y x x
y
x
P P R R Q
P P R R Q
R Q
R Q
+ = + =
= =
+ =
+ =
Slide 16 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Php trt
y
x
y
x
y
x
y
x
|
|
|
.
|

\
|
1 0 0
0 1
0 0 1
g
|
|
|
.
|

\
|
1 0 0
0 1 0
0 1 h
|
|
|
.
|

\
|
1 0 0
0 1
0 1
g
h
Slide 17 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Nghch o ca php bin i affine
x
y
x
y
z
P
Q
T
0
P
Q
a) b)
T
T
T
P = TQ = M
-1
Q
|
|
.
|

\
|

11 21
12 22 1
det
1
m m
m m
M
M
det M = m
11
m
22
m
12
m
21

a s cc trng hp
ct th 3 l (0, 0, 1)
Slide 18 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Nghch o ca php bin i affine
|
|
|
|
|
|
|
.
|

\
|
=

1 0 0
0
1
0
0 0
1
1
y
x
S
S
M
|
|
|
.
|

\
|
=

1 0 0
0 ) cos( ) sin(
0 ) sin( ) cos(
1
u u
u u
M
|
|
|
.
|

\
|

=

1 0 0
0 1 0
0 1
1
h
M
|
|
|
.
|

\
|

1 0 0
1 0
0 1
23
13
1
m
m
M
Php bin i t l Php quay
Php trt
Php tnh tin
Slide 19 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Hp cc php bin i
x
y
P
Q
W
T
2
()
T
1
()
T()
T
2
(T
1
P) = (T
2
T
1
)P
Q
Q
P
V
P
u
u
Tnh tin im P vi vector v = (- V
x
, -V
y
)
Quay xung quanh gc ta gc u.
Tnh tin im P v v tr c.
|
|
|
.
|

\
|

|
|
|
.
|

\
|

|
|
|
.
|

\
|
1 0 0
1 0
0 1
1 0 0
0 ) cos( ) sin(
0 ) sin( ) cos(
1 0 0
1 0
0 1
y
x
y
x
V
V
V
V
u u
u u
|
|
|
.
|

\
|

=
1 0 0
) cos( ) sin(
) sin( ) cos(
y
x
d
d
u u
u u
Slide 20 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Tnh cht ca php bin i affine
Bo ton t hp affine ca cc im
T(a
1
P
1
+ a
2
P
2
) = a
1
T(P
1
) + a
2
T(P
2
) vi a
1
+ a
2
= 1
Bo ton ng thng v mt phng
Bo ton tnh song song
nh hng n din tch :


Bo ton t l khong cch

M det
ation transform before area
sformation after tran area
=
A
B
P t
1 - t
T(B)
T(A)
T(P)
t
1 - t
T
Slide 21 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 2D
Tnh cht ca php bin i affine
Ct ca ma trn M l khung ta sau khi bin i
x
y
0 i
j
m
1

m
2

m
3

(-2, 3)
( )
3 2 1
m m m =
|
|
|
.
|

\
|
=
1 0 0
23 22 21
13 12 11
m m m
m m m
M
|
|
|
.
|

\
|

1 0 0
402 . 1 866 . 0 5 . 0
232 . 1 5 . 0 866 . 0
Php quay xung
quanh im (-2, 3)
vi gc quay 30
0

Mi PB affine l hp ca nhng PB affine n gin
M = (tnh tin)(trt)(t l)(quay)
m
1
= Mi, m
2
= Mj,
m
3
= M0
Slide 22 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 3D
Cng thc tng qut
|
|
|
|
|
.
|

\
|
=
1 0 0 0
34 33 32 31
24 23 22 21
14 13 12 11
m m m m
m m m m
m m m m
M
|
|
|
|
|
.
|

\
|
=
|
|
|
|
|
.
|

\
|
1 1
z
y
x
z
y
x
P
P
P
M
Q
Q
Q
Slide 23 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 3D
Php tnh tin
|
|
|
|
|
.
|

\
|
1 0 0 0
1 0 0
0 1 0
0 0 1
34
24
14
m
m
m
Php bin i t l
|
|
|
|
|
.
|

\
|
1 0 0 0
0 0 0
0 0 0
0 0 0
z
y
x
S
S
S
x
y
z
z
y
x
Slide 24 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 3D
Php trt
|
|
|
|
|
.
|

\
|
1 0 0 0
0 1 0 0
0 0 1
0 0 0 1
f
Php quay
x
z
y
P
Q
P Q
P
Q
Q = (P
x
, fP
x
+ P
y
, P
z
)
x-roll, y-roll, z-roll
khi gc quay l 90
0
:
z-roll: xy
x-roll: yz
y-roll: zx
Slide 25 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 3D
Php quay
|
|
|
|
|
.
|

\
|

=
1 0 0 0
0 0
0 0
0 0 0 1
) (
c s
s c
R
x
|
|
|
|
|
|
.
|

\
|

=
1 0 0 0
0 0
0 0 1 0
0 0
) (
c s
s c
R
y
|
|
|
|
|
|
.
|

\
|

=
1 0 0 0
0 1 0 0
0 0
0 0
) (
c s
s c
R
z
|
c) quay quanh trc
y (30
0
)
d) quay quanh trc
z (- 90
0
)
x x
y y
z z
a) ngi
nh
b) quay quanh trc
x (- 70
0
)
x x
z
z
y y
Slide 26 Faculty of Computer Science and Engineering - HCMUT
PHP BIN I HNH 3D
Hp cc php bin i
Php quay xung quanh mt trc bt k
x
y
z
Q
P
|
u
|
u
u x.
Quay xung quanh trc x vi gc
quay |.
Khi phc u.
R
u
(|)=R
y
(-u)R
z
(|)R
x
(|)R
z
(-|)R
y
(u)
|
|
|
|
|
.
|

\
|
+ +
+ +
+ +
1 0 0 0
0 ) 1 ( ) 1 ( ) 1 (
0 ) 1 ( ) 1 ( ) 1 (
0 ) 1 ( ) 1 ( ) 1 (
2
2
2
z x z y y z x
x y z y z y x
y x z z x y x
u c c su u u c su u u c
su u u c u c c su u u c
su u u c su u u c u c c
Slide 27 Faculty of Computer Science and Engineering - HCMUT
BIN I H TRC TA
x
y
a
b
c
d
P
0
0
i
j
i
j
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 1
d
c
M b
a
|
|
|
.
|

\
|
1
y
x
P
P
(P
x
, P
y
, 1)
T

Slide 28 Faculty of Computer Science and Engineering - HCMUT
BIN I H TRC TA
Hp ca nhiu php bin i h trc ta
x
y
a
b
P
c
d
e
f
T
1

T
2

H ta #1
H ta #3
H ta #2
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
=
|
|
|
.
|

\
|
1 1 1
2 1 1
f
e
M M d
c
M b
a
Slide 29 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
x
y
32
25
#1
#2
glBegin(GL_LINES);
glVertex2d(V[0].x, V[0].y);
glVertex2d(V[1].x, V[1].y);
glVertex2d(V[2].x, V[2].y);
...// nhng im cn li
glEnd();
cvs.moveTo(V[0]);
cvs.lineTo(V[1]);
cvs.lineTo(V[2]);
...// nhng im cn li
cvs.setWindow(...);
cvs.setViewport(...);
C 2 cch v
ngi nh #1
V ngi nh
#2 ???
Slide 30 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
Cch lm phc tp
Q = transform2D(M, P);
cvs.moveTo(transform2D(M, V[0]));
cvs.lineTo(transform2D(M, V[1]));
cvs.lineTo(transform2D(M, V[2]));
...// nhng im cn li
- Vn l kh tm ra ma trn M
Slide 31 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
Cch lm n gin
V
V
Q
Q
CT
S
S
S
y

S
x

ca s
khung
nhn
WV
CT c khi gn l ma trn
n v:
CT = CT*M
glScaled(sx, sy, 1.0)
glTranslated(dx, dy, 0)
glRotated(angle, 0, 0, 1)
Slide 32 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
Cch lm n gin
cvs.setWindow(...); //thit lp ca s
cvs.setViewport(...);// thit lp khung nhn
cvs.initCT(); //bt u vi bin i ng nht

house(); // v ngi nh s #1
cvs.translate2D(32, 25); //CT by gi l php bin i tnh tin
cvs.rotate2D(-30); //CT by gi bao gm php tnh tin v php quay
house();// v ngi nh s #2
Slide 33 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
void Canvas::initCT(void){
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void Canvas::scale2D(double sx, double sy){
glMatrixMode(GL_MODELVIEW);
glScaled(sx, sy, 1.0);
}
void Canvas::translate2D(double dx, double dy){
glMatrixMode(GL_MODELVIEW);
glTranslated(dx, dy, 0);
}
void Canvas::rotate2D(double angle){
glMatrixMode(GL_MODELVIEW);
glRotated(angle, 0, 0, 1.0);
}
Slide 34 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
a) b)
V d
a) b)
ng thng 30
0

for(count=0; count<5; count++)
{
starMotif();
cvs.rotate2D(72.0);
}
void drawFlake(){
for(count=0; count<6;count++)
{
flakeMotif();
cvs.scale2D(1.0, -1.0);
flakeMotif();
cvs.scale2D(1.0, -1.0);
cvs.rotate2D(60.0);
}
}
Slide 35 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
Lu gi CT sau ny dng n
CT1
CT2
CT3
CT1
CT2
CT3
CT4
CT1
CT2
CT3
CT4
CT1
CT2
CT3
a) trc b) sau khi pushCT() c) sau khi rotate2D() d) sau khi
popCT()
CT3.rotate
void Canvas::pushCT(){
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
}
void Canvas::popCT(){
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
}
Slide 36 Faculty of Computer Science and Engineering - HCMUT
S DNG PHP BIN I TRONG CHNG TRNH
V d
a)
b)
W
H
D
L
cvs.pushCT(); // so we can return here
cvs.translate2D(W, H); // position for the first motif
for(row = 0; row < 3; row++){ // draw each row
pushCT();
for(col = 0 ; col < 3; col++){
motif();
cvs.translate2D(L, 0);} //move to the right
cvs.popCT(); // back to the start of this row
cvs.translate2D(0, D); }//move up to the next row
cvs.popCT(); //back to where we started

You might also like