기본 수학 핵심 정리

게임 개발에서 수학을 공부하다 보면 선형대수학, 미적분, 물리, 확률 같은 분야를 만나게 된다.

그런데 이 내용을 따라가려면 그보다 앞에 있는 기본적인 수학 개념이 필요하다.

사칙연산부터 방정식, 함수, 지수와 로그, 수열, 삼각비까지 전부 깊게 공부할 필요는 없지만, 적어도 어떤 의미인지 알고 있어야 이후의 수학을 이해하기 편하다.

기본적인 흐름은 다음과 같다.

수와 연산 -> 식 -> 방정식 -> 함수 -> 그래프 -> 지수/로그 -> 삼각함수

수와 수의 종류

가장 기본적인 것은 숫자다.

대표적인 수의 종류는 다음과 같다.

자연수 -> 1, 2, 3, 4, ...
정수 -> ..., -2, -1, 0, 1, 2, ...
유리수 -> 분수로 표현할 수 있는 수
무리수 -> 분수로 정확하게 표현할 수 없는 수
실수 -> 유리수 + 무리수
복소수 -> 실수 + 허수

게임 개발에서 주로 사용하는 것은 실수다.

위치나 속도처럼 소수값을 가지는 데이터를 표현해야 하기 때문이다.

position = 12.5
speed = 3.75
deltaTime = 0.016

사칙연산

기본적인 연산은

덧셈
뺄셈
곱셈
나눗셈

이다.

연산 순서는 일반적으로

괄호 -> 거듭제곱 -> 곱셈/나눗셈 -> 덧셈/뺄셈

순서로 계산한다.

예를 들어

2 + 3 * 4 = 14

이다.

괄호를 사용하면 순서를 명확하게 지정할 수 있다.

(2 + 3) * 4 = 20

프로그래밍에서도 연산 우선순위 문제는 버그의 원인이 될 수 있기 때문에 복잡한 식에서는 괄호를 사용하는 편이 안전하다.

음수

음수는 기준점보다 작은 값을 나타낸다.

수직선을 생각하면 이해하기 쉽다.

<---- -3 ---- -2 ---- -1 ---- 0 ---- 1 ---- 2 ---- 3 ---->

게임에서도 음수는 자연스럽게 사용된다.

X < 0 -> 왼쪽
X > 0 -> 오른쪽
Y < 0 -> 아래
Y > 0 -> 위

좌표계의 기준에 따라 방향은 달라질 수 있지만, 양수와 음수로 방향을 표현한다는 구조는 동일하다.

절댓값

절댓값은 0에서 얼마나 떨어져 있는지를 나타낸다.

|3| = 3
|-3| = 3

두 값의 차이를 크기만 비교하고 싶을 때 사용할 수 있다.

difference = |a - b|

게임에서는 두 수치 사이의 차이, 거리의 1차원 표현, 오차 등을 계산할 때 자주 등장한다.

분수

분수는 나눗셈을 표현하는 방법이다.

a / b

또는

a
-
b

로 표현한다.

분수의 핵심은 비율이다.

예를 들어 체력 50 / 최대 체력 100이라면

50 / 100 = 0.5

이고 이를 백분율로 표현하면

50%

이다.

게임 UI에서 체력바, 경험치바, 진행률 등을 계산할 때 이런 비율이 자주 사용된다.

비율과 백분율

두 값의 관계를 비율로 표현할 수 있다.

a : b

백분율은 전체를 100으로 놓고 표현한다.

percentage = current / max * 100

정규화된 값으로 사용한다면

ratio = current / max

처럼 0 ~ 1 범위로 만들 수 있다.

이런 값은 게임에서 매우 많이 사용한다.

체력 비율
경험치 비율
애니메이션 진행률
로딩 진행률
확률

거듭제곱

같은 수를 여러 번 곱하는 것을 거듭제곱이라고 한다.

a² = a * a
a³ = a * a * a

일반적으로

aⁿ

으로 표현한다.

게임 개발에서 제곱은 특히 자주 사용한다.

예를 들어 거리 비교에서

distance² = x² + y²

같은 형태가 사용된다.

제곱근을 계산하는 것보다 제곱된 값을 그대로 비교하면 불필요한 계산을 줄일 수 있다.

