Professional Documents
Culture Documents
\
|
|
|
|
.
|
\
|
=
|
|
|
.
|
\
|
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