나뭇잎 교과서

대칭변환·닮음변환·회전변환

모양을 돌리고, 뒤집고, 키우는 것은 가장 기본적인 변환입니다. 이 셋을 행렬로 쓰면 회전은 \(\cos\theta\), \(\sin\theta\)로, 대칭은 대칭축 각의 두 배로, 닮음은 대각선의 같은 수로 나타납니다. 이 절에서는 세 변환으로 목표 모양을 맞히며 행렬의 모양을 익히고, 사진을 돌릴 때 구멍이 생기는 문제를 역변환으로 해결해 봅니다.

본문

대칭변환·닮음변환·회전변환

본문

사진 편집 프로그램을 직접 만들어, 원래 사진의 각 픽셀 좌표 \((x, y)\)에 회전 행렬을 곱해 새 좌표를 구하고 거기에 색을 칠했다. 90°로 돌리면 깔끔했는데, 30°로 돌리니 결과 사진 곳곳에 아무 색도 칠해지지 않은 검은 점이 뚫렸다. 회전은 넓이를 바꾸지 않으니 픽셀 수도 그대로일 텐데, 왜 빈 곳이 생길까? 회전, 대칭, 닮음 변환은 각각 어떤 행렬이고, 빈 점 없이 돌리려면 어떻게 계산해야 할까?

변환행렬행렬식 원점 둘레 θ 회전(cos θ, −sin θ / sin θ, cos θ)1 직선 y = x 대칭(0, 1 / 1, 0)−1 k배 닮음(k, 0 / 0, k)k² 회전과 대칭은 길이와 각을 보존하고, 닮음은 모양만 보존한다.
그림 1. 회전은 넓이와 방향을, 대칭은 넓이를 보존하고 방향을 뒤집으며, 닮음은 넓이를 \(k^2\)배 한다.
먼저 알아야 할 것선형변환과 행렬(선형변환과 행렬), 삼각함수의 덧셈정리, 행렬식.

2.5.1기저의 행선지로 행렬 만들기

원점 둘레로 \(\theta\)만큼 돌리면 \((1, 0)\)은 \((\cos\theta, \sin\theta)\)로, \((0, 1)\)은 \((-\sin\theta, \cos\theta)\)로 간다. 이 둘을 열로 쓰면 회전 행렬이 된다. 직선 \(y = x\)에 대한 대칭은 \((1, 0)\)과 \((0, 1)\)을 서로 바꾸므로 \(\begin{pmatrix}0 & 1\\ 1 & 0\end{pmatrix}\)이고, 원점을 중심으로 \(k\)배 늘이는 닮음변환은 두 기저를 모두 \(k\)배 하므로 \(kI\)이다. 이렇게 기저 벡터가 어디로 가는지만 그려 보면 각 변환의 행렬을 바로 쓸 수 있다.

정리 2.5.1 회전과 대칭의 행렬

원점 둘레 \(\theta\) 회전의 행렬은 \(R_\theta = \begin{pmatrix}\cos\theta & -\sin\theta\\ \sin\theta & \cos\theta\end{pmatrix}\)이고 \(R_\alpha R_\beta = R_{\alpha + \beta}\)이다. 원점을 지나고 \(x\)축과 \(\theta\)를 이루는 직선에 대한 대칭의 행렬은 \(\begin{pmatrix}\cos2\theta & \sin2\theta\\ \sin2\theta & -\cos2\theta\end{pmatrix}\)이다.

두 회전을 차례로 하면 각이 더해지므로 \(R_\alpha R_\beta = R_{\alpha + \beta}\)이다. 행렬을 곱해 성분을 비교하면 \(\cos(\alpha + \beta) = \cos\alpha\cos\beta - \sin\alpha\sin\beta\)가 나와, 삼각함수의 덧셈정리가 회전 행렬의 곱셈에 그대로 들어 있다. 회전과 대칭은 모두 길이를 보존하지만, 회전은 행렬식이 1이고 대칭은 \(-1\)이다. 그래서 회전은 시계 방향의 순서를 지키고 대칭은 뒤집는다.1

2.5.2거꾸로 찾아가면 빈 점이 없다

