[게임 수학 기초] 벡터와 벡터 공간

2024. 2. 25. 16:37게임 수학

우리가 게임을 하다 보면 캐릭터가 우리의 입력에 따라서 위치를 이동하는 모습을 볼 수 있다.

프로그래머들은 물체의 운동을 수치화하는 작업을 통해 해당 현상을 구현하는데,
이를 위해서 그들은 간접적으로나마 물리학을 다룰수있어야 한다.
(프로그래머를 목표로하는 우리도 물리학에 공부해야 한다고 생각한다.)

그래서 오늘은 바로 물리학에서 기초적으로 다루면서 많이 사용되는 벡터에 대하여 정리해 보도록 하자.



벡터


쉽게 말하면 방향과 크기를 가지는 값이다. 
주로 물체의 운동을 묘사하는 데 사용되며 우리가 알고 있는 속도, 가속도가 이에 속한다.

벡터는 여러 개의 숫자로 이루어져있어 여러개의 배열이나 리스트를 통해 표현된다.

간혹 일부의 사람들은 벡터와 스칼라를 혼동하는 경우가 있는데,
스칼라는 크기만 가지고 있는 값으로 벡터와는 다르게 방향을 가지고 있지 않는다.

예시)
차량이 오른쪽의 방향으로 100km/h의 속도로 달리고 있다.
스칼라 : 100
표기법 : (이동하는 물리량의 크기)

벡터 : (100, 0)
표기법 : (이동하려는 방향, 이동하려는 물리량의 크기)


벡터 공간


두 개 이상의 실수들이 곱집합으로 묶인 원소(벡터)들이 집합으로 묶인 것이다.
대충 벡터들의 집합이라고 생각하면 편하다.

다만 벡터들이 모여있다고 하여 벡터 공간이 되는 것이 아닌데,
정식으로 벡터 공간으로 정의되기 위해서는 아래의 조건을 만족해야 한다.

1. 덧셈에 의한 닫힘.
같은 집합 내에 있는 두 개의 벡터가 서로 더하여 나온 값도 집합 내부에 속해 있어야 한다.

1,2,3이라는 값을 가지고 있는 집합이 존재할 때,
1과 2를 더한 결과가 같은 집합 내부에 있는 3 이란는 값이 나온 상황을 의미한다.

2. 스칼라 곱셈에 대한 닫힘
집합에 속한 어떤 벡터에 스칼라를 곱한 결과도 집합에 속해 있어야 한다.

한 집합에 속한 2라는 숫자에 5를 곱하여 나온 결과, 10이 여전히 같은 집합에 속해있는 상황을 의미한다.

이러한 특성 덕분에 인간들은 각종 물리량을 수치화하여 수많은 혁신과 변화를 가져왔는데,
우리가 함수를 공부할 때 시각적으로 보기 위해 사용하는 데카르트 좌표계를 벡터 공간의 예시로 들 수 있다.

출처 : https://alphaint.tistory.com/2


벡터와 스칼라, 벡터 공간에 대한 정의는 대략적으로 파악하였으니,

지금부터 기본 연산을 이용하여 벡터의 이동을 다뤄보겠다.

 

벡터를 이동시키기 위해서는 아래와 같은 단계가 필요하다.

1. 벡터의 크기 구하기

벡터의 크기는 수의 크기와 동일하게 원점으로부터의 최단 거리를 의미한다.

 

이를 구하기 위해서는 원점과 벡터를 직선으로 연결하여 직각 삼각형을 그리고,

피타고라스의 정리를 사용하는 것이 일반적이다.

 

피타고라스의 정리 공식 : c^2 = a^2 + b^2

 

이렇게 구한 벡터의 크기는 두 개의 수직 막대 기호(| |)로 표시된다.

벡터의 크기를 Norm(노름)이라고 부른다.

(노름은 벡터의 스칼라라고 생각하면 편하다.)

2. 벡터의 방향 구하기

여러 방법들이 존재하지만 가장 일반적으로 사용되는 방법은 벡터를 단위 벡터로 정규화하는 것이다.

 

여기서 등장하는 단위 벡터는 크기가 1인 벡터를 의미한다.

벡터의 크기를 측정하는 기준이 되며, 모자 기호 ^를 씌워 표기된다.

 

표기법

그렇게 구한 단위 벡터는 크기가 1이므로 벡터의 방향으로 사용된다.

 

3. 현재 위치 좌표 값 파악

벡터의 크기와 방향을 구하였으니 현재의 위치 좌표값으로 변환해주어야 한다.

 

x축 : 벡터의 크기 * cos(방향)

y축 : 벡터의 크기 * sin(방향)

 

더보기
기초적인 sin, cos, tan 값 정리
sin B = b / c
cos B = a / c
tam B =a / b

 

4. 이동할 벡터를 더한다.

 

현재의 좌표까지 더하였으니 이제 이동하려는 벡터의 값을 더하면 끝이다.

 

현재의 위치 (X, Y)

이동하려는 벡터 (a, b)

=> 이동한 위치 (X+a, Y+b)

 


벡터의 이동이 만만해 보여 정리를 시작했는데, 생각보다 만만치 않았다.

그래도 덕분에 sin, cos, tan의 공식과 피타고라스의 정리를 다시 머리에 각인시킬 수 있어 나름 만족했다.