91
2009-1 학학 Chapter 5. Geometric Transformations 1 Chapter 5. Geometric Transformations

2009-1 학기 Chapter 5. Geometric Transformations 1

Embed Size (px)

Citation preview

Page 1: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 1

Chapter 5. Geometric Transformations

Page 2: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 2

Basic TransformationsBasic Transformations

Translation 물체의 위치를 straight line path 를 따라 한 좌표점에서 다른 좌표점으로

이동시키는 것 (x, y) -> (x’, y’) 로 이동시킬 때

x’ = x + tx, y’ = y + ty 이때 (tx, ty) 를 translation vector 혹은 shift vector 라고 함

matrix 형태로 2 차원 평행이동식을 쓰면 P’ = P + T P = x1 P’ = x1’ T = tx

x2 x2’ ty

Page 3: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 3

Figure 5-1 Translating a point from position P to position P’ with translation vector T

Figure 5-1 Translating a point from position P to position P’ with translation vector T

P

P’T

Page 4: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 4

Figure 5-2 Moving a polygon Figure 5-2 Moving a polygon

x

y

x

y

Page 5: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 5

Rotation xy plane 에서 물체를 circular path 를 따라 이동시키는 것으로 rotation angle

과 rotation point(pivot point) 가 필요 ( 그림 5-4) 에서

x’ = rcos ( + ) = rcoscos - rsinsin y’ = rsin ( + ) = rcossin + rsincos

로 구해짐 . x = rcos , y = rsin 이므로 x’ = xcos - ysin y’ = xsin + ycos

matrix 형태로 표시하면 P’ = R • P R = cos -sin sin cos

Page 6: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 6

Figure 5-3 Rotation of an object through angle about a pivot point (Xr, Yr)

Figure 5-3 Rotation of an object through angle about a pivot point (Xr, Yr)

P

P’

Xr

Yr

Page 7: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 7

Figure 5-4 Rotation of a point from position(x,y) to position (x’, y’) through an angle

Figure 5-4 Rotation of a point from position(x,y) to position (x’, y’) through an angle

(x, y)

(x’, y’)

r

r

Page 8: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 8

임의의 pivot position 을 중심으로 한 점을 회전시켰을 때 ( 그림 5-5) x’ = xr + (x - xr) cos - (y - yr) sin y’ = yr + (x - xr) sin + (y - yr) cos

Page 9: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 9

Figure 5-5 Rotating a point from position (x, y) to position (x’, y’) through an angle about rotation point (xr, yr)

Figure 5-5 Rotating a point from position (x, y) to position (x’, y’) through an angle about rotation point (xr, yr)

(x, y)

(x’, y’)

r

r

(xr, yr)

Page 10: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 10

Scaling 물체의 크기 변환 각 vertex ( 정점 ) 의 좌표치에 scaling factors 인 sx, sy 를 곱해서 얻음

x’ = x ·sx, y’ = y · sy matrix 형태로 표현하면

x’ = sx 0 x

y’ 0 sy y

Or

P’ = S · P

Page 11: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 11

Matrix Representations and Homogeneous CoordinatesMatrix Representations and Homogeneous Coordinates

basic transformation 을 matrix 형태로 표현하면 P’ = M1 · P + M2

P and P’ -> column vectors M1-> 2 by 2 array M2 -> two-element column matrix

final coordinate positions 이 중간의 좌표점을 구하지않고 처음 좌표점에서 직접 구하는 것이 효과적이다 이를 위해 M2 와 관련된 matrix addition 을 없애는 것이 필요 2 by 2 matrix representation 을 3 by 3 matrix representation 으로 바꾸어 모든 transformation equation 을 matrix multiplication 으로 나타낼 수 있도록

Page 12: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 12

two-dimensional transformation 을 a matrix multiplication 으로 표현하기 위해서 각 coordinate position (x, y) 를 homogeneous coordinate triple (xh, yh, h) 로

나타낸다 . ( 이때 x = xh / h, y = yh /h) 가장 간단한 형태로는 2 차원 점의 위치를 (x, y, 1) 로 표현하는 것

Page 13: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 13

