Computer Graphics: 2D Transformations Kocaeli Universitesity Computer Engineering Department Fall...

Post on 26-Mar-2015

226 views 5 download

Tags:

Transcript of Computer Graphics: 2D Transformations Kocaeli Universitesity Computer Engineering Department Fall...

Computer Graphics:2D Transformations

Kocaeli UniversitesityComputer Engineering Department

Fall 2011

1

Geometric Transformation

• What is geometric transformation?• Operations that are applied to the geometric

description of an object to change its position, orientation, or size are called geometric transformations

2

3

2D Transformations

x

yx

y

x

y

4

2D Transformations

x

yx

y

x

y

Applications:- Animation

- Image/object manipulation

- Viewing transformation

- etc.

5

2D Transformation

• Given a 2D object, transformation is to change the object’s – Position (translation)– Size (scaling)– Orientation (rotation)– Shapes (shear)

• Apply a sequence of matrix multiplications to the object vertices

6

Point Representation

• We can use a column vector (a 2x1 matrix) to represent a 2D point x

y• A general form of linear transformation can be

written as: x’ = ax + by + c

OR

y’ = dx + ey + f

X’ a b c xY’ = d e f * y1 0 0 1 1

7

Translation• Re-position a point along a straight line • Given a point (x,y), and the translation distance

(tx,ty)

The new point: (x’, y’) x’ = x + tx y’ = y + ty (x,y)

(x’,y’)

OR P’ = P + T where P’ = x’ p = x T = tx y’ y ty

tx

ty

8

Translation

• How to translate an object with multiple vertices?

Translate individualvertices

9

2D Rotation

• Default rotation center: Origin (0,0)

Rotate counter clockwise

Rotate clockwise

10

(x,y)

(x’,y’)

(x,y) -> Rotate about the origin by

(x’, y’)

How to compute (x’, y’) ?

r

2D Rotation

11

(x,y)

(x’,y’)

(x,y) -> Rotate about the origin by

(x’, y’)

How to compute (x’, y’) ?

x = r cos () y = r sin ()

r

x’ = r cos () y’ = r sin ()

2D Rotation

12

2D Rotation

(x,y)

(x’,y’)

r

x = r cos () y = r sin ()

x’ = r cos () y = r sin ()

x’ = r cos ()

= r cos() cos() – r sin() sin()

= x cos() – y sin()

y’ = r sin ()

= r sin() cos() + r cos()sin()

= y cos() + x sin()

13

2D Rotation

(x,y)

(x’,y’)

r

x’ = x cos() – y sin()

y’ = y cos() + x sin()

Matrix form?

x’ cos() -sin() x y’ sin() cos() y

=

14

How to rotate an object with multiple vertices?

Rotate individualVertices

2D Rotation

15

2D Scaling

Scale: Alter the size of an object by a scaling factor (Sx, Sy), i.e.

x’ = x . Sx y’ = y . Sy

x’ Sx 0 xy’ 0 Sy y=

(1,1)

(2,2) Sx = 2, Sy = 2

(2,2)

(4,4)

16

2D Scaling

(1,1)

(2,2) Sx = 2, Sy = 2

(2,2)

(4,4)

Not only the object size is changed, it also moved!! Usually this is an undesirable effect We will discuss later (soon) how to fix it

Scaling facts

17

18

Put it all together

• Translation:

• Rotation:

• Scaling:

y

x

t

t

y

x

y

x

y

x

t

t

y

x

cossin

sincos

y

x

y

x

t

t

s

s

y

x

0

0

Homogeneous Coordinates -1

• It is well known that many application involves sequences of geometric transformations

• For example, an animation might require an object to be translated, rotated and scaled at each increment of the motion

• If you want to first rotates an object, then scales it, you can combine those two transformation to a composite transformation like the following equation

19

0 cos sincos sin*

0 sin cossin cosx x x

y y y

S S SA S R

S S S

Homogeneous Coordinates -2

• However, it will be difficult to deal with the above composite transformation and translation together. Because, translation is not 2 by 2 matrix representation

• Consider how the matrix representations discussed in the previous sections can be reformulated so that such transformation sequences can be efficiently processed

20

Homogeneous Coordinates -3

• A standard technique for expanding each two-dimensional coordinate position representation (x, y) to three-element representation, called Homogeneous Coordinates, where homogeneous h is a nonzero value such that

21

,h hx yx y

h h

• A convenient choice is simply to set h=1, so each two-dimensional position is then represented with homogeneous coordinate (x,y,1).

22

Or, 3x3 Matrix Representations

• Translation:

• Rotation:

• Scaling:

x’ 1 0 tx x y’ = 0 1 ty * y1 0 0 1 1

x’ cos() -sin() 0 x y’ sin() cos() 0 * y1 0 0 1 1

=

x’ Sx 0 0 x y’ = 0 Sy 0 * y1 0 0 1 1

Why use 3x3 matrices?

23

Why Use 3x3 Matrices?

• So that we can perform all transformations using matrix/vector multiplications

• This allows us to pre-multiply all the matrices together

• The point (x,y) needs to be represented as (x,y,1) -> this is called Homogeneous coordinates!• How to represent a vector (vx,vy)?

24

Composing Transformation

• Composing Transformation – the process of applying several transformation in succession to form one overall transformation

• If we apply transforming a point P using M1 matrix first, and then transforming using M2, and then M3, then we have:

