예지의 개발 로그포스 (Yeji's Log Force)

[Graphics Study] 변환 - 2D 본문

CS/Computer Graphics

[Graphics Study] 변환 - 2D

Yeji Heo 2022. 11. 9. 12:40

1. 변환의 종류

- Scaling(축소, 확대)

2D에서는 축소확대인자(Sx,Sy)사용

예를들어 (x,y)를 축소/확대 할 때 x방향 인자, y방향 인자를 각각 곱해주면 됨. => (Sx*X, Sy*Y)

 

* 다만 그래픽스에서는 행렬의 곱셈으로 나타내므로

(Sx 0 ) (x) = (Sx X)

(0 Sy)  (y)     (Sy Y)

 

- Rotation(회전)

(x') =(cosθ - sinθ) (x)

(y')   (sinθ - cosθ) (y)

로 나타낼 수 있다. 여기서 θ: 회전하고 싶은 각도

 

*이건 반시계방향의 회전 기준이다. 시계방향으로 회전하려면 -θ를 대입한다.

 

- Translation(이동)

(x) + (dx) = (x + dx)

(y)     (dy)    (y+dy)

 

Translation의 경우 Scailing이나 Rotation과 달리 벡터 '덧셈'으로 이루어진다.

만약 Translation도 행렬곱으로 나타내고 싶다면, homogeneous coordinates(동차 좌표)를 사용하면 된다.

이를 사용하면 3*3행렬이 도출되므로 Scaling과 Rotation에도 1을 추가해서(Sx,Sy,1) 계산하여 3*3행렬을 만들면 된다.

그러면 회동과 이동을 둘 다 처리하는 등 일들이 가능해진다.

단 그 순서는 여전히 중요하다.

행렬곱에서 AB != BA이듯이 변환도 일종의 행렬곱으로서 교환법칙이 성립하지 않는다.

 

* 원점이 아닌 임의의 점을 변환하고 싶다면

그 점을 원점으로 Translate 한 후 변환, 원래위치로 Translate

안 그러면 다른 결과가 나옴

 

2. Affine transform

Affine transform은 아래와 같이 분류된다.

  • Linear transform

                - Scaling

                - Rotation

                - 그 외 여러가지

  • Translation

이처럼 Scaling, Rotation과 Translation은 다른 범주에 있다.

이들을 함께 적용(확대와 이동, 회전과 이동 등..)할 때 행렬곱 연산에도 영향을 준다.

-> 몇개의 Affine transform이 주어지더라도, [L|t] 결과가 도출된다.

[L|t]는 L(Linear transform combination)먼저 적용 후 t(combined translation)를 더하는 것. (Lp + t)

여기서 t(combined translation)은 x방향으로 얼마, y방향으로 얼마 이동하라는 translation들을 의미한다.

 

3. Rigid Motion

[L|t]에는 선형 변환들인 Scaling, Rotation이 포함되었으며 Translation도 포함되어 있다.

그러나 Scaling을 하지 않는 경우도 있다. 이 경우 물체의 모양은 변하지 않고, 오직 위치와 각도만 변한다.

이를 Rigid-body Motion 혹은 Rigid Motion이라고 한다.

다른 선형 변환 없이 Rotation만 포함하므로 [R|t]로 표현한다. 

역시나 Rotaion먼저 적용 후 translation을 더한다. (Rp + t)

 

'CS > Computer Graphics' 카테고리의 다른 글

그래픽스 구성요소, 그래픽 시스템  (0) 2023.04.23
[Graphics Study] 변환 - 3D  (0) 2022.11.09
[Graphics Study] 모델링  (0) 2022.10.17
[Graphics Study] 수학 기초  (0) 2022.10.17
[Graphics Study] 컴퓨터 그래픽스  (0) 2022.10.15
Comments