2차원 변환(2D)
2D 기하 변환의 종류에는 세 가지가 있습니다.
- 이동(translation)
- 크기조절(scaling)
- 회전(rotation)
일반적인 2D 변환의 형태는 행렬을 사용합니다.
[변환(transformation) 행렬]
x, y : 입력이 되는 물체의 점점(vertex) 좌표
[2차원 이동 변환 행렬]
예를 들어, 오브젝트를 이루는 모든 포인트를 오른쪽으로 4, 아래로 3만큼 이동한다고 가정해 보겠습니다.
어떤 변환 행렬(Transformation Matrix)이 필요한지 알아야 합니다.
사실 여기서 만족하는 a, b, c, d 값은 찾을 수 없습니다.
큰 변환 행렬을 이용해서 찾을 수 있습니다.
w = 1
c = x 축 이동 값
f = y 축 이동 값
이렇게 변환 행렬을 구할 수 있습니다.
하지만 컴퓨터는 직육면체의 행렬보다 정육면체의 행렬을 선호합니다.
정육면체의 행렬일 경우 처리속도가 빠르기 때문입니다.
위의 방식을 따르면 됩니다.
2차원 변환이지만 3차원으로 표현해야 합니다. ( w = 1 )
이렇게 한 차원의 좌표(n)를 추가한 좌표 (n+1)로 표현하는 것을
동차 좌표계라고 합니다.
w는 반드시 0보다 큰 값이어야 하며, w = 1 경우에는 동차 좌표가 정규화되었다고 합니다.
만약 w != 1 이라면 (x/w, y/w, w/w) 로 정규화가 가능합니다.
결국 이동 시에 변환 행렬을 정의하면 다음과 같습니다.
벡터 또한 동차좌표를 통해 표현할 수 있습니다.
포인트는 위치, 벡터는 방향을 나타냅니다. 이 말은 벡터는 위치 이동에 영향을 받지 않는다는 말이 됩니다.
길이가 같고 같은 방향을 가리킨다면 어느 위치에 있든 같은 벡터이기 때문입니다.
이때 w = 0 이 가능합니다.
w = 0 이면 위치 이동 값에 영향이 없게 됩니다. 곱해봐야 전부 0이기 때문입니다.
결국 포인트와 벡터를 동차좌표로 표현해 보면
벡터는 w = 0 이고 2D 에서는 (x, y, 0) 으로 3D 에서는 (x, y, z, 0) 으로 표현이 가능하고
포인트는 w = 1 이고 2D 에서는 (x, y, 1) 으로 3D 에서는 (x, y, z, 1) 으로 표현이 가능합니다.
[2차원 크기 변환 행렬]
오브젝트의 크기를 조절(scaling)하는 행렬은 다음과 같습니다.
크기 조절을 할 때 모든 크기 조절은 원점을 기준으로 일어납니다.
크기 조절은 기준점이 무조건 있어야 하고, 그 기준점은 개발 상황에 따라 다를것입니다.
매번 달라지는 기준점을 어떻게 설정해야 할까요?
크기 조절을 할 경우 다음과 같은 과정을 거치면 됩니다.
- 기준이 되는 점을 지정한다.
- 기준점을 원점으로 이동시킨다.
- 크기 조절(scaling)을 해준다.
- 다시 원래 위치로 이동시킨다.
[2차원 회전 변환 행렬]
회전 변환 행렬이란, 좌표계에서 회전 변환을 할 때 사용하는 행렬을 말합니다.
2차원 직교좌표계에서 θ만큼 회전할 때, 변환 행렬은 아래와 같습니다.
회전 변환 행렬의 유도 과정은 다음과 같습니다.
위의 그림에서 점 P와 P' 의 관계를 수식으로 나타낼 수 있다면 각 a에 대한 변환 행렬을 알아낼 수 있습니다.
P = (x, y)
직선 OP와 점 P의 관계는 아래와 같습니다.
점 P' = (x', y')는 점 P를 θ 만큼 회전시킨 것이므로 다음과 같이 나타낼 수 있습니다.
이것을 삼각함수의 덧셈정리를 이용해서 풀어보면 다음과 같은 식이 나옵니다.
회전 변환 또한 원점을 중심으로 회전합니다.
이동, 크기조절, 회전으 특징은 변환에서 모든 축이 서로 직각입니다.
하지만 축이 직각이 아닌 경우에는 어떻게 해야할까요?
이때는 전단(shearing)을 사용합니다.
오늘 배운것을 정리해보면
2D변환에는 이동, 크기조절, 회전, Shearing이 있고, 각 변환은 3x3 동차 행렬을 이용해서 표현이 가능합니다.