Translation

x’ 1 0 tx x

y’ = 0 1 ty · y

1 0 0 1 1

Rotation

x’ cos -sin 0 x

y’ = sin cos 0 · y

1 0 0 1 1

  Scaling

x’ sx 0 0 x

y’ = 0 sy 0 · y

1 0 0 1 1

Page 14: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 14

Figure 5-7 A line scaled using sx = sy = 0.5Figure 5-7 A line scaled using sx = sy = 0.5

Page 15: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 15

Figure 5-8 Scaling relative to a chosen fixed point (xf, yf)Figure 5-8 Scaling relative to a chosen fixed point (xf, yf)

P1

P2

P3

(xf, yf)

Page 16: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 16

Composite Transformation Composite Transformation

Translations 두 개 연속된 translation vectors (tx1, ty1), (tx2, ty2) 가 점 P 에 적용되면 P’ = T(tx2, ty2) · {T(tx1, ty1) · P} = { T(tx2, ty2) · T(tx1, ty1)} · P 로 계산됨 여기에서 P 와 P’ 는 homogeneous-coordinate column vectors 로 나타냄

composite translation matrix 는 1 0 tx2 1 0 tx1 1 0 tx1+tx2

0 1 ty2 · 0 1 ty1 = 0 1 ty1+ty2

0 0 1 0 0 1 0 0 1

Or T(x2, ty2) · T(x1, ty1) = T(x1+tx2, ty1+ty2)

Page 17: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 17

Rotations Two successive rotations applied to point P:

P’ = R( 2) · {R(1) · P}

= {R(2) · R(1)} · P

= R(1 + 2) · P

Scaling Two successive scaling operations:

sx2 0 0 sx1 0 0 sx1 ·sx2 0 0

0 sx2 0 · 0 sy1 0 = 0 sy1 · sy2 0

0 0 1 0 0 1 0 0 1

Or S(sx2, sy2) · S(sx1, sy1) = S(sx1 · sx2, sy1 · sy2)

Page 18: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 18

General pivot point rotation ( 그림 5-9)

1)     회전의 중심점을 원점으로 이동시킨다2)     원점을 중심으로 물체를 회전시킨다3)     중심점을 원래의 점으로 이동시킨다

composite transformation matrix: 회전의 중심점 (pivot point) 가 (xr, yr) 일때

1 0 xr cos -sin 0 1 0 -xr

0 1 yr · sin cos 0 · 0 1 -yr

0 0 1 0 0 1 0 0 1

Page 19: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 19

Figure 5-9 A transformation sequence for rotating an object about a specified pivot point

Figure 5-9 A transformation sequence for rotating an object about a specified pivot point

(xr, yr)

(xr, yr)

Page 20: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 20

cos -sin xr(1-cos )+yr sin = sin cos yr(1-cos )-xr sin 0 0 1

 

Page 21: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 21

General Fixed-Point Scaling ( 그림 5-10)General Fixed-Point Scaling ( 그림 5-10)

계산순서 고정점이 원점에 위치하도록 이동한다 원점에 대해 물체의 크기 변환 계산을 한다 물체를 원래의 고정점으로 이동한다 .

1 0 xf sx 0 0 1 0 -xf sx 0 xf(1-sx)

0 1 yf · 0 sy 0 · 0 1 -yf = 0 sy yf(1-sy)

0 0 1 0 0 1 0 0 1 0 0 1

 

Page 22: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 22

Figure 5-10 A transformation sequence for scaling an object about a specified fixed point

Figure 5-10 A transformation sequence for scaling an object about a specified fixed point

(xr, yr)(xr, yr)

Page 23: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 23

General Scaling Direction ( 그림 5-11)General Scaling Direction ( 그림 5-11)

x, y direction 이 아닌 임의의 방향으로 물체의 크기를 조정하기 위해선 원하는 방향축을 원점으로 회전시킨후에 scaling transformation 을 적용한다 .

R-1() · S(s1, s2) · R()

s1cos2+s2sin2 (s2-s1)cossin 0

= (s2-s1)cossin s1sin2+s2cos2 0

