해당 글은 이득우의 게임 수학을 내 입맛대로 정리한 글이다.
이전의 수와 집합을 활용해 2개의 수 집합을 기반으로 계산하는 방법을 알았다면, 이제는 여러 집합 연산을 활용해 평면, 그리고 3D같은 공간의 수치를 계산하는 작업을 해볼 것이다.
평면에서 의미있는 물체를 생성하고 배치하기 위해서는 평면을 구성하는 원소 즉 좌표의 개념이 필요한데 이것을 벡터라고 정의한다.
우선은 이 벡터를 이용해 평면에서 벡터를 움직이는 기본 연산 방법과 공간과 차원을 어떻게 형성되는 지 공부해볼 것이다.
실수를 기반으로 하는 계산 즉 기본적인 실수의 곱집합을 통해서는 아래의 이미지 처럼 값의 결과를 표시할 수 있다.
이항 연산을 통해 나온 결과의 위치를 아래 사진처럼의 평면에 계속 움직이고 배치가 가능하다.

이번에는 실수간의 곱집합을 이용해 위 이미지는 하나의 선이였다면 2개의 가로, 세로 선을 이용해 평면(2차원)을 표시하는 방식을 사용해본다.
아래의 사진은 실수 간의 곱집합을 평면으로 표현해본 것이다.

직선 2개를 각각 겹침으로써 영역을 평면으로 표기하는 위와 같은 방식을 데카르트 좌표계(Cartesian Coordinate System)이라고 부른다. 곱집합의 원어인 데카르트 곱(Cartesian product)라고 부르는 것을 토대로 본다면 이 좌표계는 데카르트 곱을 기반으로 나왔음을 알 수 있다.
위 사진에는 실수에 대한 정보가 아닌 1~4 분면의 문자가 적혀있는데 실수들의 특징에 따라 각 사분면 중 한 곳에 배치되는 특성을 보유하고 있기 때문이다.
실수 조합 중 첫번째가 x, 2번째가 y라고 가정할 때의 사분면 배치도
1사분면: x가 0 초과의 양수 and y가 0 초과의 양수일 경우
2사분면: x가 0 미만의 음수 and y가 0 초과의 양수일 경우
3사분면: x가 0 미만의 음수 and y가 0 미만의 음수일 경우
4사분면: x가 0 초과의 양수 and y가 0 미만의 음수일 경우
그리고 이 데카르트 좌표계의 한 원소는 곱집합과 동일하게 2개의 순서쌍으로 표현되며 좌표(Coordinate)라고도 부르며 (x,y) 형태로 표현된다.
좌표라는 것은 위에서 설명한 대로 x,y라는 두 실수를 기반으로 조합된다. (2차원 기준) 그렇기 때문에 좌표 연산은 곧 실수 간의 연산이라고 할 수 있는데 이 기반으로 새로운 공리를 붙여 평면 기반의 집합을 규정하고 그 집합 간의 덧셈과 곱셈을 통해 평면에서 움직임을 표현하는 것이 가능해진다.
두 개 이상의 실수를 곱집합으로 묶어 형성된 집합을 공리적 집합론의 관점에서 규정한 것을 벡터 공간이라 부르고 그 안의 원소를 벡터라고 부르지만 쉽게 설명한다면 위에 있던 데카르트 곱을 기반으로 한 평면을 데카르트 좌표계라고 부르고 그 안에 있는 곳에 존재하는 좌표 원소를 벡터라고 부를 수 있다
스칼라란 공리적 집합론의 관점에서 좌푯값으로 사용하는 x, y를 실수로 규정하기 보단 체(field)의 구조를 가진 집합 즉 체 집합의 원소로 규정하는데, 이 체의 구조를 가진 수의 집합을 스칼라라 부른다.
설명 자체는 어려운데 쉽게 풀어쓰자면, 굳이 실수가 아니여도 항상 사칙연산(덧셈, 뺄셈, 나눗셈, 곱셈)을 자유로운 성질을 만족하는 수라고 부르며 이러한 구조를 상수배라고 부른다. 그리고 벡터 공간에서 곱하거나 표현하는데 사용되는 상수배를 스칼라라고 부른다.
더 쉽게 생각해보면 5kg, 5m 등에서 사용되는 kg, m등의 단위 즉 수치를 표현하기 위한 기준이 되는 수(그것이 실수든 아니든)을 스칼라라고 부르게 된다.
그래서 스칼라가 실수인 벡터 공간을 실벡터 공간(real vector space), 스칼라가 복소수인 벡터 공간을 복소벡터공간(complex vector space)라고 부른다. 스칼라를 즉 벡터 공간에서 어떠한 value로 쓰이냐를 생각하면 편하다.
벡터 공간 연산이라고 적으니 어려워 보일 수는 있지만 진짜 별거 없다.
공리적 집합론 관점에서 정의된 벡터 공간의 2가지 기본 연산 방법이 존재하는데 아래와 같다
벡터 간의 덧셈 (벡터의 합)
v1 + v2 = (x1, y1) + (x2, y2) = (x1 + x2, y1+ y2)
스칼라와 벡터의 곱셈 (스칼라 곱셈)
a v = a (x, y) = (a x, a y)
또한 위 연산자는 예시일 뿐 이전에 배운 집합 이항연산의 특징처럼 결합, 교환, 항등원, 역원 등의 성질 또한 지니고 있다. 이를 벡터 공간의 공리 라고 부른다.
벡터의 크기는 피타고라스 정리처럼 계산이 된다. c² = a² + b² 라는 규칙을 기억하고 활용하면 된다. 벡터의 크기는 좌표에 기반한 대각선의 길이인데 보통 그 길이를 측정할 때는 직각삼각형 모양이 나오기에 피타고라스 정리 활용이 가능하고, -에 관계 없이 절대값으로 값이 나오게 된다는 점을 기억하면 된다.

