https://blog.naver.com/ideugu/221409774016
크기, 회전, 밀기 선형 변환은 행렬 곱으로 표현이 가능하지만 이동변환은 $2\times 2$ 정방행렬 곱셈으로는 구현이 불가능하기 떄문에 행렬곱으로 표현하기 위해 아핀 공간이 필요하다.
6.1 아핀공간
이동 변환은 $2\times 2$ 정방행렬 곱셈으로는 구현이 불가능하다.
기저벡터가 원점에서 출발해야 한다는 조건을 만족하지 못하기 떄문.
임의의 베벡터 (x,y)를 지정 크기(a,b)만큼 이동시키는 기능 |
|
$$\begin{bmatrix}x \\y \end{bmatrix} + \begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} x+a \\ y+b \end{bmatrix}$$ | $$A\cdot \begin{bmatrix}x \\y \end{bmatrix} = \begin{bmatrix} x+a \\ y+b \end{bmatrix}$$ |
행렬의 덧셈 | ? 존재하지 않음 |
행렬이 되기 위해서는 선형성 (기저벡터가 원점에서 출발하는 조건)을 만족해야하지만 이동변환은 그럴 수 없다.
전단 변환은 표전기저벡터 $e_1$을 고정시킨 상태에서 옆으로 밀어 공간을 기울이는데
이러한 전단변환을 성질을 이용하면 특정 조건하에 이동기능 구현이 가능하다.
$$S=\begin{bmatrix}1 & a \\0 & 1 \end{bmatrix}$$
$$\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 로 활용 할 수 있다.
이를 2차원으로 적용한다면 3차원으로 공간을 확장하여 마지막차원인 z 값을 1로 고정한 조건으로 전단 변환을 설계할 수 있다.
$$\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}$$
이를 이동 변환행렬 이라고 한다.
$$T=\begin{bmatrix}1 &0 &a\\ 0 & 1&b\\0&0&1\end{bmatrix}$$
이렇게 한차원 높여 설계한 선형변환을 아핀변환 Affine transformation 이라고 한다.
크기변환 (S) | $$\begin{bmatrix}a & 0 &0\\0 & b&0 \\0&0&1\end{bmatrix} \cdot \begin{bmatrix} x \\ y\\1 \end{bmatrix} = \begin{bmatrix} ax \\ by\\1 \end{bmatrix} $$ |
회전변환 (R) | $$\begin{bmatrix}cos\theta & -sin \theta &0\\ sin\theta & cos \theta &0 \\ 0&0&1\end{bmatrix} \cdot \begin{bmatrix} x \\ y\\1 \end{bmatrix} = \begin{bmatrix} cos \theta x -sin \theta y \\ sin \theta x+ cos \theta y\\1 \end{bmatrix} $$ |
이동변환 (T) | $$\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}$$ |
* 이동 구현하기
6.2 아핀공간 구성 요소
점 (Point)
- 마지막 차원 값이 1인 아핀공간의 원소
- 행렬곱을 사용해 이동이 가능하려면 물체는 점으로 구성되어야함
2차원 공간의 점 : $(x,y,1)$
3차원 공간의 점 : $(x,y,z,1)$
* 마지막 차원이 1이 아닌경우?
이동벡터 , 변위 벡터 (Displaycement vector)
- 아핀공간 내의 이동을 지정하기 위해 사용된다.
- 벡터공간의 원소와는 다른용도로 사용 → 이동벡터, 변위벡터라 부름
- 점과 점 간의 최단거리로 정의된다.
- 점 $P_1$의 좌표를 $(x_1,y_1,1)$, 점 $P_2$의 좌표를 $(x_2,y_2,1)$로 지정하여 두 점을 뺴서 만든 이동 벡터의 마지막 차원값은 항상 0이 된다.
$(x_1-x_2,y_1-y_2,0)$
이동 벡터들이 모이면 마지막 차원 z값은 항상 0인 영역을 형성한다.
6.2 아핀공간 성질
아핀공간의 원점은 (0,0,1)이고 아핀공간속 임의의 점 $P$의 값을 $(x,y,1)$ 로 지정했을때 원점$O$에서 $P$로 향하는 이동벡터 $\vec v$는 다음과 같다.
$\vec v = P-O=(x,y,1)-(0,0,1)= (x,y,0)$
이를 이용하면 점을 이동시킨 결과를 만들어낼 수 있으며 점과 벡터는 다음과 같은 연산 규칙이 있다.
- 점-점 = 벡터
- 점+벡터 = 점
- 벡터+벡터 =벡터
- 점+점 != 점
6.3 아핀 결합
아핀공간 에서 점 끼리의 덧셈은 사용할수 없지만 선형 결합의 결과 마지막 차원의 값이 1을 유지한다면 점과 점을 결합해 새로운 점을 만들 수 있다.
점 $P_1$ $(x_1,y_1,1)$, 점 $P_2$ $(x_2,y_2,1)$에 각자 스칼라 a,b를 곱한 수식
$a\cdot P_1+b \cdot P_2= ( ax_1+bx_2,ay_1+by_2,a+b )$
$a+b=1$이 되어야한다.
동일한 원리로 여러개의 점을 결합해 새로운 점을 생성하는 수식을 아핀결합 이라고 하며 다음과같이 수식으로 표현한다.
$$\sum \limits_ {i=1}^n c_i\cdot P_i$$ | - n개의 점을 아핀결합하는 경우, 각 점을 $P_i$ - 점에 사용하는 스칼라를 $c_i$로 지정 - 모든 항을 더하는 시그마$\sum$ 기호를 사용 |
6.3.1 두 점의 결합
두 점을 아핀결합해 새로운 점을 생성하는 경우.
$P_1 ,P_2$로 지정하고 $b$ 를 $(1-a)$로 치환하면 다음 수식이 성립하며 이는 언제나 점의 생성이 보장된다.
$a\cdot P_1+(1-a)\cdot P_2=P'$
이 수식을 사용하여 a 에 값을 대입하면 a의 값이 양으로 커질수록 $P_1$에 가까워지고 음의 방향으로 커질수록 $P_2$에 가까워진다.
이 규칙을 시각화 하면 $P_1 ,P_2$을 지나는 무한한 긴 선이 만들어진다.
이를 수식으로 묶어 정리하면 아래와 같은 식이 성립된다.
$a(P_1-P_2)= (P'-P_2)$ | |
$P_1-P_2$ | $(P'-P_2)$ |
$P_2$에서 $P_1$으로 향하는 벡터 | $P_2$에서 $P'$으로 향하는 벡터 |
$a\cdot$ $ \vec u$ $=$ $\vec v$ |
스칼라곱 특성상 $\vec u$와$ \vec v$는 서로 평행한 벡터이며, 그렇기 떄문에 두 점의 아핀 결합으로 생성되는 점은 $P_1 ,P_2$을 지나는 직선상에 위치함을 알 수 있다.
a에 모든 실수를 대입하면 두점을 이은 무한한 선을 얻을 수 있으며 이 수식을 직선의 방정식이라고 한다.
$L(a) =a\cdot P_1+(1-a)\cdot P_2$
* a의 범위에 따라 대응되는 직선의 종류
직선 Line | 반직선 Ray | 선분 Line segment |
$-\infty <a<\infty $ | $0 \leq a <\infty $ | $ 0 \leq a \leq1 $ |
![]() |
![]() |
![]() |
두점의 양쪽 방향으로 무한이 뻗어나가는 선의 형태 | 지정 위치에서 한쪽 방향으로만 뻗어나가는 선 레이케스팅에 활용 Raytracing |
시작과 끝이 정해져있는 선 |
'study > math' 카테고리의 다른 글
[이득우 게임수학] 역행렬 (0) | 2024.06.30 |
---|---|
[이득우 게임수학] 행렬의 설계 (0) | 2024.06.26 |
[이득우 게임수학] 행렬 (0) | 2024.06.17 |
[이득우 게임수학] 선형성과 선형변환 (0) | 2024.06.09 |
[이득우 게임수학] 삼각함수 (0) | 2024.05.24 |
댓글