2D scaling은 scaling factors, and 로 이루어져 있을 때,

와 좌표를 회전 시키기 위해서는 위의 그림을 통해 rotation matrix를 구할 수 있다.

최종적으로 나오는 rotation matrix는 다음과 같다.
점의 평행이동은 다음과 같이 이동 거리 만큼을 더해주면 된다. 하지만, 앞서 보았던 연산들과 함께 사용하기 위해 행렬로 표기하면 더욱 편하게 연산할 수 있다. 이를 위해 homogeneous 좌표계를 도입한다.

homogeneous 좌표계는 1차원을 늘려준 좌표계이고 우리말로는 동차 좌표계라고 부른다.
이렇게 homogeneous 좌표계로 변환하면 아래와 같이 행렬곱, 덧셈으로 쉽게 평행이동을 표현할 수 있다.
다만, 주어진 2D point 에서 homogeneous 좌표계가 반드시 만 존재하는 것은 아니다.

예로 cartesian 좌표계 (2,3)은 (2,3,1), (4,6,2), (6,9,3)처럼 여러 homogeneous 좌표계로 표현될 수 있으며 이를 일반화 하면 로 표현할 수 있고, 이때 의 plane으로 projection 시키면 로 표현할 수 있으며 cartesian 좌표계에서는 로 나타낼 수 있다.
이제 homogeneous 좌표계에서 scaling과 rotation이 2D에서 어떻게 나타낼 수 있는지 살펴보겠다.

앞서 보았던 Scaling, Rotation, Translation 을 합쳐서 연산할 수 있다. 다만 순서에 따라서 결과물은 특수한 케이스를 제외하면 같은 rotation matrix와 translation matrix를 사용하더라도 달라진다.
아래의 예시는 rotation을 적용한 후 translation을 적용한 결과이다.

아래의 결과는 translation을 적용한 후 rotation을 적용한 결과이다. 이를 통해 알 수 있듯 순서에 따라 결과물이 달라지며 실제 연산 matrix의 결과물도 서로 다른 것을 확인할 수 있다.

예시로, 한번에 나타내게 되면 아래의 수식처럼 나타낼 수 있다.

S,R을 묶어서 linear transform으로 나타내면 로 표기할 수 있다. 이렇게 하면 이 먼저 적용되고 나중에 가 적용되어 스케일링 및 회전이 먼저 일어나고 그 후에 평행이동이 이루어짐을 알 수있으며, 이때 모양과 형태가 변화하지 않음으로 강체 변환, rigid motion이라고 할 수 있다. 만약 Scaling을 하지 않았다고 한다면 단순히 로 나타낼 수 있으며 로 연산된다.
이제 3D일 경우를 살펴보자. 3D일 경우 scaling은 아래의 그림과 같이 확인할 수 있다.
단순히 한 차원만 더 늘어났다고 볼 수 있다.

3D rotation의 경우 를 고려해야한다.
이때, 쉽게 접근하면 회전하고자 하는 축을 고정시켜 놓고 나머지를 회전하는 방법이다. 여기서는 z축을 회전 시키고자 한다면 z축을 고정시켜놓고 x,y축을 회전하면 된다.


만약에 x축을 기준으로 회전을 한다고 하면 x축을 고정시키고 y, z축을 회전시키면 된다.

현재는 각 축을 고정시켜 놓고 회전을 하지만, 실제 연산에서는 순차적인 회전 matrix를 통해 한번에 회전을 수행한다.
3D 평행이동의 경우에도 간단히 차원 하나만 늘려주면 된다.

이렇게 3D에서도 scaling, rotation, translation을 수행할 수 있으며 homogeneous 좌표계로 표현하여 한번에 를 수행할 수 있다.
coordinate system에서 object가 정의된 공간을 object space라고 한다. 이는 각 물체를 중심으로 하여 정의된 좌표계이다. 그러나 우리는 이러한 물체를 실제 우리가 살고 있는 world space에서 다루고자 하기에 좌표를 변환해주어야한다. 이러한 변환을 world transform이라고 한다.

world transform은 실제 world space에 존재하는 scale, rotation, translation을 통해 표현하게 된다.


이렇게 rotation과 translation이 함께 사용되어 하나의 matrix로 표현될 수 있으며 여기서 L을 'combined' linear transform라고 하고 t는 'combined' translation이라고 하며 라고 표현한다.

world transform을 하면 object space에 존재하는 Basis 또한 변할 것이다. 이때 object space basis를 이라고 하고 world space basis(standard basis)를 라고 하자. 그리고 처음에 이 둘이 같고 roation을 통해서 변화했다면 아래의 그림처럼 볼 수 있다.

world space의 각 standard basis에 Rotation을 취하게 되면 변화된 basis를 알 수 있다.

위의 마지막 수식과 같이 특정한 rotation을 거치고 나면 변화한 object-space basis를 구할 수 있다. roation-axis가 x,y,z 축이 아니라면 아래의 그림으로 나타낼 수 있다.

그렇다면 앞서 연산한 scaling, rotation, translation 연산의 inverse 연산은 어떻게 할까? (이러한 연산이 필요한 이유는 나중에 좌표계 변환시에 많이 사용되기 때문이다.)

scaling과 translation은 쉽게 구할 수 있다. 그렇다면 rotation matrix는 어떨까?

를 구할 수 있다. 이를 기하학적으로 살펴보면 아래 그림과 같다.

참고자료
한정현 교수님 컴퓨터 그래픽스 수업