You are on page 1of 22

2D Transformations

Cc php bin i 2D

Gii thiu

Bn cht ca php bin i hnh hc l thay i v tr ca i tng, lm


thay i i tng v hng, kch thc, hnh dng.

Hai phng php bin i hnh hc:

Bin i i tng: thay i ta ca i tng.

Bin i h ta : to h ta mi v tt c i tng s c chuyn v h


ta mi.

Cc php bin i hnh hc c bn: tnh tin, quay, bin i t l, bin


dng.

Php bin i hnh hc


Mt php bin i l mt nh x T:
T : R2 R2
P (x , y ) Q (x ' , y ' )

x ' f (x , y )

y ' g (x , y )

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

Php bin i hnh hc (cont.)


Php bin i Affine l php bin i vi f(x,y) v g(x,y) l 2 hm
tuyn tnh:
x ' ax by c

y ' dx ey f
Biu din php bin i Affine di dng ma trn:

x '
a b c x


y ' d e f y Q T .P
1
0 0 1 1


Thng thng, chng ta ch kho st php bin Affine nn ta
thng dng thut ng php bin i ng l php bin i
Affine.

Php tnh tin - Translation


Php tnh tin dng dch chuyn i tng t v tr ny sang v
tr khc.

Q
try

trx

Php tnh tin (cont.)


Gi tr = (trx , try) l vector tnh tin t im P n im Q th:

x ' x trx

y ' y try
Ma trn bin i ca php tnh tin:
1 0 trx

T (trx ,try ) 0 1 try


0 0 1

Php quay - Rotation

i hng i tng.
Php quay gm c tm quay C, gc quay .
Bin i im P thnh Q sao cho:
P v Q nm trn ng trn tm C,
Gc PCQ bng

Do v tr ca tm quay nn ta c 2 loi php quay:


Php quay quanh gc ta
Php quay quanh mt tm bt k

Gc quay theo qui c chiu dng l ngc chiu kim ng h.


+

Php quay mt gc quanh gc ta


Q

cos

x
'

cos

sin

sin

y ' sin x cos y


0

sin
cos
0

0
1

Php quay mt gc quanh gc ta


Php i xng tm (gc ta )
P v Q i xng qua gc ta . Do , php i xng tm l php
quay quanh gc ta mt gc 1800.

=180
0

x ' x
T 1800

y ' y

1 0 0

0 1 0
0
0 1

Php quay mt gc quanh tm bt k


Q
Q

C(xc,yc)
O

T(-xc,-yc)

T()

T(xc,yc)

Q
10

Php quay mt gc quanh tm bt k (cont.)


Ta c th chng minh php quay tm C(xc, yc) mt gc l kt
hp ca cc php bin i sau y:
Tnh tin theo vector (-xc,-yc) dch chuyn tm quay v gc ta :
P = T(-xc, -yc) . P
Quay quanh gc ta mt gc : Q = T( ) . P
Tnh tin theo vector (xc,yc) a tm quay v v tr ban u: Q =
T(xc,yc) . Q

Kt hp 3 php bin i trn ta c: Q = T(x c,yc) . T( ) . T(-xc,yc) . P


Nh vy, ma trn bin i ca php quay tm bt k l:
T x c , y c , T (x c , y c )T T x c ,y c

cos

sin
0

sin
cos
0

(1 cos )x c sin y c
sin x c (1 cos )y c
1

11

Php bin i t l - Scaling

sx

T (s x , s y ) 0
0

sx v sy c gi l h s co gin theo trc x v trc y

Co gin i tng

x ' sx x

y ' sy y

0
sy
0

12

Php bin i t l (cont.)

Khi sy = 1 th i tng co gin theo trc x

Khi sx = 1 th i tng co gin theo trc y

13

Php bin i t l (cont.)

Khi sy = sy th ta gi y l php bin i ng dng uniform scaling, bo


ton tnh cn xng ca i tng.
Nu sx = sy < 1 th y l php thu nh, ngc li th y l php phng to

Thu nh

Phng to

14

Php bin i t l (cont.)


Php i xng trc

i xng qua trc honh:


x ' x
sx 1

y ' y
s y 1

i xng qua trc tung:

x ' x
y ' y

s x 1
sy 1

1 0 0
0 1 0

0 0 1

1 0 0
0 1 0

0 0 1

15

Php bin dng - Shearing

Thay i hnh dng ca i tng

Php bin dng theo trc x lm thay i honh cn tung gi nguyn.

1 shx

x
'

sh
y

T
sh
,
0

0 1

x
y
'

0 0

Php bin dng theo trc y lm thay i tung cn honh gi nguyn.

x ' x

T
0
,
sh

shy

y
y
'

sh
x

y
y

0 0

1 0
0 1

16

Php bin dng - Shearing

Php bin dng tng qut

x ' x shx y

T
sh
,
sh

shy

x
y
y
'

sh
x

y
y

shx

1
0

0
1

17

Bi tp
Bin i i tng 2D

M t tnh cht hnh hc ca i tng

points

color
center
H ta i tng

H ta thc

Tm, c ta so vi h ta thc : center


Dng hnh hc, c dng a gic i xng qua tm : points
Mu sc : color

18

Bi tp
Bin i i tng 2D (cont.)

p dng cc php bin i trn i tng


tr

H ta thc

Tnh tin i tng bng vect tr, thc cht l tnh tin tm ca i tng
Quay i tng theo gc angle, thc cht l quay cc nh ca a gic

19

Bi tp
Bin i i tng 2D (cont.)

Cu trc d liu

#define MAXNUMPOINTS
10
struct Point2D
{
double x, y;
};
struct Object
{
Point2D center;
Point2D points[MAXNUMPOINTS];
int numOfPoints;
int color;
Point2D tr;
double angle;
//
};

20

Bi tp
Bin i i tng 2D (cont.)

V i tng i tng: void drawObject(Object &o);


V a gic xc nh bi points, lu cc im points[i] c ta thc
l: points[i] + center
i tng c v bng mu color

Tnh tin i tng: void translateObject(Object &o);


Tnh tin tm ca i tng theo vect tnh tin : center = center + tr
Lu trng hp i tng vt khi khung nhn:
Tnh li tm ca i tng
Tnh li vect tnh tin

tr

21

Bi tp
Bin i i tng 2D (cont.)
Quay i tng: void roatateObject(Object &o);
Quay cc nh ca a gic ca i tng theo theo gc angle :
rotatePoints(o.points[i], o.angle);

Chng trnh chnh:

Object o;
initObject(o);
while (!kbhit())
{
o.color = CYAN;
drawObject(o);
delay(50);
o.color = BLACK;
drawObject(o);
translateObject(o);
ratateObject(o);
//
}

22

You might also like