(M3 x (M2 x (M1 x P )))

25

Composing Transformation

• Composing Transformation – the process of applying several transformation in succession to form one overall transformation

• If we apply transforming a point P using M1 matrix first, and then transforming using M2, and then M3, then we have:

(M3 x (M2 x (M1 x P ))) = M3 x M2 x M1 x P

M

(pre-multiply)

26

Composing Transformation

• Matrix multiplication is associative M3 x M2 x M1 = (M3 x M2) x M1 = M3 x (M2 x M1)

• Transformation products may not be commutative A x B != B x A • Some cases where A x B = B x A A B translation translation scaling scaling rotation rotation uniform scaling rotation

(sx = sy) translation rotation?

Example1: General Two-Dimensional Pivot-Point Rotation

• So we can generate a 2D rotation about any other pivot point (x, y) by performing the following sequence of translate-rotate-translate operations

27

(xr,yr

)(xr,yr

)(xr,yr

)(xr,yr)

Example1 (Cont)1. Translate the object so that the pivot-point position

is moved to the coordinate origin2. Rotate the object about the coordinate origin3. Translate the object so that the pivot point is

returned to its original position

28

1 0 1 0 cos sin (1 cos ) sincos sin 0

0 1 sin cos 0 0 1 sin cos (1 cos ) sin

0 0 10 0 1 0 0 1 0 0 1

r r r r

r r r r

x x x y

y y y x

( , ) ( ) ( , ) ( , , )r r r r r rT x y R T x y R x y

Example2: Scaling without translation

1. Translate the object to so that the fixed point coincides with the coordinate origin

2. Scale the object with respect to the coordinate origin

3. Use the inverse of the translation in step (1) to return the object to its original position

29

Example2 (Cont)

30

(xr,yr

)(xr,yr

)(xr,yr) (xr,yr)

Translate Scale Translate

100

)1(0

)1(0

100

10

01

100

00

00

100

10

01

yfy

xfx

f

fx

f

f

sys

sxs

y

x

s

s

y

x

y

yxffffyxff ssyxSyxTssSyxT ,,,, ,,

Some Other Transformations

Shearing and Reflections

31

32

Shearing

• Y coordinates are unaffected, but x coordinates are translated linearly with y

• That is:– y’ = y – x’ = x + y * h

x 1 h 0 xy = 0 1 0 * y1 0 0 1 1

33

x 1 0 0 xy = g 1 0 * y1 0 0 1 1

Shearing will not change the area of the object

Interesting Facts:

Shearing in Y

34

Reflection

35

Reflection

36

Reflection

37

Reflection about X-axis

38

Reflection about X-axis

x 1 0 0 xy = 0 -1 0 * y1 0 0 1 1

39

Reflection about Y-axis

40

Reflection about Y-axis

x -1 0 0 xy = 0 1 0 * y1 0 0 1 1

41

What’s the Transformation Matrix?

42

What’s the Transformation Matrix?

x -1 0 0 xy = 0 -1 0 * y1 0 0 1 1

More about reflection?

• Reflection about y=x• Reflection about y=-x

43

44

The standard rotation matrix is used to rotate about the origin (0,0)

cos() -sin() 0 sin() cos() 0 0 0 1

What if I want to rotate about an arbitrary center?

Rotation Revisit

45

Arbitrary Rotation Center

• To rotate about an arbitrary point P (px,py) by :

(px,py)

46

Arbitrary Rotation Center

• To rotate about an arbitrary point P (px,py) by : – Translate the object so that P will coincide with the

origin: T(-px, -py)

(px,py)

47

Arbitrary Rotation Center

• To rotate about an arbitrary point P (px,py) by : – Translate the object so that P will coincide with the

origin: T(-px, -py) – Rotate the object: R()

(px,py)

48

Arbitrary Rotation Center

• To rotate about an arbitrary point P (px,py) by : – Translate the object so that P will coincide with the

origin: T(-px, -py) – Rotate the object: R()– Translate the object back: T(px,py)

(px,py)

49

Translate the object so that P will coincide with the origin: T(-px, -py)

Rotate the object: R() Translate the object back: T(px,py)

Put in matrix form: T(px,py) R() T(-px, -py) * P

x’ 1 0 px cos() -sin() 0 1 0 -px x y’ = 0 1 py sin() cos() 0 0 1 -py y1 0 0 1 0 0 1 0 0 1 1

Arbitrary Rotation Center

50

The standard scaling matrix will only anchor at (0,0)

Sx 0 0 0 Sy 0 0 0 1

What if I want to scale about an arbitrary pivot point?

Scaling Revisit

51

To scale about an arbitrary fixed point P (px,py):

(px,py)

Arbitrary Scaling Pivot

52

To scale about an arbitrary fixed point P (px,py): Translate the object so that P will coincide

with the origin: T(-px, -py)

(px,py)

Arbitrary Scaling Pivot

53

To scale about an arbitrary fixed point P (px,py): Translate the object so that P will coincide

with the origin: T(-px, -py) Scale the object: S(sx, sy)

(px,py)

Arbitrary Scaling Pivot

54

To scale about an arbitrary fixed point P (px,py): Translate the object so that P will coincide

with the origin: T(-px, -py) Scale the object: S(sx, sy) Translate the object back: T(px,py)

(px,py)

Arbitrary Scaling Pivot