0 0 1

Page 24: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 24

Figure 5-11 Scaling parameters s1 and s2 are to be applied in orthogonal directions defined by the angular displacement

Figure 5-11 Scaling parameters s1 and s2 are to be applied in orthogonal directions defined by the angular displacement

x

y

s1

s2

Page 25: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 25

rigid-body transformation matrix: translation 과 rotation 만 포함하는 경우 rxx rxy trx

ryx ryy try

0 0 1

윗 부분의 2 by 2 submatrix 는 orthogonal matrix 이다 두 벡터 (rxx, rxy), (ryx, ryy) 가 서로 수직인 단위벡터를 형성 :

1) 각 벡터는 단위 길이를 가지며 rxx

2 + rxy2 = ryx

2 + ryy2 = 1

2) 두 벡터는 서로 수직이다 (dot product 가 0)

rxx ryx + rxy ryy = 0

Page 26: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 26

Other TransformationsOther Transformations Reflection ( 그림 5-16)( 그림 5-17)

물체의 miror image 를 계산 반사축을 중심으로 180 도 회전하여 구함

x-axis (y = 0) 을 중심으로 한 reflection 을 위한 transformation matrix

1 0 0

0 -1 0

0 0 1

reflection about y axis

-1 0 0

0 1 0

0 0 1

Page 27: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 27

Figure 5-16 Reflection of an object about the x-axisFigure 5-16 Reflection of an object about the x-axis

OriginalPosition

ReflectedPosition

Page 28: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 28

Figure 5-17 Reflection of an object about y-axixFigure 5-17 Reflection of an object about y-axix

OriginalPosition

ReflectedPosition

Page 29: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 29

reflection relative to origin

-1 0 0

0 -1 0

0 0 1

reflection about y=x ( 그림 5-21)

1) 시계방향으로 45 도 회전하여 y=x 선을 x 축에 일치시킨다 .

2) x 축을 중심으로한 반사를 구함3) y=x 선을 반시계방향으로 45 도 회전

Page 30: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 30

Figure 5-21 Sequence of transformations to produce reflection about the line y = x

Figure 5-21 Sequence of transformations to produce reflection about the line y = x

y = x

y = x

Page 31: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 31

Shear ( 그림 5-23)( 그림 5-25) 물체의 내부가 미끄러진 형태로 모양을 변형시키는 것

x-direction shear relative to x-axis

1 shx 0

0 1 0

0 0 1

x ‘ = x + shx * y y’ = y

x-diretcion shear relative to the line y = yref

1 shx -shx*yref

0 1 0

0 0 1

Page 32: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 32

y-direction shear relative to the line x = xref

1 0 0

shy 1 -shy*xref

0 0 1

Page 33: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 33

Figure 5-23 x-direction shearFigure 5-23 x-direction shear

Page 34: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 34

Figure 5-24 y-direction shearFigure 5-24 y-direction shear

Page 35: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 35

Raster Methods for Geometric TransformationsRaster Methods for Geometric Transformations

사각형의 pixel array 를 다루는 raster functions 을 raster ops 라고 한다 . block transfer: 픽셀 블럭을 한 위치에서 다른 위치로 이동시키는 것

bilevel system 에서는 bitBlt (bit-block transfer) 라고 부름 그래픽스 패키지에서 제공하는 raster functions

copy: 한 픽셀 블럭을 한 위치에서 다른 위치로 이동시킴 read: 픽셀 블럭을 지정된 배열에 저장함 write: 픽셀 배열을 프레임버퍼내 한 위치로 보냄 pixel value 를 결합시키는 처리로 :

replace: pixel values 가 목적지에 이동됨 Boolean operations: and, or, exclusive-or

Rotations raster scaling of a block of pixels

Page 36: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 36

OpenGL Raster Transformations OpenGL Raster Transformations

glCopyPixels (xmin, ymin, width, height, GL_COLOR); glReadPixels (xmin, ymin, width, height, GL_RGB, GL_UNSIGNED_BYTE,

colorArray); // or GL_COLOR_INDEX glDrawPixels (width, height, GL_RGB, GL_UNSIGNED_BYTE, colorArray); // current