원래 사진의 픽셀 중심에 회전 행렬을 곱하면 결과 좌표는 대부분 정수가 아니어서 가장 가까운 픽셀로 반올림한다. 그런데 30°처럼 비스듬히 돌리면 원래 픽셀 둘이 같은 결과 픽셀로 반올림되는 곳이 생기고, 넓이는 같으므로 그만큼 아무도 찾아오지 않는 결과 픽셀이 생긴다. 그것이 빈 점이다. 그래서 실제 프로그램은 거꾸로 계산한다. 결과 사진의 각 픽셀에 역행렬 \(R_{-\theta}\)를 곱해 원래 사진의 어느 위치에서 왔는지 찾고, 그 위치의 색을 가져온다. 그러면 결과의 모든 픽셀이 색을 하나씩 받는다.

방법계산결과 정방향원래 픽셀 → R_θ → 반올림빈 점, 겹침 역방향결과 픽셀 → R_(−θ) → 색 가져옴빈 점 없음 90° 회전정수 좌표가 정수로어느 방법이든 깔끔
그림 2. 결과 픽셀마다 역행렬로 원래 위치를 찾아가면 모든 픽셀이 칠해진다.

2.5.3예제 풀이

예제 2.5.2

점 \((2, 1)\)을 원점 둘레로 90°, 30° 돌린 점을 구하여라. 결과 사진의 픽셀 \((1, 2)\)이 30° 회전에서 원래 사진의 어느 위치에서 왔는지 역행렬로 구하여라. \(\sqrt3 \approx 1.732\)이다.

90° 회전은 \(R_{90°} = \begin{pmatrix}0 & -1\\ 1 & 0\end{pmatrix}\)이므로 \((2, 1)\)은 \((-1, 2)\)로 간다. 정수 좌표가 정수 좌표로 가서 깔끔하다. 30° 회전은 \((2\cos30° - \sin30°,\ 2\sin30° + \cos30°) = (\sqrt3 - 0.5,\ 1 + \tfrac{\sqrt3}{2}) \approx (1.232, 1.866)\)으로, 반올림하면 \((1, 2)\)이다.

결과 픽셀 \((1, 2)\)에 \(R_{-30°} = \begin{pmatrix}\cos30° & \sin30°\\ -\sin30° & \cos30°\end{pmatrix}\)를 곱하면 \((0.866 + 1,\ -0.5 + 1.732) \approx (1.866, 1.232)\)이고, 원래 사진에서 가장 가까운 픽셀은 \((2, 1)\)이다. 이렇게 결과의 모든 픽셀에서 출발하면 빈 픽셀이 없다. 즉 회전, 대칭, 닮음 변환은 기저의 행선지로 행렬을 바로 쓸 수 있고, 회전 행렬의 역행렬은 반대 방향의 회전이어서 결과 픽셀에서 원래 위치를 거꾸로 찾는 데 쓴다.

아래 탐구 카드에서 회전, 대칭, 닮음 행렬로 도형을 목표 모양에 맞추어 보고, 픽셀 사진을 돌리면 구멍이 뚫리는 까닭을 확인해 보자.

  1. 회전 행렬의 성분이 정확한 실수여도, 컴퓨터는 \(\cos\)과 \(\sin\)을 유한한 자릿수로 저장한다. 그래서 작은 회전을 수만 번 거듭하면 오차가 쌓여 행렬식이 1에서 조금씩 벗어나고, 게임 속 물체가 서서히 커지거나 찌그러지기도 한다.
마무리

회전, 대칭, 닮음 변환은 기저 벡터의 행선지를 열로 써서 행렬로 나타내며, 회전 행렬은 \(R_\alpha R_\beta = R_{\alpha + \beta}\)를 만족해 덧셈정리를 품고 있다. 회전은 행렬식 1로 길이와 방향을, 대칭은 행렬식 \(-1\)로 길이를 보존하고 방향을 뒤집으며, 닮음은 넓이를 \(k^2\)배 한다. 처음 질문의 빈 점은 원래 픽셀을 돌려 반올림하다 생긴 것이며, 결과 픽셀마다 역행렬 \(R_{-\theta}\)로 원래 위치를 찾아가면 생기지 않는다.

탐구 1

회전, 대칭, 닮음 중 어느 것으로 목표 모양을 만들까?

회전·대칭·닮음변환 · 도전

—

