→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.
■ 아핀 공간
회전, 전단, 스케일 변환은 모두 선형 변환이므로 각각의 변환을 행렬로 표현할 수 있지만, 이동 변환은 선형 변환이 아니기 때문에 단순한 행렬 곱으로 표현할 수 없다.
$$ A \cdot \begin{bmatrix} x \\ y\end{bmatrix} = \begin{bmatrix} x + a \\ y + b\end{bmatrix} $$
- 위 식을 만족하는 정방행렬$A$는 존재하지 않음.
이동 변환에 대해 한번 살펴보자. 이동 변환 $T(\vec v) = \vec v + \vec t$와 같이 정의된다. 이를 표준기저벡터에 적용하면,
$$ T(e_1) = (1,0) + \vec t \\ T(e_2) = (0,1) + \vec t $$
변환 결과에 항상 고정된 평행 이동 벡터 $\vec t$가 더해지므로, 원점 또한 $\vec t$만큼 이동하게 된다.
선형 변환이라면 $T(0) = 0$, 즉, “원점을 보존한다”라는 성질을 만족해야 하지만 이동 변환은 만족하지 못하므로 결국 선형 변환이 아니다.
▶ 전단 변환 행렬
표준기저벡터에 전단 변환을 적용하면 단위 정사각형은 평행사변형으로 변한다.
예를 들어 y축을 고정한 상태에서 x축 방향으로 1만큼 전단하면, 윗변의 점들이 원래 범위([0,1])에서 오른쪽으로 1만큼 이동하여 x의 범위가 [1,2]가 된다.
전단 변환$T(x)$의 결과는 $(x + ky, y)$가 되는데, 전단에서 더해지는 값은 상수 $t$가 아니라 다른 좌표 $y$의 크기에 비례하는 $ky$값이다.
- 즉, 전단 변환으로 2만큼 민다면 $y$의 크기에 비례$(2y)$해서 $x$가 늘어난다.
그렇다면, 여기서 $y = 1$로 고정한다면, 정확히 $x$축 방향으로 $k$만큼 평행 이동했다고 볼 수 있지 않을까?
$$ \begin{bmatrix} 1&a\\0 & 1\end{bmatrix} \cdot \begin{bmatrix} x \\ 1\end{bmatrix} = \begin{bmatrix}x + a \\ 1 \end{bmatrix} $$
이처럼 전단 변환의 성질을 활용하면 특정 조건하에 이동 기능의 구현이 가능하다. 위 수식처럼 y = 1이라는 조건 하에 a만큼 미는 전단 변환의 결과는 1차원 이동 변환의 $x+a$로 활용할 수 있다.
$$ \begin{bmatrix} 1 &0&a\\0 & 1 &b \\ 0&0&1\end{bmatrix} \cdot \begin{bmatrix} x \\ y\\ 1\end{bmatrix} = \begin{bmatrix}x + a \\ y + b\\ 1 \end{bmatrix} $$
마찬가지로, 2차원 공간에서 이동 변환을 표현하려면, 마지막 차원을 1로 고정시켜 3차원으로 확장하면 2차원에서의 이동 변환을 표현할 수 있다.
다음과 같이 회전, 스케일 변환도 한차원 늘려주면 이동 변환행렬과의 곱도 가능해진다.
$$ S = \begin{bmatrix}a&0&0 \\ 0&b&0 \\ 0&0&1 \end{bmatrix} \\ R = \begin{bmatrix} \cos\theta&-\sin\theta&0 \\\sin\theta&\cos\theta&0 \\ 0&0&1\end{bmatrix} $$
■ 아핀 공간의 구성 요소
컴퓨터 그래픽스에서 이동 변환을 행렬로 표현하기 위해 차원을 하나 늘려 좌표를 나타내는데, 이를 "동차 좌표(Homogeneous coordinates)" 라 한다.
이때, 동차 좌표계에서 마지막 좌표가 1인 점들의 집합을 "아핀 공간"이라 한다.
1. 점(Point)
마지막 차원 값이 1인 아핀 공간의 원소를 점이라 한다. 점이 지니는 성질은 행렬 곱을 사용해 이동이 가능하며, 가상공간에서 물체가 이동하려면 물체는 점으로 구성되어야 한다.
- n 차원 공간에서 n + 1차원의 값은 항상 1이어야 한다.
$$ \begin{bmatrix} 1 &0&a\\0 & 1 &b \\ 0&0&1\end{bmatrix} \cdot \begin{bmatrix} x \\ y\\ 2\end{bmatrix} = \begin{bmatrix}x + 2a \\ y + 2b\\ 2 \end{bmatrix} $$
만약, 마지막 차원 값이 1이 아니면 원래 좌표와 달라진다. 위처럼 마지막 차원이 2라면, x + a/ y + a만큼 이동하는 것이 아니라, x + 2a / y + 2a가 되어 사용할 수 없다.
마지막 차원 값이 1이면 변환 후에도 벡터 공간 안에 속해있기 때문에 “닫혀있다”고 표현한다.
2. 이동 벡터(변위 벡터)
아핀 공간에서 점 $P$에 이동 벡터$\vec v$를 더하면 아핀 공간의 또 다른 점이 된다.
$$ P_1 +\vec v = P_2 $$
이때 점 $P_1$을 우변으로 이항하면, 두 점의 차를 통해 이동 벡터를 얻을 수 있다.
$$ \vec v = P_2 - P_1 $$
즉, 이동 벡터는 점 - 점 형태로 정의되고, 점은 동차좌표에서 마지막 차원값이 항상 1이므로, 결과적으로 이동 벡터의 마지막 차원은 언제나 0이 된다.
- 마지막 차원이 1이면 “점(Point)”
- 마지막 차원이 0이면 “벡터(vector)”
점과 벡터는 같은 차원 공간에서 표현되지만 서로 다른 부분집합에 속한다. 이 때문에 점 + 점 연산(마지막 차원 값이 2가 됨)은 정의되지 않는다.
■ 아핀 공간의 성질
점과 벡터의 덧셈 연산은 아핀 공간에 대해 닫혀있다. 따라서 마지막 차원을 배제할 수 있는데, 마지막 차원 값을 생략하고 아핀 공간의 중심을 원점$O$라 한다면,
- 원점에서 점$P$로 향하는 벡터는 $\vec v = P - O = (x,y,0)$
마지막 차원을 배제해도 2차원 평면의 점과 화살표로 구분하여 표시하여 점을 물체로, 화살표를 물체를 이동시키는 힘으로 표현할 수 있다.
- 아핀 공간과 이동 벡터를 현실 세계의 3차원 공간으로 나타낸 것을 유클리드 공간 / 유클리드 벡터라 한다.
따라서 점과 벡터에 대해선 다음과 같은 관계가 성립된다.
점 - 점 | 벡터(마지막 차원 값 0) |
점 + 벡터 | 점(마지막 차원값 1) |
벡터 + 벡터 | 벡터(마지막 차원값1) |
점 + 점 | 알 수 없음 |
■ 아핀 결합
아핀 공간에서 점 + 점을 더하면 마지막 차원 값이 2가 되기 때문에, 벡터도 아니고 점도 아닌 의미가 없는 연산이 되어버린다.
하지만, 특정 조건에서 선형 결합의 형태로 점에 스칼라를 곱해 더한다면 새로운 점을 생성하는 것이 가능하다.
$$ a \cdot P_1 + b \cdot P_2 = (ax_1 + bx_2, ay_1 + by_2, a+ b) $$
즉, 모든 스칼라의 합(a + b + ... + n)이 1이라면 점과 점을 결합하여 새로운 점 P를 생성하는 것이 가능하다.
$$ \sum\limits_{i=1}^n c_i \cdot P_i \ \ \ (s.t.\sum\limits_{i=1}^n c_i = 1) $$
n개의 점을 아핀 결합하는 경우, 각 점을 $P$로, 점에 곱해지는 스칼라를 $c_i$로, 일반항을 $c_i + P_i$
로 지정한 후 시그마 기호를 통해 위와 같이 나타낸다.
1. 두 점의 결합
$$ a\cdot P_1 + (1-a)\cdot P_2 $$
위 식은 언제나 아핀 결합을 보장하는 식이다. 여기서 $a$값에 따라 생성되는 점의 위치를 살펴보면 다음과 같다.
a값 | 결과 |
0 | $0 \cdot P_1 + (1-0)\cdot P_2 = P_2$ |
0.5 | $0.5 \cdot P_1 + (1-0.5)\cdot P_2 = (\frac{x_1 + x_2}{2}, \frac{y_1+y_2}{2})$ |
1 | $1 \cdot P_1 + (1-1)\cdot P_2 = P_1$ |
즉, 두 점의 아핀 결합으로 생성되는 새로운 점은 기존 점을 지나는 무한한 선상에 위치한다. 여기서 a의 값을 조절함에 따라 여러 선에 대응된다.
- 직선 : $- ∞ < a < ∞ $
- 반직선(Ray) : $0 \le a < ∞ $
- 선분 : $0\le a \le 1$
'게임수학' 카테고리의 다른 글
[게임수학] 6-2. 투영 벡터 (0) | 2025.09.12 |
---|---|
[게임수학] 6-1. 내적(Dot product) (0) | 2025.09.12 |
[게임수학] 4. 행렬 (1) | 2025.09.05 |
[게임수학] 3. 삼각함수 (2) | 2025.08.31 |
[게임수학] 2. 벡터(Vector) (2) | 2025.08.27 |