raster position glPixelZoom (sx, sy);

Page 37: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 37

Figure 5-26 Translating an object from screen position to the destination postion

Figure 5-26 Translating an object from screen position to the destination postion

Pmin

Pmax

P0

Page 38: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 38

Figure 5-27 Rotating an array of pixel values Figure 5-27 Rotating an array of pixel values

1 2 34 5 67 8 910 11 12

3 6 9 124 5 8 111 4 7 10

12 11 10 9 8 7 6 5 4 3 2 1

90° counterclockwise rotation

180° counterclockwise rotation

Page 39: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 39

Transformations between two-dimensional coordinate systems Transformations between two-dimensional coordinate systems

xy coordinates 에서 x’y’ coordinates 로 바뀌기 위해선 x’y’ 축을 xy 축에 겹쳐놓는 작업이 필요하다 x’y’ system 의 원점을 xy sytem 의 원점으로 이동시킨다 ( 그림 5-31) x’ 축을 x 축까지 회전시킨다 .

transformation matrix :

Mxy,x’y’ = R(-) · T(-x0, -y0)

Page 40: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 40

Figure 5-30 Cartesian x’y’ systemFigure 5-30 Cartesian x’y’ system

x0

y0

x’ axisy’ axis

Page 41: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 41

Figure 5-31 Position of the reference frames after translating the originFigure 5-31 Position of the reference frames after translating the origin

x0

y0

x’ axisy’ axis

Page 42: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 42

또 다른 방법으로 , positive y’ 방향을 나타내는 벡터 V 를 지정한다 ( 그림 5-32) y’ 방향의 단위벡터는

v = V = (vx, vy)

|V| x’ 축의 단위벡터 u 는 v 를 90 도 회전하여 구해짐

u = (vy, -vx)

= (ux, uy) rotation matrix 는 orthogonal unit vectors 로 나타낼 수 있으므로

x’y’ system 을 xy system 으로 회전하는데 필요한 matrix 는 ux uy 0

R = vx vy 0

0 0 1 가 된다 .

Page 43: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 43

Figure 5-32 Cartesian system x’y’ with origin at P0 = (x0, y0)Figure 5-32 Cartesian system x’y’ with origin at P0 = (x0, y0)

x0

y0

x’ axisy’ axis

P0

V

Page 44: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 44

응용에 따라 벡터 V 를 다음과 같이 정의하여 사용 ( 그림 5-33)

v = P1 - P0

|P1 - P0|

 

Page 45: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 45

Figure 5-33 A Cartesian x’y’ system defined with two coordinate positions, p0 and p1

Figure 5-33 A Cartesian x’y’ system defined with two coordinate positions, p0 and p1

x0

y0

x’ axisy’ axis

P0

V = P1 – P0P1

Page 46: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 46

Three-Dimensional Translation Three-Dimensional Translation

position P = (x, y, z) 에서 P’ = (x’, y’, z’) 로 이동시키는 matrix operation 은 x’ 1 0 0 tx x

y’ = 0 1 0 ty · y

z’ 0 0 1 tz z

1 0 0 0 1 1

혹은 P’ = T · P 로 나타냄

Page 47: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 47

Figure 5-34 Moving a coordinate position Figure 5-34 Moving a coordinate position

(x, y, z)

(x’, y’, z’)

T = (tx, ty, tz)

x-axis

y-axis

z-axis

Page 48: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 48

Figure 5-35 Shifting the position of a three-dimensional object Figure 5-35 Shifting the position of a three-dimensional object

(x, y, z)

(x’, y’, z’)

T = (tx, ty, tz)

x-axis

y-axis

z-axis

Page 49: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 49

Three-Dimensional Rotation Three-Dimensional Rotation

positive rotations angles: coordinate axis 를 중심으로 counterclockwise rotations 의 각도 의미

coordinate axis rotations z-axis rotation

x’ = xcos - ysin y’ = xsin + ycos z’ = z

homogeneous form 으로 나타내면 x’ cos -sin 0 0 x

y’ = sin cos 0 1 · y