—

  1. 질문회전, 대칭, 확대는 모양을 바꾸는 가장 기본적인 방법이다. 이 셋을 행렬로 쓰면 어떤 모양일까? 서로 다른 종류의 변환이 같은 결과를 낼 수도 있을까?
  2. 복원행렬의 1열은 \((1, 0)\)의 상, 2열은 \((0, 1)\)의 상이다. \((1, 0)\)을 \(\theta\)만큼 돌리면 \((\cos\theta, \sin\theta)\)이다.
  3. 설명원점을 중심으로 \(\theta\)만큼 도는 회전변환은 \(\begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}\), 원점을 지나고 \(x\)축과 \(\varphi\)를 이루는 직선에 대한 대칭변환은 \(\begin{pmatrix} \cos2\varphi & \sin2\varphi \\ \sin2\varphi & -\cos2\varphi \end{pmatrix}\), 원점을 중심으로 \(k\)배 하는 닮음변환은 \(\begin{pmatrix} k & 0 \\ 0 & k \end{pmatrix}\)이다. 회전의 \(\det\)는 1, 대칭의 \(\det\)는 \(-1\), 닮음의 \(\det\)는 \(k^2\)이다.
  4. 연결회전과 대칭은 길이와 각을 바꾸지 않는다. 이런 행렬은 3단원의 직교행렬이고, 열벡터들이 1단원의 정규직교기저를 이룬다.
  5. 적용목표마다 변환 종류와 매개변수를 골라 맞춰 보자. 대칭은 모양이 뒤집히고(\(\det < 0\)), 회전은 뒤집히지 않는다. 원점 대칭인 목표는 몇 가지 방법으로 만들 수 있는가?
  6. 판단대칭축이 \(\varphi\)이면 행렬에는 \(2\varphi\)가 들어간다. \(\varphi\) 대신 \(\varphi\)를 그대로 넣는 실수가 흔하다. \(\varphi = 45°\)(직선 \(y = x\))로 확인하면 \(\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\)이 나와야 한다.

확인조건이 달라지면

원점을 중심으로 \(90°\) 회전한 뒤 원점을 중심으로 2배 확대하는 변환의 행렬은?

탐구 2

사진을 돌리면 왜 구멍이 뚫릴까?

회전변환과 역변환 · 활용
원본 색칠 칸
—
결과 색칠 칸
—
안쪽 빈 칸(구멍)
—
  1. 질문사진은 격자 위의 점(픽셀)들이다. 회전행렬을 각 픽셀 좌표에 곱하면 사진을 돌릴 수 있을 것 같다. 그런데 이렇게 하면 결과에 군데군데 빈 점이 생긴다. 왜 그럴까?
  2. 복원회전행렬 \(R_\theta = \begin{pmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{pmatrix}\)의 역행렬은 \(R_{-\theta}\)이고, 이것은 \(R_\theta^T\)와 같다.
  3. 설명정방향 방식은 원본 칸 \(\vec{p}\)를 \(R\vec{p}\)로 보낸 뒤 가장 가까운 격자 칸에 칠한다. 반올림 때문에 두 원본 칸이 같은 칸에 떨어지기도 하고, 아무도 오지 않는 칸이 생긴다. 역방향 방식은 결과의 칸 \(\vec{q}\)마다 "어디서 왔는가"를 \(R^{-1}\vec{q}\)로 거꾸로 계산해 그 원본 칸의 색을 가져온다. 결과의 모든 칸이 한 번씩 색을 받으므로 구멍이 생기지 않는다. 역변환을 쓰는 것이 핵심이다.
  4. 연결사진 편집 프로그램, 게임의 텍스처, 의료 영상의 재구성이 모두 역방향 방식을 쓴다. 여기에 가까운 칸 네 개의 색을 섞는 보간을 더해 매끄럽게 만든다.
  5. 적용정방향 방식에서 각을 바꾸며 구멍 수를 보자. 0°와 90°에서는 왜 구멍이 없는가? 역방향 방식으로 바꾸면 어떻게 되는가?
  6. 판단회전은 넓이를 바꾸지 않는데(\(\det R = 1\)) 정방향 결과의 칠한 칸 수가 원본보다 적어지는 것은 계산 방식의 문제이다. 수학의 변환은 연속인 평면에서 정의되고, 픽셀은 그것을 격자로 근사한 것이라는 점을 구별해야 한다.

확인조건이 달라지면

역방향 방식으로 \(30°\) 회전한 사진을 만들 때, 결과의 칸 \(\vec{q}\)의 색은 원본의 어느 칸에서 가져올까?

AI 출제 문항연습문제 풀어보기11문항
Esc

↑↓ 고르기Enter 열기