[게임수학] 3. 삼각함수

2025. 8. 31. 00:59·게임수학
728x90

→ 이 글은 「이득우의 게임 수학」을 바탕으로 작성했습니다.

■ 삼각함수

벡터의 합과 스칼라배를 통해 물체의 이동을 표현한다면, 삼각함수는 2차원 평면에서의 "회전"을 수학적으로 표현하는 도구이다.

[직각삼각형]

직각삼각형에서 한 각을 $(\theta)$라 하면, 아래와 같이 세 변의 비를 정의할 수 있다. 즉, 사잇각 $(\theta)$에 따라 세 변은 일정한 "비율 관계"를 가진다.

  • a = 밑변
  • b = 높이
  • c = 빗변

$$ \sin \theta = \frac{b}{c} \\ -------\\ \cos \theta = \frac{a}{c} \\ ------- \\ \tan \theta = \frac{b}{a} $$

[삼각함수 공식]

이러한 직각삼각형을 데카르트 좌표계에 배치하고, 각 $\theta$의 범위를 실수 전체로 확장하면 삼각함수가 된다.

 

→ 삼각함수 예시 : cos함수

[cos 함수 예시 - 1]

삼각비가 각도만으로 결정된다는 사실을 한번 확인해보자. 

 

$$\cos 60^\circ = \frac{3}{6} = \frac{1}{2} $$

사잇각$(\theta)$ = 60도, 빗변c = 6, 밑변 a = 3이라 한다면, cos 60일 때의 두 변의 비율은 위와 같이 계산된다.

 

[cos 함수 예시 - 2]

사잇각$(\theta)$를 60도로 유지한 채, 빗변과 밑변의 길이를 3배로 늘리고 cos 함숫값을 계산해 보자.

$$\cos 60^\circ = \frac{9}{18} = \frac{1}{2} $$

 

이처럼 각$(\theta)$가 일정하다면 삼각형의 크기와 상관없이 삼각비는 항상 동일하다는 점을 알 수 있다.

 

→ 단위 원을 사용한 삼각함수

데카르트 좌표계에서 반지름이 1인 단위 원을 사용하면 삼각함수를 좀 더 쉽게 파악할 수 있다.

[단위 원의 빗변의 좌표]

좌표계에서 반지름이 1인 단위원을 두고, 원점에서 단위원 위의 한 점까지의 선분을 빗변으로 하는 직각삼각형을 만들면 빗변의 길이는 1이 된다.

 

빗변의 길이가 1인 경우, 삼각함수 공식은 아래와 같이 정리된다.

$$ \sin \theta = \frac{b}{1} =b\ \ \ \ \cos \theta = \frac{a}{1} = a $$

 

빗변이 1이므로 높이는 $\sin \theta$, 밑변은 $\cos \theta$가 된다. 따라서, 빗변의 좌표는 $(\cos \theta, \sin \theta)$로 나타낼 수 있다.

  • 또한 피타고라스 정리에 의해 아래와 같은 식이 성립된다.

$$ 1 = \sqrt{\cos^2\theta + \sin^2\theta} $$

  • 빗변을 $r$로 일반화 하면 빗변의 좌표는 스칼라 곱셈으로 표현할 수 있다.

$$ r\cdot (\cos\theta, \sin\theta) = (r\cdot\cos\theta, r\cdot\sin\theta) \\ r^2 = r^2(\cos^2\theta, \sin^2\theta) $$

 

■ 삼각함수의 성질

좌표계에서의 각도는 x축에서 원의 궤적을 따라 반시계 방향으로 회전한 크기를 의미한다.

  • 아직 회전하지 않은 상태의 빗변의 좌표는 $(1,0)$인데 이는 0도에 해당한다.

$$ \cos 0^{\circ} = 1 \ \ \ \sin 0^{\circ} = 0 $$

 

[단위 원에서 사잇각의 변화에 따른 좌표]

 

0도에서 90도까지 증가할수록, x의 값은 감소하고 y의 값은 증가한다. 90도를 넘어가면 x는 음수로 진입하고, y는 다시 0을 향해 줄어든다. 이를 그래프로 나타내면 아래와 같다.

 

1. sin함수의 성질

[sin 함수 그래프]

$sin(\theta)$ 함수는 정의역이 모든 실수이고, 치역은 [-1, 1]이며, 360도 주기로 반복된다.

또한, $sin(\theta)$ 함수는 원점을 기준으로 상하가 반전된 원점 대칭인 홀함수(기함수)의 성질을 지니며 아래의 공식이 항상 성립한다.

$$ \sin(-\theta) = -\sin(\theta) $$

 

2. cos함수의 성질

[cos 함수 그래프]

$cos(\theta)$ 함수도 동일하게 정의역이 모든 실수이고, 치역은 [-1, 1]이며, 360도 주기로 반복된다.

