2D Transformations

Download Report

Transcript 2D Transformations

2D Transformations
1
Rotation About the Origin
y-axis
To rotate a line or polygon, we must
rotate each of its vertices.
(x2,y2)
To rotate point (x1,y1) to point (x2,y2)
we observe:
From the illustration we know that:
x1 = rcosA
y1= rsinA
x1 = rcos(A+B) y2= rsin(A+B)
(x1,y1)
r
B
A
(0,0)
x-axis
From the double angle formulas:
sin (A + B) = sinAcosB + cosAsinB
cos (A + B) = cosAcosB - sinAsinB
Substituting:
y2 = rcosAcosB – rsinAsinB
Therefore:
y2 = y1cosB + x1sinB
We have
x2 = x1cosB - y1sinB
y2 = x1sinB + y1cosB
2
Translations
Moving an object is called a translation. We translate a point by adding to
the x and y coordinates, respectively, the amount the point should be
shifted in the x and y directions. We translate an object by translating
each vertex in the object.
Ty
Tx
x2 = x2 + tx
y 2 = y 1 + ty
3
Scaling
Changing the size of an object is called a scale. We scale an object by scaling
the x and y coordinates of each vertex in the object.
x2 = sxx1
y2 = syy1
4
Homogeneous Coordinates
Although the formulas we have shown are usually the most efficient way to
implement programs to do scales, rotations and translations, it is easier to use
matrix transformations to represent and manipulate them.
In order to represent a translation as a matrix operation we use 4 x 4 matrices and pad
our points to become 4x1 matrices. We are using 4x4 matrices because
everything is done in 3D in OpenGL
Point P = (x, y, 0, 1) (make it a 4x1 before matrix multiplication)
Rø =
S =
T =
cos ø
sin ø
0
0
-sin ø
cos ø
0
0
0
0
1
0
0
0
0
1
Sx
0
0
0
0
Sy
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
0
0
1
0
Tx
Ty
0
1
5
Composite Transformations - Scaling
Given our three basic transformations we can create other transformations.
Scaling with a fixed point
A problem with the scale transformation is that it also moves the object
being scaled.
Scale a line between (2, 1) (4,1) to twice its length.
(2
(0
(0
(0
0
1
0
0
0
0
1
0
0)
0)
0)
1)
(2) =
(1)
(0)
(1)
(4)
(1)
(0)
(1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
0)
0)
0)
1)
(4) =
(1)
(0)
(1)
(8)
(1)
(0)
(1)
0
Before
After
1
2
3
4
5
6
7
8
9
10
6
Composite Transforms - Scaling (cont.)
If we scale a line between (0, 1) (2,1) to twice its length, the left-hand
endpoint does not move.
(2
0
0
1
0
0)
0)
0)
1)
(0)
(1)
(0)
(1)
=
(0
(0
(0
0
1
0
0
(0)
(1)
(0)
(1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
0)
0)
0)
1)
(2) =
(1)
(0)
(1)
(4)
(1)
(0)
(1)
Before
After
0
1
2
3
4
5
6
7
8
9
10
(0,0) is known as a fixed point for the basic scaling transformation. We can
use composite transformations to create a scale transformation with
different fixed points.
7
Fixed Point Scaling
Scale by 2 with fixed point = (2,1)
1.
Translate the point (2,1) to the origin
2.
Scale by 2
3.
Translate origin to point (2,1)
3
2
1
(1
(0
(0
(0
0
1
0
0
0
0
1
0
2)
1)
0)
1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
(2
(0
(0
(0
0
1
0
0
0
0
1
0
-2)
0)
0)
1)
(2)
(1)
(0)
(1)
= (2)
(1)
(0)
(1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
-2)
0)
0)
1)
(4)
(1)
(0)
(1)
= (6)
(1)
(0)
(1)
0)
0)
0)
1)
(1
(0
(0
(0
0
1
0
0
0
0
1
0
-2)
-1)
0)
1)
= (2
(0
(0
(0
0
1
0
0
0
0
1
0
-2)
0)
0)
1)
Before
After
0
1
2
3
4
5
6
7
8
9
10
8
More Fixed Point Scaling
Scale by 2 with fixed point = (3,1)
1.
Translate the point (3,1) to the origin
2.
Scale by 2
3.
Translate origin to point (3,1)
(1
(0
(0
(0
0
1
0
0
0
0
1
0
3)
1)
0)
1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
(2
(0
(0
(0
0
1
0
0
0
0
1
0
-3)
0)
0)
1)
(2)
(1)
(0)
(1)
= (1)
(1)
(0)
(1)
(2
(0
(0
(0
0
1
0
0
0
0
1
0
-3)
0)
0)
1)
(4)
(1)
(0)
(1)
= (5)
(1)
(0)
(1)
0)
0)
0)
1)
(1
(0
(0
(0
0
1
0
0
0
0
1
0
-3)
-1)
0)
1)
= (2
(0
(0
(0
0
1
0
0
0
0
1
0
-3)
0)
0)
1)
Before
After
0
1
2
3
4
5
6
7
8
9
10
9
Rotation about a Fixed Point
Rotation Of ø Degrees About Point (x,y)
• Translate (x,y) to origin
• Rotate
• Translate origin to (x,y)
(x,y)
(x,y)
(1
(0
(0
(0
0
1
0
0
0
0
1
0
x)
y)
0)
1)
(cosø
(sinø
(0
(0
-sinø
cosø
0
0
0
0
1
0
0) (1
0) (0
0) (0
1) (0
0
1
0
0
0
0
1
0
-x) (cosø
-y) =(-sinø
0) (0
1) (0
sinø
cosø
0
0
You rotate the box by rotating each vertex.
0 -xcosø + ysinø + x )
0 -xsinø - ycosø + y)
1
0
)
0
1
)
10
Shears
Original Data
y Shear
1
a
0
0
0
1
0
0
0
0
1
0
0
0
0
1
x Shear
1
0
0
0
b
1
0
0
0
0
1
0
0
0
0
0
GRAPHICS --> x shear --> GRAPHICS
11
Reflections
Reflection about the y-axis
-1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
Reflection about the x-axis
1
0
0
0
0
-1
0
0
0
0
1
0
0
0
0
1
12
More Reflections
Reflection about the origin
-1 0
0 -1
0
0
0 0
0
0
1
0
0
0
0
1
Reflection about the line y=x
0
1
0
0
1
0
0
0
0
0
1
0
0
0
0
1
13