벡터는 내적과 외적을 이용해 실제 게임에서 이용할 수 있는 부분이 많다.
내적의 반환 값은 실수(Real number - mistake가 아님)로 스칼라 값을 반환한다. 주로 두 벡터 간의 방향이 얼마나 일치하는 지 알기 위한 정보로 많이 활용된다. 또한 이 내적을 잘 활용한다면, 두 위치 간의 바라보는 각도 (서로 같은 방향을 보고있는지, 서로를 바라보고 있는 지 등)를 알 수 있어 게임 쪽에서는 정말 많이 활용된다고도 할 수 있다.
내적의 공식은 다음과 같다.
A⋅B = |A|*|B|*Cosθ 로 A와 B의 내적은 A의 스칼라(힘의 크기) B의 스칼라 특정 각도의 Cos 값이라고도 한다.
A⋅B = Ax * Bx + Ay * By + Az * Bz 공식으로 사용하는 경우도 있다. (이건 행렬의 합을 이용한다. 하지만 Cos 로 알고 있는 것이 더 낫다)
Cos은 0도 일때 1, 180도 일때 0인 성질이 있다 그래프 상으로도 절대값 숫자가 같을 때 Cosθ 도 같은 성질이 있어 서로 간의 바라보는 방향을 체크할 때 유용하게 활용할 수 있다.
내적은 사용하는 곳에 따라 표기법이 다른데, 보통은 a⋅b 형식으로 사용하지만 상황에 따라 ⟨a,b⟩, ⟨a∣b⟩ 로도 표기하며
∫ab 라는 적분 처럼 표시하기도 한다.
외적의 반환 값은 벡터 값으로 계산할 A, B 벡터의 모두 수직인 새로운 벡터 값 C를 반환하는 구조다.
외적의 공식은 다음과 같다.
AXB = A * B * Sinθ 으로 A 벡터 B 벡터 Sinθ 로 Sin 값과 연관이 되어 있기도 하고, 내적과는 다르게 벡터 간의 행렬 곱셈으로도 표현이 가능하다는 특징을 가지고 있다.
외적은 주로 회전 쪽 계산에 영향을 주는데 못과 렌치가 있다고 가정할 때 못의 방향과 렌치의 방향에 따라 렌치를 어디로 돌릴 때 어디로 움직이는 지 계산할 수 있다.

참고자료