cos함수는 y축을 기준으로 좌우 대칭인 짝함수(우함수)의 성질을 지니며, 아래의 공식이 항상 성립한다.

$$ \cos(-\theta) = \cos(\theta) $$

[sin함수와 cos함수 그래프]

 

3. tan함수의 성질

[tan 함수]

마지막으로 tan함수는 빗변과 무관하게 밑변과 높이의 관계만을 나타낸다. 여기서 분자와 분모를 각각 빗변 값으로 나누면 아래와 같이 sin과 cos으로 tan를 표현할 수 있다.

$$ \tan\theta = \frac{\frac{b}{c}}{\frac{a}{c}} = \frac{\sin\theta}{\cos\theta} $$

  • 여기서 분모의 값이 0이 될 수 없으므로, cos값이 0인 90,-90,270,-270도 일 때는 값이 존재하지 않는다.

tan함수도 동일하게 원점을 기준으로 상하 반전된 홀함수(기함수)의 성질을 지닌다.

 

■ 각의 측정

일상생활에서 사용하는 360도는 수가 너무 크고 약수가 많기 때문에 호의 길이가 1인 부채꼴의 각을 기준으로 측정하는 호도법(Radian)을 사용한다.

[호도법 - 1]

중점을 기준으로 반지름이 1인 반원(초록색)을 그리고, 이 반원의 왼쪽 끝을 중점으로 이동시킨다.

 

[호도법 - 2]

이 후, 반원의 왼쪽 끝 점을 잡고 호를 펼치면, 반지름인 1보다 약 3.141592배 큰데 이것이 바로 무리수인 파이($\pi$)가 된다.

 

[라디안]

반대로 호의 길이가 1인 부채꼴의 각도는 약 57.2958... 도가 되는데 이를 1 rad(1 라디안)이라 한다.

 

그렇다면, 반지름이 1인 반원의 호의 길이는 $\pi$이므로, 아래와 같이 정리 가능하다.

$$ \pi(rad) = 180^{\circ} $$

 

위 식에서 양 변을 $\pi$로 나누면 1rad에 대응되는 각도를 구할 수 있고, (1rad = 57.3도) 양 변을 180으로 나누면 1도에 해당하는 라디안 각도를 구할 수 있다.

$$ 1(rad) = (\frac{180}{\pi})^\circ $$

$$ 1^\circ = \frac{\pi}{180}(rad) $$

 

■ 물체의 회전

물체의 이동시키거나 크기를 늘리는 행위는 각 축에 대해 독립적으로 작동하지만, 회전은 그렇지 않다.

  • 물체를 회전시키기 위해 두 기저벡터$(e_1, e_2)$를 각 $\theta$만큼 회전시킨다고 생각해 보자.

[기저 벡터의 회전 - 1]

기저 벡터를 각 $\theta$만큼 회전시킨 벡터를 $e_1', e_2'$이라 하면, 각 벡터의 좌표는 다음과 같이 계산된다.

$$ e_1' = (\cos\theta, \sin \theta) \\ e_2' = (-\sin\theta, \cos \theta) $$

  • 어떤 벡터가 90도 회전하면 위치를 바꾸고 앞 부호를 반전한다.

 

실벡터 공간의 벡터$(1,1)$이 각 세타만큼 회전했으면, 이는 선형결합식을 통해 다음과 같이 표현할 수 있다.

$$ \vec v = 1\cdot e_1 + 1\cdot e_2 $$

  • 여기서 각 세타만큼 회전한 벡터의 좌표는 다음과 같이 계산된다.

$$ \vec {v'} = 1\cdot(\cos\theta, \sin\theta) + 1\cdot(-\sin\theta, \cos\theta) \\ \vec {v'} = (\cos\theta - \sin\theta, \sin\theta + \cos\theta) $$

 

[기저 벡터의 회전 - 2]

 

이를 일반화하여 임의의 벡터$\vec v = (x, y)$에서 각 세타만큼 회전한 벡터 $\vec u(x',y')$은 다음과 같이 계산할 수 있다.

$$ \vec v = (x,y) = x\cdot e_1 + y\cdot e_2 = x(1,0) + y(0,1) \\ \vec u = (x',y') = x\cdot e_1 + y \cdot e_2 = x(\cos\theta, \sin\theta) + y(-\sin\theta, \cos\theta) \\ ----------------------------- \\ x' = x \cos \theta - y \sin\theta \\ y' = x \sin \theta + y \cos \theta $$

 

■ 삼각함수의 역함수

삼각함수를 사용해 주어진 각에 대응하는 벡터를 얻었다면, 역함수를 통해 벡터에 대응되는 각도를 얻어올 수 있다.

 

1. sin 함수의 역함수

$$ y=f(x) = \sin(x) $$

 