z’ 0 0 1 0 z

1 0 0 0 1 1

Page 50: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 50

Figure 5-36 Positive rotations about a coordinate axis Figure 5-36 Positive rotations about a coordinate axis

x-axis

y-axis

z-axis

x-axis

y-axis

z-axis x-axis

y-axis

z-axis

Page 51: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 51

Figure 5-37 Rotation of an object about the z axis Figure 5-37 Rotation of an object about the z axis

x

z

y

Page 52: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 52

or

P’ = Rz( ) · P

x-axis rotation y’ = ycos - zsin z’ = ysin + zcos x’ = x

homogeneous form 으로 나타내면 x’ 1 0 0 0 x

y’ = 0 cos -sin 1 · y

z’ 0 sin cos 0 z

1 0 0 0 1 1

or P’ = Rx( ) · P

Page 53: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 53

y-axis rotation z’ = zcos - xsin x’ = zsin + xcos y’ = y

homogeneous matrix form 으로 나타내면 x’ cos 0 sin 0 x

y’ = 0 1 0 0 · y

z’ -sin 0 cos 0 z

1 0 0 0 1 1

or

P’ = Ry( ) · P

Page 54: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 54

General Three-Dimensional Rotations General Three-Dimensional Rotations

one of coordinate axes 와 평행한 축을 중심으로 회전한 경우1) rotation axis 가 parallel coordinate axis 에 일치하도록 object 를 이동시킨다2) rotation axis 를 중심으로 회전3) rotation axis 를 원래 위치로 이동 P’ = T-1 Rx() T P

Page 55: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 55

Figure 5-41 Sequence of transformations for rotating an object about an axis that is parallel to the axis

Figure 5-41 Sequence of transformations for rotating an object about an axis that is parallel to the axis

x

y

z

Rotation axis

x

y

z

x

y

z

x

y

z

(a) original position of object (b) rotate object through angle

(c) translate rotation axis onto x axis

(d) translate rotaion axis to original position

Page 56: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 56

one of coordinate axes 에 평행하지 않은 일반 축을 중심으로 회전한 경우1)     rotation axis 가 coordinate origin 을 통과하도록 object 를 이동2)     rotation axis 가 one of coordinate axes 와 일치하도록 object 를 회전3)     coordinate axis 를 중심으로 회전4)     rotation axis 가 원래의 방향으로 돌아오도록 inverse rotations 수행5) rotation axis 가 원래의 위치로 돌아오도록 inverse translation 수행

Page 57: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 57

Figure 5-42 Five transformation steps for obtaining a composite matrix

Figure 5-42 Five transformation steps for obtaining a composite matrix

p1

p2

x

y

zInitial position

p1’

p2

x

y

z

Step1translate p1 to theorigin

p1

p2”

x

y

zStep2rotate p2’ onto the z axis

p1

p2”

x

y

zStep3rotate the object around the z axis

p1’

p2

x

y

zStep4rotate the axis tothe original orientation

p1

p2

x

y

z

Step5translate the rotationaxis to the originalposition

Page 58: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 58

rotation axis 정의 ( 그림 5-43) two coordinate positions 으로 정의

V = P2 - P1

= (x2- x1, y2- y1, z2 - z1) rotation axis 의 unit vector u

V

U = = (a, b, c)

|V|

where a, b, c 는 rotation axis 의 direction cosines 로 다음과 같이 정의됨 x2 - x1 y2 - y1 z2 - z1

a = b = c =

|V| |V| |V|

Page 59: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 59

Figure 5-43 An axis of rotation defined with points P1 and P2Figure 5-43 An axis of rotation defined with points P1 and P2

p1

p2

u

x

y

z

Page 60: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 60

Figure 5-44 Translation of the rotation axis to the coordinate originFigure 5-44 Translation of the rotation axis to the coordinate origin

x

y

z

u

Page 61: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 61

Figure 5-45 Unit vector u is rotated about the x axis bring it into the xz plane (a), then it is rotated around the y axis to align it with z axis (b) Figure 5-45 Unit vector u is rotated about the x axis bring it into the xz plane (a), then it is rotated around the y axis to align it with z axis (b)

