1872년 펠릭스 클라인은 어떤 변환을 허용할 때 끝까지 남는 성질로 기하학을 구분했어요. 도형만 보는 데서 나아가 도형에 작용하는 변환도 함께 보는 관점이에요. 이 단원에서는 변환을 행렬로 나타내고, 무엇이 바뀌며 무엇이 남는지 비교해 봐요.
연립일차방정식을 첨가행렬로 바꾸면 세 가지 행 연산으로 풀 수 있어요. 왼쪽을 $\begin{pmatrix}1&0\\0&1\end{pmatrix}$로 만들면 오른쪽 열에서 해를 바로 읽을 수 있어요. 최소 횟수로 풀어 보세요.
첨가행렬 $(A \mid I)$ 에 같은 행 연산을 가해 $(I \mid A^{-1})$ 을 얻는 것이 가우스-조르당 역행렬 계산법이에요 [12고대02-02]. 연결 탐구 1(Lights Out)에서는 같은 소거법을 0과 1만 쓰고 2가 되면 다시 0으로 계산하는 수 체계 $\mathbb{F}_2$에 적용하면 퍼즐도 연립방정식으로 풀 수 있어요. 계산 규칙이 달라도 소거의 생각은 그대로 쓸 수 있다는 사례예요.
선형변환 $T$의 두 조건: $T(u+v)=T(u)+T(v)$, $T(cu)=cT(u)$. 이 두 조건을 만족하면 한 직선 위의 등간격 관계가 보존돼요. $T$가 가역이면 서로 다른 평행선도 다시 서로 다른 평행선이 돼요. $T(e_1),T(e_2)$만 알면 모든 벡터의 결과를 계산할 수 있고, 두 결과를 열로 세운 것이 바로 행렬이에요.
초록/붉은 사각형 = 단위정사각형의 상. 그 넓이가 $|\det A|$, 뒤집히면(붉은색) $\det A < 0$ — 행렬식은 넓이 배율과 도형이 거울처럼 뒤집혔는지를 함께 기록하는 수예요 [12고대02-03]. 회전 프리셋에서 나오는 복소 고윳값은 3단원에서 다시 살펴봐요.
변환을 이어 붙이면(합성) 행렬은 곱이 돼요: $T_2 \circ T_1 \leftrightarrow A_2 A_1$. 두 합성변환을 나란히 실행하여 곱의 순서를 바꾸었을 때 결과가 같은지 확인해 보세요.
가역변환끼리 합성하면 다시 가역변환이고, 세 변환을 묶는 위치를 바꿔도 결과는 같아요. 항등변환과 각 변환을 되돌리는 역변환까지 같은 모임 안에 있으면 이를 군(group)이라고 해요. 같은 중심의 회전끼리는 적용 순서를 바꿔도 결과가 같지만, 정다각형의 회전과 반사를 섞으면 보통 순서에 따라 결과가 달라져요. ‘가환’은 순서를 바꿔도 같다는 뜻이고, ‘비가환’은 그렇지 않다는 뜻이에요.
변환의 종류를 고르고 여러 변환을 적용하여 어떤 성질이 계속 보존되는지 확인해 보세요. 허용되는 변환이 많아질수록 보존되는 성질은 줄어들며, 어떤 변환에서 어떤 성질이 보존되는지가 해당 기하학에서 무엇을 연구할지가 정해져요.
복소수 $z = a+bi$ 에 행렬 $M(z) = \begin{pmatrix} a & -b \\ b & a \end{pmatrix}$ 를 대응시키면, 복소수 곱셈이 그대로 행렬곱이 돼요. $i$ 는 $\begin{pmatrix} 0 & -1 \\ 1 & 0 \end{pmatrix}$ — 90° 회전행렬. $i^2=-1$은 90° 회전을 두 번 하면 180° 회전, 곧 −1배가 되는 관계와 이어져요.
2차원 회전은 복소수로, 3차원 회전은 사원수(quaternion)로 나타낼 수 있으며, 사원수는 게임 엔진과 로켓의 자세 제어에도 쓰이는 수 체계예요. 관련 논문 Quaternions and Rotations in E⁴를 참고하면 수행평가 심화 주제로 확장할 수 있어요.
초점거리를 $d$로 두면 “멀수록 작게”는 $x'=\dfrac{d\,x}{z+d}$로 나타나요. 나눗셈이 들어가므로 이 식 자체는 비선형이에요. 좌표를 $(x,y,z,1)$로 하나 늘리는 동차좌표를 쓰면 행렬곱과 마지막 나눗셈으로 계산을 나눌 수 있어요. 3D 게임도 화면을 그릴 때마다 이 계산으로 원근감을 만들어요.
논문 한 편을 골라 정의와 명제를 직접 계산하거나 시뮬레이션으로 구현하십시오. 결과는 LaTeX로 작성한 논술에 정리하십시오. 아래 시작 코드를 복사한 뒤 ★ 표시된 값을 바꾸어 자신만의 탐구로 발전시키십시오.
<canvas id="c" width="500" height="500"></canvas>
<script>
const ctx = document.getElementById("c").getContext("2d");
// 반슬리의 아핀 변환 4개: [a,b,c,d,e,f,확률] → (x,y) ↦ (ax+by+e, cx+dy+f)
const maps = [
[ 0.00, 0.00, 0.00, 0.16, 0, 0.00, 0.01], // ★ 줄기
[ 0.85, 0.04, -0.04, 0.85, 0, 1.60, 0.85], // 본체의 0.85를 0.8로 바꾸십시오.
[ 0.20, -0.26, 0.23, 0.22, 0, 1.60, 0.07], // ★ 왼쪽 잎
[-0.15, 0.28, 0.26, 0.24, 0, 0.44, 0.07], // ★ 오른쪽 잎
];
let x = 0, y = 0;
for (let i = 0; i < 40000; i++) {
let r = Math.random(), m;
for (m of maps) { r -= m[6]; if (r < 0) break; }
[x, y] = [m[0]*x + m[1]*y + m[4], m[2]*x + m[3]*y + m[5]];
ctx.fillStyle = "#55703F";
ctx.fillRect(250 + x*46, 500 - y*46, 1, 1); // ★ 46: 확대 배율
}
</script>
<canvas id="c" width="500" height="400"></canvas>
<script>
const ctx = document.getElementById("c").getContext("2d");
const d = 4; // ★ 카메라 거리(2로 줄이면 더 넓게 보입니다.)
const verts = []; // 정육면체 8꼭짓점
for (const sx of [-1,1]) for (const sy of [-1,1]) for (const sz of [-1,1])
verts.push([sx, sy, sz]);
const edges = [[0,1],[0,2],[0,4],[3,1],[3,2],[3,7],[5,1],[5,4],[5,7],[6,2],[6,4],[6,7]];
let th = 0;
setInterval(() => {
ctx.clearRect(0, 0, 500, 400);
th += 0.01; // ★ 회전 속도
const P = verts.map(([x,y,z]) => {
const rx = x*Math.cos(th) + z*Math.sin(th); // y축 회전(선형변환)
const rz = -x*Math.sin(th) + z*Math.cos(th);
const w = rz/d + 1; // 동차좌표의 마지막 성분
return [250 + 130*rx/w, 200 - 130*y/w]; // 원근 나눗셈은 여기 한 번뿐
});
ctx.strokeStyle = "#8A4525"; ctx.lineWidth = 2;
for (const [i,j] of edges) {
ctx.beginPath(); ctx.moveTo(...P[i]); ctx.lineTo(...P[j]); ctx.stroke();
}
}, 16);
</script>
연결 탐구 1에서 Lights Out 해법 시작 코드를 확인할 수 있어요. 논술 개요에는 문제, 계산, 결론, 적용 한계를 포함하세요.
오늘 배운 변환을 정해진 확률로 반복하면 IFS 프랙탈을 만들 수 있어요.
평면곡선의 단위 접벡터를 90° 돌리면 수직인 두 방향 중 하나를 얻을 수 있어요.