🕹️자체엔진/DirectX 12 개인공부

[3장] 좌표 변경 변환 문제풀이 | DirectX 12를 이용한 3D 게임 프로그래밍 입문

Mawile 2021. 12. 16.
728x90

변환 28번 문제 풀이


일단 저는 밑에 문제를 풀어보았습니다.

최소값이되는 점 (1, 1)과 최대값이 되는 점 (3, 3)을 x축에 대하여 2단위 비례시킨 행렬을 구하라.
라는 생각으로 풀었죠.

풀이

우선 사각형의 중점을 원점으로 설정하기 위해, 사각형의 중점을 구해줍니다.
\( 사각형의 중점의 좌표 ={(3, 3) / (1, 1)} / 2 = (2, 2) \)

이제 좌표 변경 변환을 수행합니다.
우선 저는 최소점좌표를 \( (min_{x}, min_{y}) \) 로 두겠습니다.
그리고 최대점좌표는 \( (max_{x}, max_{y}) \) 로 두겠습니다.
그리고 중점의 좌표를 \( (side_{x}, side_{y}) \) 로 두겠습니다. 그러면,,
이를 통해 좌표 변경 변환을 수행하면?

좌표 변경 변환이 수행된 최소점좌표는 \( (min_{x} - side_{x}, min_{y} - side_{y}) = (1 - 2, 1 - 2) = (-1, -1) \) 이 되구요,
최대점좌표는 \( (max_{x} - side_{x}, max_{y} - side_{y}) = (3 - 2, 3 - 2) = (1, 1) \) 이 됩니다..
이제 이 두 점을 이용해서 x축에 대하여 2만큼 비례변환을 수행하면??

\( \begin{bmatrix}min_{x} & min_{y}, 0 \end{bmatrix}\begin{bmatrix}2 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 1 \end{bmatrix} \)

\( \begin{bmatrix}max_{x} & max_{y}, 0 \end{bmatrix}\begin{bmatrix}2 & 0 & 0 \\0 & 1 & 0 \\0 & 0 & 1 \end{bmatrix} \)
가 되므로,

각각
\( (min_{x}, min_{y}) = (-2, -1) \) 이 되구요, \( (max_{x}, max_{y}) = (2, 1) \)
이 됩니다.

마지막으로 좌표변경 변환을 다시 원래 좌표계로 풀어주면??
최소점좌표는 \( (min_{x} + side_{x}, min_{y} + side_{y}) = (-2 + 2, -1 + 2) = (0, 1) \) 이 되구요,
최대점좌표는 \( (max_{x} + side_{x}, max_{y} + side_{y}) = (2 + 2, 1 + 2) = (4, 3) \) 이 됩니다 !!!

드디어 우리가 원하는답이 나왔군요..

정리해보면..

사각형의 원점찾기 -> 좌표 변경 변환(좌표계의 중심 -> 사각형의 중심) -> 비례변환 -> 좌표 변경 변환(사각형의 중심 -> 좌표계의 중심)

와우~! 굿!


728x90

댓글