위 수식을 보면 정의역의 여러 요소가 공역의 한 요소로 대응되기 때문에 전사함수의 성질을 지니고 있다.

  • x가 0과 180일 때 1로 대응되고, -90과 270일 때 -1로 대응된다.

역함수가 존재하기 위해선 전단사함수의 성질을 지녀야 하므로 정의역의 범위를 $[-90^{\circ}, 90^{\circ}]$으로 제한하면 전단사함수의 성질을 지니게 된다.

[arcsin 함수]

 

$$ f^{-1}(x) = \sin^{-1}(x)= \arcsin(x) $$

이렇게 정의역의 범위를 줄여 sin함수를 전단사함수로 만들고, 이 함수의 역함수를 아크사인(arcsin) 함수라 한다.

 

2. cos 함수의 역함수

[arccos 함]

cos 함수도 마찬가지로 전단사함수가 되기 위한 조건은 정의역의 범위를 $[0^{\circ}, 180^{\circ}]$으로 제한하면 전단사함수의 성질을 지니게 된다.

 

3. tan 함수의 역함수

[arctan 함수]

tan함수는 정의역이 존재하지 않는 구간이 있다. -90도와 90도(cos 함수의 값이 0)일 때 정의역이 존재하지 않으므로, 이 구간을 제외한 $(-90^{\circ}, 90^{\circ})$범위가 되어야 전단사함수가 된다.

 

arctan 함수는 벡터의 각도를 구할 때 사용된다. 벡터 $\vec v = (x, y)$가 있을 때, 그 벡터가 x축과 이루는 각도 세타는 삼각비 정의에 의해

$$ \tan \theta = \frac{y}{x} $$

이 되고, 여기서 $ \frac{y}{x}$가 바로 "직선의 기울기"가 된다.

 

$$ \vec v = (x,y) = \arctan(\frac{y}{x}) $$

그래서 이 기울기 값을 탄젠트 함수의 역함수인 아크 탄젠트의 입력값으로 넣으면 기울기에 해당하는 각도를 반환한다.

 

하지만 arctan함수는 정의역의 범위를 -90, 90으로 제한했기 때문에 1,4 사분면에 해당하는 정보만 획득할 수 있다.

  • 이는 두 부호가 모두 음수인 3 사분면에서 $\frac{-y}{-x}$의 결과는 양수이기 때문.

그래서 두 좌표를 따로따로 전달하여 부호를 통해 어느 사분면에 위치해 있는지 확인하기 위한 함수가 존재한다.

$$ atan2(y,x) $$

  • atan2 함수의 공역은$(-180^{\circ}, 180^{\circ})$이다.

[arctan2 함수]

 

 

■ 극좌표계

극좌표계는 회전을 위해 설계된 좌표계이다.

[극좌표계]

원점으로부터의 거리 $r$과 각 세타를 통해 좌표를 표시하며, 동심원의 형태로 평면의 모든 점을 표현한다.

  • 데카르트 좌표계에서 극좌표계로의 변환은 다음과 같이 이루어진다.

$$ r = \sqrt{x^2 + y^2} \\ \theta = atan2(y,x) $$

  • 극좌표계에서 데카르트좌표계로의 변환은 다음과 같이 이루어진다.

$$ x = r\cdot \cos\theta \\ y = r\cdot \sin\theta $$

728x90

'게임수학' 카테고리의 다른 글

[게임수학] 4. 행렬  (1) 2025.09.05
[게임수학] 2. 벡터(Vector)  (2) 2025.08.27
[게임수학] 1. 수(Number)와 함수(Function)  (2) 2025.08.26
'게임수학' 카테고리의 다른 글
  • [게임수학] 4. 행렬
  • [게임수학] 2. 벡터(Vector)
  • [게임수학] 1. 수(Number)와 함수(Function)
브라더스톤
브라더스톤
유티니, C#과 관련한 여러 정보를 끄적여둔 블로그입니다. Email : dkavmdk98@gmail.com
  • 브라더스톤
    젊은 프로그래머의 슬픔
    브라더스톤
  • 전체
    오늘
    어제
    • 개발 노트 (31) N
      • Unity,C# (27)
        • Unity 정보 (5)
        • 알고리즘 (11)
        • 자료구조 (2)
        • 절차적생성(PCG) (9)
      • 게임수학 (4) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pcg
    알고리즘
    절차적던전생성
    최단경로찾기
    커스텀 윈도우
    CustomWindow
    BSP
    정렬알고리즘
    이진공간분할
    unity
    절차적지형생성
    CustomEditorWindow
    PerlinNoise
    자료구조
    C#
    수집합
    Custom Inspector
    게임수학
    공간분할알고리즘
    기저벡터
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
브라더스톤
[게임수학] 3. 삼각함수
상단으로

티스토리툴바