제곱근

제곱해서 어떤 수가 되는 값을 제곱근이라고 한다.

sqrt(9) = 3

왜냐하면

3² = 9

이기 때문이다.

2차원 좌표에서 두 점 사이의 거리는

distance = sqrt((x2-x1)² + (y2-y1)²)

로 계산할 수 있다.

이 공식은 이후에 배우는 벡터와 피타고라스 정리로 연결된다.

문자와 식

수학에서는 값을 문자로 표현할 수 있다.

x + 3
2x + 5
a + b

이런 표현을 식이라고 한다.

예를 들어 플레이어의 현재 체력이 x이고 회복량이 20이라면

x + 20

으로 표현할 수 있다.

프로그래밍에서도 변수와 수식은 사실상 같은 구조를 가지고 있다.

health = health + healAmount;

일차방정식

방정식은 등호를 기준으로 두 식이 같다는 관계를 나타낸다.

예를 들어

2x + 4 = 10

이 있다면

2x = 6
x = 3

이다.

핵심은 등식의 양쪽에 같은 연산을 적용해도 등식이 유지된다는 것이다.

2x + 4 = 10
-> 2x = 6
-> x = 3

게임에서는 특정 시간, 위치, 속도 등을 역으로 계산할 때 방정식이 사용된다.

연립방정식

여러 개의 방정식을 동시에 만족하는 값을 찾는 문제다.

2x + y = 7
x - y = 2

두 식을 함께 만족하는 x, y를 찾는다.

연립방정식은 이후 선형대수학의 행렬과 연결된다.

연립방정식 -> 행렬 -> 선형대수

부등식

등호 대신 대소 관계를 나타내는 식이다.

x > 10
x < 10
x >= 10
x <= 10

게임 로직에서 매우 많이 사용한다.

if (distance <= attackRange)
{
    Attack();
}

수학적으로 보면

distance <= attackRange

라는 부등식을 검사하는 것이다.

함수

함수는 입력값에 따라 출력값이 결정되는 관계다.

y = f(x)

예를 들어

f(x) = 2x + 1

이면

f(1) = 3
f(2) = 5
f(3) = 7

이다.

프로그래밍의 함수와 비슷해 보이지만 수학적 함수는 입력과 출력의 관계 자체에 초점을 둔다.

게임에서도 함수는 매우 많이 사용된다.

시간 -> 위치
레벨 -> 경험치 요구량
거리 -> 데미지
입력 -> 이동 속도

좌표와 그래프

함수는 그래프로 표현할 수 있다.

2차원 좌표에서는 일반적으로

X축 -> 가로
Y축 -> 세로

를 사용한다.

점 하나는

(x, y)

로 표현한다.

예를 들어

(2, 3)

x=2, y=3인 위치다.

그래프를 이해하면 함수가 어떻게 변하는지 시각적으로 볼 수 있다.

기울기

직선의 기울기는 x가 변할 때 y가 얼마나 변하는지를 나타낸다.

두 점

(x1, y1)
(x2, y2)

가 있다면 기울기는

m = (y2 - y1) / (x2 - x1)

이다.

예를 들어

(0, 0)
(2, 4)

라면

m = 4 / 2 = 2

이다.

기울기는 이후 미적분에서 변화율이라는 개념으로 확장된다.

기울기 -> 변화율 -> 미분

일차함수

일차함수는 일반적으로

y = ax + b

형태다.

여기서

a -> 기울기
b -> y절편

이다.

a가 클수록 그래프가 더 가파르게 올라간다.

게임에서는 일정한 속도로 증가하거나 감소하는 값을 표현할 때 이런 형태가 자연스럽게 등장한다.

이차함수

이차함수는 일반적으로

y = ax² + bx + c

형태다.

그래프는 포물선 모양이 된다.

게임에서 포물선은 발사체의 궤적이나 점프 등의 움직임을 이해할 때 유용하다.

중력만 고려한 물체의 위치는 시간에 따라 대략

y(t) = y0 + v0t + 1/2 gt²

형태가 된다.

이 들어가기 때문에 포물선 형태의 움직임이 나타난다.

비례

