본문 바로가기
study/math

[이득우 게임수학] 아핀공간

by foooo828 2024. 7. 3.
반응형

https://blog.naver.com/ideugu/221409774016

크기, 회전, 밀기 선형 변환은 행렬 곱으로 표현이 가능하지만 이동변환은  2×22×2 정방행렬 곱셈으로는 구현이 불가능하기 떄문에 행렬곱으로 표현하기 위해 아핀 공간이 필요하다.

6.1 아핀공간

이동 변환은 2×22×2 정방행렬 곱셈으로는 구현이 불가능하다.

기저벡터가 원점에서 출발해야 한다는 조건을 만족하지 못하기 떄문.

임의의 베벡터 (x,y)를 지정 크기(a,b)만큼 이동시키는 기능
[xy]+[ab]=[x+ay+b] A[xy]=[x+ay+b]
행렬의 덧셈 ? 존재하지 않음

 

행렬이 되기 위해서는 선형성 (기저벡터가 원점에서 출발하는 조건)을 만족해야하지만 이동변환은 그럴 수 없다.

전단변환

 

전단 변환은 표전기저벡터 e1을 고정시킨 상태에서 옆으로 밀어 공간을 기울이는데

이러한 전단변환을 성질을 이용하면 특정 조건하에 이동기능 구현이 가능하다.

S=[1a01]

 

 

[1a01][x1]=[x+a1]

y=1인 조건하에 a 만큼 미는 전단변환의 결과는 1차원의 이동변환 x+a 로 활용 할 수 있다.

z축 추가

이를 2차원으로 적용한다면 3차원으로 공간을 확장하여 마지막차원인 z  값을 1로 고정한 조건으로 전단 변환을 설계할 수 있다.

[10a01b001][xy1]=[x+ay+b1]

이를 이동 변환행렬 이라고 한다.

T=[10a01b001]

이렇게 한차원 높여 설계한 선형변환을 아핀변환 Affine transformation 이라고 한다.

크기변환 (S) [a000b0001][xy1]=[axby1]
회전변환 (R) [cosθsinθ0sinθcosθ0001][xy1]=[cosθxsinθysinθx+cosθy1]
이동변환 (T) [10a01b001][xy1]=[x+ay+b1]

 

* 이동 구현하기

 

6.2 아핀공간 구성 요소

점 (Point) 

  • 마지막 차원 값이 1인 아핀공간의 원소
  • 행렬곱을 사용해 이동이 가능하려면 물체는 점으로 구성되어야함
    2차원 공간의 점 : (x,y,1)
    3차원 공간의 점 :  (x,y,z,1)

 

* 마지막 차원이 1이 아닌경우?

사용할 수 없음

 

이동벡터 , 변위 벡터 (Displaycement vector)

  • 아핀공간 내의 이동을 지정하기 위해 사용된다.
  • 벡터공간의 원소와는 다른용도로 사용 → 이동벡터, 변위벡터라 부름
  • 점과 점 간의 최단거리로 정의된다.
  • P1의 좌표를 (x1,y1,1), 점 P2의 좌표를 (x2,y2,1)로 지정하여 두 점을 뺴서 만든 이동 벡터의 마지막 차원값은  항상 0이 된다.
    (x1x2,y1y2,0) 
    이동 벡터들이 모이면 마지막 차원 z값은 항상 0인 영역을 형성한다. 

6.2 아핀공간 성질

아핀공간의 원점은  (0,0,1)이고 아핀공간속 임의의 점 P의 값을 (x,y,1) 로 지정했을때 원점O에서 P로 향하는 이동벡터 v는 다음과 같다.

v=PO=(x,y,1)(0,0,1)=(x,y,0)

이를 이용하면 점을 이동시킨 결과를 만들어낼 수 있으며 점과 벡터는 다음과 같은 연산 규칙이 있다.

  • 점-점 = 벡터
  • 점+벡터 = 점
  • 벡터+벡터 =벡터
  • 점+점 != 점

6.3 아핀 결합

아핀공간 에서 점 끼리의 덧셈은 사용할수 없지만 선형 결합의 결과 마지막 차원의 값이 1을 유지한다면 점과 점을 결합해 새로운 점을 만들 수 있다. 

P1  (x1,y1,1), 점 P2 (x2,y2,1)에 각자 스칼라 a,b를 곱한 수식

aP1+bP2=(ax1+bx2,ay1+by2,a+b)

a+b=1이 되어야한다.

동일한 원리로 여러개의 점을 결합해 새로운 점을 생성하는 수식을 아핀결합 이라고 하며 다음과같이 수식으로 표현한다.

ni=1ciPi - n개의 점을 아핀결합하는 경우, 각 점을 Pi
- 점에 사용하는 스칼라를 ci로 지정
- 모든 항을 더하는 시그마 기호를 사용

6.3.1 두 점의 결합

두 점을 아핀결합해 새로운 점을 생성하는 경우.

P1,P2로 지정하고 b(1a)로 치환하면 다음 수식이 성립하며 이는 언제나 점의 생성이 보장된다.

aP1+(1a)P2=P

이 수식을 사용하여 a 에 값을 대입하면 a의 값이 양으로 커질수록 P1에 가까워지고 음의 방향으로 커질수록 P2에 가까워진다.

이 규칙을 시각화 하면 P1,P2을 지나는 무한한 긴 선이 만들어진다.

이를 수식으로 묶어 정리하면 아래와 같은 식이 성립된다.

 

a(P1P2)=(PP2)
P1P2 (PP2)
P2에서 P1으로 향하는 벡터 P2에서 P으로 향하는 벡터
a u = v

스칼라곱 특성상 uv는 서로 평행한 벡터이며, 그렇기 떄문에 두 점의 아핀 결합으로 생성되는 점은  P1,P2을 지나는 직선상에 위치함을 알 수 있다.

 

a에 모든 실수를 대입하면 두점을 이은 무한한 선을 얻을 수 있으며 이  수식을 직선의 방정식이라고 한다.

L(a)=aP1+(1a)P2

 

* a의 범위에 따라 대응되는 직선의 종류

직선 Line 반직선 Ray 선분 Line segment
<a< 0a< 0a1
 
두점의 양쪽 방향으로 무한이 뻗어나가는 선의 형태 지정 위치에서 한쪽 방향으로만 뻗어나가는 선
레이케스팅에 활용 Raytracing
시작과 끝이 정해져있는 선

 

반응형