수학, 알고리즘

행렬 변환

춤추는수달 2021. 12. 30. 00:32

게임에서 행렬을 활용하는 대표적인 방법은 Transfrom 변환이다.

어떤 물체의 위치, 크기, 회전에 변화를 주기 위해 그 물체의 벡터변환 행렬해주는 방식이다.

이 방식의 장점은 행렬의 곱 특성 상 결합법칙이 성립하기 때문에 여러 가지 변환 행렬들 끼리 먼저 곱해주고 나중에  도형 벡터에 곱해주면 된다는 것이다.따라서 특정 값 만큼 이동하고 회전하고 크기를 늘려주고 싶으면 해당 변환에 해당하는 변환행렬들을 모두 곱해주기만 하면 결과 값이 나온다는 것이다.

그런데 서로 다른 종류의 변환행렬을 곱할 떄 주의할 사항이 있다. 곱하는 순서가 Scale, Rotation, Transfrom이어야 한다는 것이다. 왜냐하면 Rotate 하고 Scale 하는 것과 Scale 하고 Rotate 한 결과가 다르기 때문이다.

또한 변환하려는 도형은 보통 3차원인데, 3차원 크기의 벡터를 Translation 변환 시 변환행렬의 합으로는 표현할 수 있지만, 변환행렬의 곱으로는 힘들다. 따라서 벡터에 1 차원을 더한 4차원 벡터와 그에 맞춘 4x4 크기의 변환행렬을 사용한다.

그럼 어떤 행렬을 곱해주어야 원하는 변환을 수행할 수 있는지 알아보자.

 

여기 도형벡터 V[x,y,z,1]이 있다.

V

그리고 변환행렬 M이 있다.

M

그리고 변환된 벡터 V2[x2,y2,z2,w]가 있다.

x2 =  xm11+ ym21+ zm31+ m41라는 의미

Translaiton

이 때 M이 V를 (a, b, c) 만큼 이동시키는 Translation 행렬이라면,  V2는 아래와 같은 상태가 될 것이다.

즉 아래의 방정식들이 생긴다.

  • xm11+ ym21+ zm31+ m41 = x+a
  • xm12+ ym22+ zm32+ m42 = y+b
  • xm13+ ym23+ zm33+ m43 = z+c
  • xm14+ ym24+ zm34+ m44 = 1

위 방정식을 보고 올바른 m 값들을 찾기만 하면 변환 행렬 M 완성이다.

즉 Translation 변환행렬 T는 

와 같은 형태가 된다.

Scale

Scale 행렬 S도 위와 같은 프로세스를 따르면 구할 수 있다.

Scale 행렬을 곱한 V2는 아래와 같은 형태이다.

그러면 아래와 같은 방정식들이 도출된다.

  • xm11+ ym21+ zm31+ m41 = ax
  • xm12+ ym22+ zm32+ m42 = by
  • xm13+ ym23+ zm33+ m43 = cz
  • xm14+ ym24+ zm34+ m44 = 1

즉 Scale 행렬 S는 아래와 같다.

Rotation

Rotation의 경우 기본적으로 위와 같은 과정을 거쳐서 구할 수 있지만, 회전된 벡터를 구하는 데 약간 어려움이 있다.

일단 삼각함수 코코싸싸 이런걸 알아야된다. 근데 귀찮으니 그냥 인터넷에서 긁어온 자료 첨부.

회전행렬 ㅋ

 

'수학, 알고리즘' 카테고리의 다른 글

Kruscal 알고리즘  (0) 2022.01.20
상호 배타적 집합(DIsjoint Set)  (0) 2022.01.20
레드블랙트리  (0) 2022.01.18
행렬  (0) 2021.12.29
VECTOR  (0) 2021.12.28