x

y

z

u x

y

z

u

(a) (b)

Page 62: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 62

Figure 5-46 Rotation of u around the x axis into the xz plane is accomplished by rotating u’ (the projection of u in the yz plane) through angle onto the z axis

Figure 5-46 Rotation of u around the x axis into the xz plane is accomplished by rotating u’ (the projection of u in the yz plane) through angle onto the z axis

x

y

z

uu’

uz = (0, 0, 1)

Page 63: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 63

Scalar product of two vectors:V1 • V2 = |V1| |V2| cos

Vector product of two vectors:V1 X V2 = u |V1| |V2| sin

ux uy uzV1 X V2 = V1x V1y V1z

V2x V2y V2z

u’ = (0, b, c)

Cos= = u’ • uz

| u’| |uz| d

cd = b2 + c2

uz = (0, 0, 1)

u’ X uz = ux |u’| |uz| sin

u’ X uz = ux • b

x

y

z

uu’

uz = (0, 0, 1)

Page 64: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 64

d sin = b

sin = db

Rx() =

1 0 0 00 c/d -b/d 00 b/d c/d 00 0 0 1

u’ X uz = ux |u’| |uz| sin

u’ X uz = ux • b

Scalar product of two vectors:V1 • V2 = |V1| |V2| cos

Vector product of two vectors:V1 X V2 = u |V1| |V2| sin

ux uy uzV1 X V2 = V1x V1y V1z

V2x V2y V2z

x

y

z

uu’

uz = (0, 0, 1)

Page 65: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 65

x

u” = (a, 0, d)uz = (0, 0, 1)

Cos = = du”• uz

|u”| |uz|

|uz| = |u”| = 1

u” X uz = uy |u”| |uz| sin

u” X uz = uy · (-a)

sin = -a

Scalar product of two vectors:V1 • V2 = |V1| |V2| cos

Vector product of two vectors:V1 X V2 = u |V1| |V2| sin

ux uy uzV1 X V2 = V1x V1y V1z

V2x V2y V2z

y

Page 66: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 66

전 과정에 필요한 matrix 표현 : 책 반드시 참고 R( ) = T-1 Rx-1( ) Ry-1() Rz( ) Ry( ) Rx( ) T

Ry() =

d 0 -a 00 1 0 0a 0 d 00 0 0 1

Page 67: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 67

5-12 Three-Dimensional Scaling5-12 Three-Dimensional Scaling

Scaling transformation matrix

x’ Sx 0 0 0 x

y’ = 0 Sy 0 0 y

z’ 0 0 Sz 1 z

1 0 0 0 1 1

Page 68: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 68

Figure 5-50 Doubling the size of an object Figure 5-50 Doubling the size of an object

x

y

z

Page 69: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 69

fixed position (xf, yf, zf) 에서의 scaling

1)     fixed position 을 원점으로 이동2)     원점에 대해 scaling

3)     fixed position 을 원래의 위치로 이동

sx 0 0 (1-sx)xf

T(xf, yf, zf) S(sx, sy, sz) T(-xf, -yf, -zf) = 0 sy 0 (1-sy) yf

0 0 sz (1-sz)zf

0 0 0 1

Page 70: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 70

Figure 5-51 A sequence of transformations for scaling an object relative to a selected fixed point

Figure 5-51 A sequence of transformations for scaling an object relative to a selected fixed point

(xf, yf, zf)

(a)

(xf, yf, zf)

(b)

(xf, yf, zf)

(c)

(xf, yf, zf)

(d)

Page 71: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 71

Other Three-Dimensional TransformationsOther Three-Dimensional Transformations

Reflections 3D reflection 은 reflection axis 혹은 reflection plane 에 대해 처리됨 reflection axis 의 경우엔 180 도 회전과 같고 reflection plane 의 경우엔 4

차원 공간에서 180 도 회전과 같다 . Reflection plane 이 xy, xz, yz 등 coordinate axis 의 경우엔 left-handed and right handed coordinate system 간의 변환과 같다 .

