flow-vector
Published 2023. 11. 28. 17:37
게임 수학 - 아핀 공간 Math/Game Math

“이득우의 게임수학” 책을 읽고 중요하다고 생각하는 부분을 정리한 내용들입니다!

 

 

어떤 물체의 크기, 회전, 전단 변환을 위해 선형변환을 2x2 정방 행렬로 만들어 보고 행렬 곱을 통해 나타내 보았다. 하지만 이동에 대해서는 행렬 곱이 아닌 벡터의 덧셈을 활용해서 구현을 했었다.

아핀 공간내에서는 행렬 곱을 통해 이동을 나타낼 수 있기 때문에 이에 대해서 정리해 보고자 한다.

아핀 공간

이동 변환을 위한 아핀 공간

  • 동일 차원에서 행렬 곱을 통한 이동변환 행렬 설계가 안되는 이유
    • 선형성을 만족 시킬수 없기 때문
      • 이동 변환 후 기저 벡터는 원점을 지나지 않음
  • 전단 변환의 성질을 활용한 이동변환
    • $\begin{bmatrix} 1 & a \\ 0 & 1 \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ 1 \end{bmatrix}$
    • y 값을 1로 한정 시켰을 때 해당 전단 변환은 x 값을 범위를 1 만큼 이동 시키는 역할 을 함
    • 이 성질을 이용하여 2차원에서 이동 변환을 3차원 행렬로 나타낼 수 있음
  • 2차워 이동 변환 행렬
    • $\begin{bmatrix} 1 & 0 & a \\ 0 & 1 & b \\ 0 & 0 & 1 \end{bmatrix}$
  • 아핀공간
    • 벡터 공간에서 이동을 위한 마지막 차원값을 1로 한정한 부분공간
  • 아핀 변환
    • 한 차원을 높여서 설계한 선형 변환
    • 아핀 변환을 이용해 행렬 곱 연산의 장점을 활용하여 가상공간의 이동 기능을 구현할 수 있음
    • 크기
      • $\begin{bmatrix} a & 0 & 0 \\ 0 & b & 0 \\ 0 & 0 & 1 \end{bmatrix}$
    • 회전
      • $\begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}$

아핀공간의 구성 요소

    • 마지막 차원의 값이 1인 아핀 공간의 원소
      • 2차원 공간의 점 : (x, y, 1)
      • 3차원 공간의 점 : (x, y, z, 1)
    • 성질
      • 행렬 곱을 사용해 이동이 가능함
  • 이동 벡터
    • 벡터 공간의 원소로 정의한 벡터와는 다른 용도로 사용
    • 아핀 공간의 점과 점 간의 최단 거리로 정의
    • $p_1 + \vec{v} = p_2$
    • $\vec{v} = p_2 - p_1$ (점 p1에서 점 p2로 향하는 벡터)
      • 마지막 차원이 항상 0

아핀 결합

  • 점과 점을 더할 때 선형 결합의 형태로 점에 스칼라를 곱해서 더한다면 특정 조건에서 새로운 점을 생성할 수 있음
  • 예시
    • $p_1 = (x_1, y_1, 1), p_2 = (x_2, y_2, 1)$
    • $a * p_1 + b * p_2 = (ax_1 + bx_2, ay_1 + by_2, a + b)$
      • a + b가 1이되는 특정 조건에서 새로운 점을 생성할 수 있음
  • 예시를 확장 했을 때 여러 점들의 덧셈연산에서 각 계수를 더했을 때 1이 되는 조건이라면 새로운 점 생성가능함
  • 이런 결합을 아핀 결합이라고 함
  • 아핀 결합시 두 점사이의 관계
    • 두 점간의 아핀 결합을 통해 생성되는 모든 점을 모으면 두점을 지나는 무한히 긴 직선이 만들어짐

'Math > Game Math' 카테고리의 다른 글

게임 수학 - 무게중심 좌표  (1) 2023.12.18
게임 수학 - 내적(Dot Product)  (0) 2023.11.30
게임 수학 - 행렬  (1) 2023.11.22
게임 수학 - 삼각함수  (1) 2023.11.21
게임 수학 - 벡터  (0) 2023.11.16
profile

flow-vector

@flow-vector

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!