2차원 직교좌표계에서 모든 것은 점의 집합으로 표현할 수 있습니다. 예를 들면 선은 두개의 점을 잇는 점들의 집합이고 삼각형은 3개의 점을 잇는 선들을 만드는 점들의 집합이고, 원은 원의 중심을 기준으로 반지름만큼 떨어진 점들의 집합입니다. 이렇듯 2차원 직교좌표계에서 어떤 것을 표현하기 위해서 가장 기본이 되는 원소는 점입니다. 따라서 이 점을 회전하거나 이동하게 되면 모든 것을 회전하거나 이동할 수 있습니다. 이동, 회전, 스케일에 대해서 각각 어떻게 이루어져있고 어떤 방법으로 계산할 수 있는지 알아보도록 하겠습니다.

1. 이동 (Translate)

이동은 XY평면에서 2가지 방향이 존재합니다. X축과 평행한 방향, Y축과 평행한 방향 이렇게 두가지가 있고 이 두가지를 조합하면 모든 이동을 표현할 수 있습니다. 

점 A의 좌표는 (4, 3) 입니다. 맨 처음에 점 A가 (0,0) 에 있다고 가정할때 현재의 위치로 이동하기 위해서는 X축으로 4만큼 Y축으로 3만큼 이동하게 됩니다. 점 B의 좌표는 (-2, -3) 입니다. 맨 처음 점 B가 (0, 0)에 있다고 가정하면 이때 점 B는 X축으로 -2만큼 Y축으로 -3만큼 이동한 것입니다. 이것을 일반화하면

이동하기 전의 점을 A(x0, y0) 라고 가정할때 이 점이 A(x1, y1)로 이동했다면

X축으로 x1 - x0 만큼 y축으로 y1 - y0 만큼 이동하였다.

라고 말할 수 있습니다. 이는 방정식처럼 수학적으로 계산한 것인데요. 이를 행렬을 이용하여 표현할 수 있습니다. 2차원 직교좌표계에서 이동을 행렬로 표현하기 위해서 3 by 3 행렬이 필요한데요. 열과 행이 모두 3개씩인 행렬입니다. 

다음과 같은 이동 행렬을 이용하여 X축으로 X만큼 Y축으로 Y만큼 이동할 수 있습니다. 이 행렬을 M이라고 하면 점 A가 점 B로 이동할때 M 행렬을 이용한다고 하면 B = A * M 이 되는 것입니다. 

2. 회전 (Rotate)

회전은 2차원 직교좌표계이기 때문에 해당 평면 위에서만 회전을 한다고 생각해야 합니다. 즉 회전축은 가상의 Z 축이라고 생각하면 됩니다. 그리고 회전을 하는 기준점이 필요합니다. 그리고 얼마만큼 회전할지 각도가 필요합니다.  

점 A가 처음에 (5, 0) 에 있다가 원점(0, 0)을 기준으로 일정한 각도만큼 회전하여 A(4, 3)이 되었습니다. 이때 삼각함수를 이용하여 원점에서 점 A까지의 거리가 5인 것을 알고 삼각형의 밑변과 높이를 각각 점 A의 X좌표, Y좌표가 되면 회전이 되는 것입니다. 이를 원점을 기준으로 회전이 이루어졌지만, 항상 회전이 원점을 기준으로 이루어지지 않습니다. 이때는 해당 점을 기준으로 이동을 먼저 하여 원점으로 이동하여 회전을 하고 다시 이동을 할 수도 있고, 이동할 점이 원점에 있다고 가정하고 회전을 하고 다시 이동을 하는 방법이 있습니다. 이를 행렬로 표현하면

다음과 같이 표현할 수 있습니다. θ 는 회전 각도입니다. 해당 행렬에서 (1, 3)과 (2, 3)의 원소가 0인 것을 알 수 있는데요. 0인 이유는 원점을 기준으로 했다는 뜻이기 때문입니다. 만약에 원점을 기준으로 한 것이 아니라면 각각 회전 기준점의 X좌표, Y좌표가 들어가게 되는 것이죠.

3, 스케일 (Scale)

스케일은 늘리는 것을 의미하는데요. (1, 0)을 2배로 늘리면 (2, 0) 되는 것을 의미합니다. 스케일은 정말 간단한데요. X축으로 늘리고 싶은 스케일을 Sx라고 하고 Y축으로 늘리고 싶은 스케일을 Sy라고 하면 각 좌표에 Sx와 Sy를 곱하면 되는 것입니다. 따라서 이를 행렬로 표현하면

다음과 같은 행렬로 쓸 수 있습니다. 일반적으로 이동과 회전 행렬은 한번에 적용이 가능하지만 스케일은 조금 다르기 때문에 한번에 같이 적용하지는 않습니다. 

다음에는 2차원이 아닌 3차원에서 각 변환이 어떻게 이루어지는지 알아보도록 하겠습니다.

+ Recent posts