Right-handed system 에서 left-handed system 으로 변환하는 reflection 은 x, y coordinates 는 변화가 없고 z coordinates 의 부호만 바뀌는 결과를 가져옴

1 0 0 0

0 1 0 0

RFz = 0 0 -1 0

0 0 0 1

xy plane 에 대한 reflection 을 위한 매트릭스

Page 72: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 72

Figure 5-52 Conversion of coordinate specifications from a right-handed to a left-handed systemFigure 5-52 Conversion of coordinate specifications from a right-handed to a left-handed system

x

y

z

x

y

z

Reflectionrelative to thexy plane

Page 73: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 73

Shears z-axis shear

1 0 a 0

0 1 b 0

SHz = 0 0 1 0

0 0 0 1  

=> z value 에 비례하여 x, y coordinate values 를 변화시킴=> z 값은 그대로 유지하고 x, y 값만 바뀜

Page 74: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 74

Affine Transformation Affine Transformation

x’ = axx x + axy y + bx

y’ = ayx x + ayy y + by

의 형태로 변환되는 것을 2 차원 affine transformation 이라고 함 affine transformation 의 성질

parallel lines 은 parallel lines 로 변화되고 finite points 는 finite points 로 매핑됨

translation, rotation, scaling, reflection, shear: two-dimensional affine transformation 의 대표적인 예

또 다른 예로 두 좌표계의 변환 등이 포함됨

Page 75: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 75

OpenGL Geometric-Transformation Functions OpenGL Geometric-Transformation Functions

Basic OpenGL Geometric Transformations

glTranslate* (tx, ty, tz); // *: d or f (double or float) glTranslatef (25.0, -10.0, 0.0); glRotate* (theta, vx, vy, vz);

// vx, vy, vz: 원점을 통과하는 회전축 방향 지정// *: d or f (double or float), rotation angle in degrees

glRotatef (90.0, 0.0, 0.0, 1.0); glScale* (sx, sy, sz);

 

Page 76: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 76

OpenGL Matrix Operations set up a matrix for the geometric Transformation modelview matrix 사용 glMatrixMode (GL_MODELVIEW);

// 4 by 4 modelview matrix 를 current matrix 로 // other modes: projection mode, texture mode, color mode glLoadIdentity ( ); // identity matrix 를 current matrix 로 glLoadMatrix* (elements16); // current matrix 의 elements 를 다른 값으로 지정 // single-subscripted, 16-element array(floating-point values) 를

//elements16 으로 지정 

glMatrixMode (GL_MODELVIEW);

GLFloat elems [16];

GLint k;

Page 77: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 77

For (k = 0; k < 16; k++) elems [k] = float (k);

GlLoadMatrixf (elems);

 

=>      결과 matrix:

0.0 4.0 8.0 12.0

M = 1.0 5.0 9.0 13.0

2.0 6.0 10.0 14.0

3.0 7.0 11.0 15.0

Page 78: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 78

glMultMatrix* (otherelements16);

// current matrix 가 otherelements16 으로

// 만들어진 matrix 와 곱해짐// M = M M’

 

glMatrixMode (GL_MODELVIEW);

 

glLoadIdentity ( );

glMultMatrixf (elemsM2);

glMultMatrixf (elemsM1);

 

=> M = M2 M1

Page 79: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 79

주의점 : OpenGL 은 column-major 로 matrix element 를 저장 즉 , OpenGL 에서 mjk 는 column j 중 row k 라는 점 일반 matrix 와는 반대 16-elements single-subscripted array 로 matrix 를 지정하므로써 혼란을 피함

OpenGL Matrix Stacks multiple views and transformation sequences 의 경우 각각에 대해 composite

matrix 를 스택에 저장 , 32 개 스택까지 가능 modelview 스택의 수를 정할 수 있음 glGetIntegerv (GL_MAX_MODELVIEW_STACK_DEPTH, stackSize); glPushMatrix ( ); // current matrix 를 스택의 top 에 둠 glPopMatrix ( ); // 스택의 top 에 있는 matrix 를 없앰

 

Page 80: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 80

OpenGL Geometric Transformation ExampleOpenGL Geometric Transformation Example