두 값이 일정한 비율로 함께 변하면 비례한다고 한다.

y = kx

예를 들어 속도가 일정하다면 시간과 이동 거리는

distance = speed * time

관계가 된다.

시간 1 -> 거리 10
시간 2 -> 거리 20
시간 3 -> 거리 30

게임에서 가장 기본적인 계산 중 하나다.

반비례

한 값이 증가하면 다른 값이 감소하는 관계다.

y = k/x

대표적으로 같은 작업량을 여러 작업자가 나눠 처리하는 경우 등을 생각할 수 있다.

게임에서도 특정 값의 감쇠나 비율 계산에서 비슷한 형태의 함수를 만들 수 있다.

지수

지수 함수는 변수가 지수 위치에 있는 함수다.

y = aˣ

대표적으로

2¹ = 2
2² = 4
2³ = 8
2⁴ = 16

처럼 값이 빠르게 증가한다.

게임에서는 경험치 요구량, 성장 시스템, 난이도 증가 등을 설계할 때 지수적인 증가를 사용할 수 있다.

예를 들어

XP = base * growth^level

같은 형태다.

로그

로그는 지수의 역연산이다.

aˣ = b

라면

logₐ(b) = x

이다.

예를 들어

2³ = 8

이므로

log₂(8) = 3

이다.

로그의 중요한 성질은 곱셈을 덧셈으로 바꿀 수 있다는 것이다.

log(ab) = log(a) + log(b)

또한

log(a/b) = log(a) - log(b)

이다.

값의 범위가 지나치게 큰 데이터를 압축하거나 성장 곡선을 설계할 때 유용하다.

수열

수열은 일정한 규칙에 따라 나열된 수다.

1, 2, 3, 4, 5, ...

대표적인 수열이 등차수열과 등비수열이다.

등차수열

항과 항 사이의 차이가 일정하다.

2, 5, 8, 11, 14, ...

공차가 3이다.

일반항은

aₙ = a₁ + (n-1)d

이다.

등비수열

항과 항 사이의 비율이 일정하다.

2, 4, 8, 16, 32, ...

공비가 2다.

일반항은

aₙ = a₁rⁿ⁻¹

이다.

게임의 레벨별 경험치나 스탯 성장처럼 반복적인 증가 규칙을 만들 때 사용할 수 있다.

합과 시그마

많은 값을 하나씩 더해야 한다면 시그마 기호를 사용한다.

Σ

예를 들어

1 + 2 + 3 + ... + 10

Σ(i, i=1..10)

형태로 표현할 수 있다.

시그마는 이후 통계, 확률, 미적분, 머신러닝 수식에서 계속 등장한다.

평균

가장 기본적인 통계값이다.

값이

10, 20, 30

이라면 평균은

(10 + 20 + 30) / 3 = 20

이다.

게임에서는

평균 데미지
평균 플레이 시간
평균 프레임
평균 드랍 횟수

등을 계산할 때 사용한다.

단순 평균만으로 데이터의 특성을 전부 알 수는 없기 때문에 이후에는 분산과 표준편차를 같이 보게 된다.

삼각비

직각삼각형에서 각도와 변의 관계를 나타낸다.

sinθ = 높이 / 빗변
cosθ = 밑변 / 빗변
tanθ = 높이 / 밑변

게임 개발에서는 방향과 회전을 계산할 때 중요하다.

예를 들어 2D에서 각도 θ에 대한 방향은

direction = (cosθ, sinθ)

으로 표현할 수 있다.

이후 삼각함수는 벡터와 회전, 게임 물리, 그래픽스와 연결된다.

삼각비 -> 삼각함수 -> 벡터/회전 -> 게임 수학

라디안

각도를 수학적으로 표현할 때 라디안을 사용한다.

기본 관계는

180° = π
360° = 2π

이다.

따라서

radian = degree * π / 180

으로 변환할 수 있다.

게임 엔진의 회전 계산에서는 라디안과 도 단위를 혼동하지 않는 것이 중요하다.

피타고라스 정리

직각삼각형에서는 다음 관계가 성립한다.

a² + b² = c²

이것은 게임 개발에서 거리 계산의 기본이 된다.

2차원에서 두 점

