<aside> 💡 이 글은 UC davis 의 컴퓨터 그래픽스 강의를 요약한 글입니다.

Moving Objects in Space

</aside>



1️⃣ Translation Matrix (물체 이동)

(x,y) from origin1 ⇒ (x+a, x+b) from origin 1

(x,y) from origin1 ⇒ (x+a, x+b) from origin 1

[x, y, 1] Vector를 [x+a. x+b, 1]로 ($\alpha$ , $\beta$)만큼 이동시킨다. 이때 [x, y, 1] 에 1 이 뒤에 붙음으로서 행렬 하나로 이동 연산을 처리할 수 있다.

$$ Translate\ 2D\\ \begin{bmatrix} 1 & 0 & \alpha \\ 0 & 1 & \beta \\ 0& 0& 1 \\ \end{bmatrix}

\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

\begin{bmatrix} x+\alpha \\ y+\beta \\ 1 \end{bmatrix} $$

$$ Translate\ 3D\\

\begin{bmatrix} 1 & 0 & 0 & \alpha\\ 0 & 1 & 0 & \beta \\ 0 & 0 & 1 & \gamma\\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}

\begin{bmatrix} x+\alpha \\ y+\beta \\ z+\gamma \\ 1 \end{bmatrix} $$


2️⃣ Scaling Matrix (물체 크기 변경)

(2) 원점 기준 Scaling

$$ Scale \ 2D \\

\begin{bmatrix} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

= \begin{bmatrix} ax \\ by \\ 1 \end{bmatrix} $$

$$ Scale\ 3D\\

\begin{bmatrix} \alpha & 0 & 0 & 0\\ 0 & \beta & 0 & 0\\ 0 & 0 & \gamma & 0\\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}

\begin{bmatrix} \alpha x \\ \beta y \\ \gamma z\\ 1
\end{bmatrix} $$

(2) 점 $(\alpha, \beta)$를 기준으로 도형 Scaling


사각형에게 이 Matrix를 적용할 때, 중심점이 (0,0)이면 아무 문제가 없다. 문제는 도형의 중심점이 Origin Point가 아닐 때 생긴다.

기준점이 0,0인 경우 의도한 대로 정상 작동

기준점이 0,0인 경우 의도한 대로 정상 작동

그러나 물체의 위치까지 함께 변화하는 문제 발생

그러나 물체의 위치까지 함께 변화하는 문제 발생

<aside> 💡 ❓이를 어떻게 해결할 것인가?


1️⃣ 사각형 중심을 원점(0,0)으로 이동시킨뒤 2️⃣ Scale matrix를 곱해주고 3️⃣ 기존 원점으로 재 이동 시킨다. 즉 Translate + Scale + Translate.


만약 a(1,1) b(1,3) c(3,1) d(3,3) 점을 가진 사각형의 중심축이 (2, 2)라면 a(1,1) → 2* a'(-1, -1) ⇒ a''(-2, -2) → a'''(0, 0) b(1,3) → 2* b'(-1, 1) ⇒ b''(-2, 2) → b'''(0, 4) c(3,1) → 2* c'(1, -1) ⇒ c''(2, -2) → c'''(4, 0) d(3,3) → 2* d'(1, 1) ⇒ d''(2, 2) → d'''(4, 4)

</aside>

이를 행렬로 표현하면 아래와 같다.

$$ Translate\ 2D\\ \begin{bmatrix} 1 & 0 & \alpha \\ 0 & 1 & \beta \\ 0& 0& 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

\begin{bmatrix} x+\alpha \\ y+\beta \\ 1 \end{bmatrix} $$

$$ Scale(\hat{i},\hat{j}) \\

\begin{bmatrix} i & 0 & 0 \\ 0 & j & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} $$

$$ {\color{blue}Translate(-\alpha,-\beta)} \Rightarrow Scale(\hat{i},\hat{j}) \Rightarrow Translate(+\alpha,+\beta)\\

\begin{bmatrix} 1 & 0 & \alpha \\ 0 & 1 & \beta \\ 0 & 0 & 1 \\ \end{bmatrix}

\begin{bmatrix} i & 0 & 0 \\ 0 & j & 0 \\ 0 & 0 & 1 \\ \end{bmatrix}

{\color{blue}\begin{bmatrix} 1 & 0 & -\alpha \\ 0 & 1 & -\beta \\ 0 & 0 & 1 \\ \end{bmatrix}}

\begin{bmatrix} x \\ y \\ 1 \end{bmatrix}

\\

\begin{bmatrix} x' \\ y' \\ 1 \end{bmatrix}

$$


$$ Translate\ 3D\\

\begin{bmatrix} 1 & 0 & 0 & \alpha\\ 0 & 1 & 0 & \beta \\ 0 & 0 & 1 & \gamma\\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}

\begin{bmatrix} x+\alpha \\ y+\beta \\ z+\gamma \\ 1 \end{bmatrix} $$

$$ Scale\ 3D\\

\begin{bmatrix} \alpha & 0 & 0 & 0\\ 0 & \beta & 0 & 0\\ 0 & 0 & \gamma & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}

\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix} $$