# include <GL/glut.h>

void init (void)

{

glClearColor (1.0, 1.0, 1.0, 0.0);

glMatrixMode (GL_PROJECTION);

gluOrtho2D (-200.0, 200.0, -200.0, 200.0);

// glMatrixMode (GL_MODELVIEW);

}

void displayFcn (void)

{

Page 81: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 81

glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode (GL_MODELVIEW);

glColor3f(0.0, 0.0, 1.0);

glRecti(50, 100, 200, 150);

glColor3f(1.0, 0.0, 0.0);

glTranslatef(-100.0, -100.0, 0.0);

glRecti(50, 100, 200, 150);

Page 82: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 82

glLoadIdentity();

glRotatef(90.0, 0.0, 0.0, 1.0);

glRecti(50, 100, 200, 150);

glLoadIdentity();

glScalef(-0.5, 1.0, 1.0);

glRecti(50, 100, 200, 200);

glFlush();

}

Page 83: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 83

void main(int argc, char **argv)

{

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowPosition(50, 50);

glutInitWindowSize(600, 300);

glutCreateWindow("GL_MODELVIEW Example");

init();

glutDisplayFunc(displayFcn);

glutMainLoop();

}

Page 84: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 84

Page 85: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 85

Composite-transformation ExampleComposite-transformation Example

# include <GL/glut.h>

class wcPt2D {

public:

GLfloat x, y;

};

class wcPt3D {

public:

GLfloat x, y, z;

};

void init (void)

{

Page 86: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 86

glClearColor (1.0, 1.0, 1.0, 0.0);

glMatrixMode (GL_PROJECTION);

gluOrtho2D (-100.0, 100.0, -100.0, 100.0);

glMatrixMode (GL_MODELVIEW);

}

void triangle (wcPt2D *verts)

{

GLint k;

glBegin (GL_TRIANGLES);

for (k = 0; k < 3; k++)

glVertex2f (verts[k].x, verts[k].y);

glEnd ();

}

Page 87: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 87

/* Procedure for generating a matrix for rotation about

an axis defined with points p1 and p2 */

void rotate3D (wcPt3D p1, wcPt3D p2, GLfloat thetaDegrees)

{

float vx = (p2.x - p1.x);

float vy = (p2.y - p1.y);

float vz = (p2.z - p1.z);

glTranslatef(p1.x, p1.y, p1.z);

glRotatef(thetaDegrees, vx, vy, vz);

glTranslatef(-p1.x, -p1.y, -p1.z);

}

Page 88: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 88

/* Procedure for generating a matrix for a scaling transformation

with respect to an arbitrary fixed point */

void scale3D (GLfloat sx, GLfloat sy, GLfloat sz, wcPt3D fixedPt)

{

glTranslatef(fixedPt.x, fixedPt.y, fixedPt.z);

glScalef(sx, sy, sz);

glTranslatef(-fixedPt.x, -fixedPt.y, -fixedPt.z);

}

void displayFcn (void)

{

wcPt2D verts [3] = {{-50.0, -25.0}, {50.0, -25.0}, {0.0, 50.0}};

wcPt3D fixedPt = {1.0, 1.0, 0.0};

wcPt3D p1 = {0.0, 0.0, 0.0}, p2 = {1.0, 0.0, 0.0};

GLfloat thetaDegrees = 10.0;

Page 89: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 89

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.0, 0.0, 1.0);

glViewport(0, 0, 500, 400);

triangle(verts);

glColor3f(1.0, 0.0, 0.0);

scale3D(0.5, 0.5, 0.5, fixedPt);

rotate3D(p1, p2, thetaDegrees);

triangle(verts);

glFlush();

}

Page 90: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 90

void main(int argc, char **argv)

{

glutInit (&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowPosition(50, 50);

glutInitWindowSize(600, 500);

glutCreateWindow("Geo-Trans Example");

init();

glutDisplayFunc(displayFcn);

glutMainLoop();

}

Page 91: 2009-1 학기 Chapter 5. Geometric Transformations 1

2009-1 학기 Chapter 5. Geometric Transformations 91