A = (x1, y1)
B = (x2, y2)

사이의 거리는

distance = sqrt((x2-x1)² + (y2-y1)²)

이다.

3차원에서는

distance = sqrt((x2-x1)² + (y2-y1)² + (z2-z1)²)

가 된다.

이 공식은 이후 벡터의 크기로 자연스럽게 연결된다.

집합

집합은 특정 조건을 만족하는 대상들의 모음이다.

예를 들어

A = {1, 2, 3}
B = {3, 4, 5}

라고 하면 교집합은

A ∩ B = {3}

합집합은

A ∪ B = {1, 2, 3, 4, 5}

이다.

집합 개념은 데이터 구조, 확률, 논리학 등과 연결된다.

게임에서는 태그나 그룹, 조건 집합 등을 생각할 때 직관적으로 적용할 수 있다.

논리

프로그래밍에서 사용하는 조건문은 논리 연산과 직접 연결된다.

대표적인 논리 연산은

AND
OR
NOT

이다.

수학적으로는

P ∧ Q
P ∨ Q
¬P

처럼 표현한다.

예를 들어

if (isAlive && distance <= attackRange)
{
    Attack();
}

isAlive AND distance <= attackRange

라는 논리식을 검사하는 것이다.

함수와 게임 개발

기본 수학에서 가장 중요한 개념 중 하나가 함수다.

게임의 여러 시스템을 함수의 관계로 생각할 수 있다.

Input -> Function -> Output

예를 들어

Level -> Experience Requirement
Distance -> Damage
Time -> Position
Speed -> Movement
Health -> UI Fill Amount

처럼 표현할 수 있다.

이런 관점이 생기면 게임 시스템의 수치를 설계할 때도 단순히 값을 찍어 넣는 것이 아니라 입력과 출력 사이의 관계를 설계하는 문제로 볼 수 있다.

기본 수학과 이후 수학의 연결

기본 수학은 이후의 수학으로 이어진다.

사칙연산
-> 식
-> 방정식
-> 함수
-> 그래프
-> 기울기
-> 미분

그리고

좌표
-> 피타고라스 정리
-> 벡터
-> 내적/외적
-> 행렬
-> 선형대수

또한

삼각비
-> 삼각함수
-> 회전
-> 벡터
-> 게임 그래픽스

로 이어진다.

그리고

함수
-> 변화율
-> 미분
-> 적분
-> 물리

로 연결된다.

핵심 정리

게임 개발자가 기본 수학에서 우선적으로 이해해야 할 것은 다음 정도다.

수와 연산
-> 음수 / 절댓값 / 분수 / 비율

대수
-> 식 / 방정식 / 부등식

함수
-> 입력 / 출력 / 그래프 / 기울기

거듭제곱
-> 제곱 / 제곱근 / 지수 / 로그

기하
-> 좌표 / 거리 / 각도 / 피타고라스

삼각법
-> sin / cos / tan / 라디안

논리
-> AND / OR / NOT / 조건

수열
-> 등차수열 / 등비수열 / 성장 곡선

통계
-> 평균 / 분산 / 표준편차

기본 수학에서 가장 중요한 것은 공식 자체가 아니다.

x가 무엇을 의미하는지, 값 사이의 관계가 무엇인지, 그리고 그 관계를 식으로 어떻게 표현하는지를 이해하는 것이 핵심이다.

게임 개발에서는 결국 대부분의 문제가 다음 형태로 돌아온다.

상태 -> 수학적 표현 -> 연산 -> 결과 -> 게임 로직

예를 들어 플레이어의 이동은

입력 -> 방향 벡터 -> 속도 계산 -> 시간 적용 -> 위치 변경

이 되고,

적의 공격 범위는

두 위치 -> 거리 계산 -> 범위 비교 -> 공격 가능 여부

가 된다.

이후 선형대수학을 배우면 공간과 변환을 다룰 수 있고, 미적분을 배우면 시간에 따른 변화와 누적을 다룰 수 있으며, 확률과 통계를 배우면 불확실한 데이터를 다룰 수 있다.

따라서 기본 수학은 별도의 목적지가 아니라 게임 수학 전체를 이해하기 위한 기반이다.