개발일지/TIL(Today I Learned)

2025-01-07 <라디안과 삼각함수를 이용해 게임 로직 구현하기>

프린스 알리 2025. 1. 7.

내일배움캠프 Node.js 트랙 49일차

라디안과 삼각함수

라디안

우리는 각도에 대해 얘기할 때 호도법보다는 육십분법을 많이 사용한다. 여기서 육십분법이란 우리가 흔히 사용하는 직각을 90도로 정의하는 방식을 말한다. 그러나 각도를 다른 방식(보다 수학적으로)으로 나타내는 방법도 있는데 그것이 바로 고등학교 때 배우는 호도법이다.

호도법

호도법은 호의 길이를 통해 각도를 나타내는 방식이다. 왜 하필 호의 길이인가 의문이 들 수 있는데, 이는 부채꼴에서 호의 길이가 중심각에 비례하기 때문이다. 그렇다면 호의 길이는 어떻게 구할까. 원의 둘레를 구하는 공식을 기억하고 있다면 어렵지 않게 추론할 수 있다.

 

알다시피 원의 둘레는 2πR로 구할 수 있다. R(원의 반지름)이야 어찌됐건 우리가 주목해야 할 점은, 부채꼴의 중심각이 2π에 비례한다는 사실이다.

 

어떤 부채꼴에서 호의 길이가 반지름 길이와 같을 때, 우리는 그 부채꼴의 중심각을 1rad(1 라디안)이라고 부른다.

또 원의 둘레일 때는 2π rad이라고 부른다.

삼각함수

사실 라디안으로 이 글의 서문을 연 것은 삼각함수를 소개하기 위함이었다. 고등학교 시절 지긋지긋하게 보았던 sin, cos, tan 세 형제들. 이들에 대해 간략히 설명하자면 아래 다이어그램으로 나타낼 수 있겠다.

 

 

이때 중요한 건 단위원에서 삼각함수가 가지는 의미를 파악하는 것이다.

단위원은 반지름이 1인 원으로, 이를 통해 삼각함수의 값을 이해하기 쉽게 시각화할 수 있다.

단위원 위의 한 점이 있고, 이를 원점과 연결했을 때 생기는 삼각형을 통해 sin, cos, tan 값을 계산한다.

 

  • sin(θ): 단위원에서 사인은 y축의 값(세로 높이)을 의미한다. 공식으로는 $sin θ = y/r$인데, 단위원에서 r = 1이므로 $sin θ = y$로 간단히 표현할 수 있다.
  • cos(θ): 단위원에서 코사인은 x축의 값(가로 길이)을 의미한다. 공식으로는 $cos θ = x/r$이며, r = 1일 때 $cos θ = x$가 된다.
  • tan(θ): 단위원에서 탄젠트는 기울기를 의미하며, 공식으로는 $tan θ = y/x$로 정의된다. 이 값은 x ≠ 0일 때 정의된다.

호도법과 삼각함수

 

출처 : [수학 I] 삼각함수-삼각함수의 뜻과 그래프-일반각과 호도법 개념 정리 문제 공식-수학대왕

 

출처 : [수학 리부트] 삼각함수

게임에서의 활용

그렇다면 삼각함수를 게임에서는 어떻게 활용할 수 있을까?

이제까지 만든 횡스크롤 점프 게임이나 타워디펜스 게임에서 우리는 게임 속 오브젝트의 ( x, y ) 좌표를 쉽게 접할 수 있었다. 이 오브젝트들은 상하좌우로만 움직였기 때문에 x와 y값이 독립적으로 증가해왔으므로 사실상 1차원 데이터나 다름없었다.

 

그러나 만약 2차원 좌표 위에서 대각선으로 움직인다면 어떨까? 혹은 포물선을 그리는 오브젝트의 경로는 어떻게 계산해야 할까?

 

이럴 때 쓸 수 있는 것이 바로 삼각함수와 라디안이다. 탄젠트가 기울기를 의미한다는 건, x와 y의 비율을 알고 있을 때 탄젠트의 역함수를 통해 각도를 구할 수 있다는 뜻이기 때문이다. 우리는 각도는 모르더라도 x와 y의 비율은 알고 있을 확률이 매우 크다.

const angle = Math.atan2(deltaY, deltaX); // 아크탄젠트를 계산하는 메서드

아래의 예시들을 살펴보면서 게임에서 어떻게 삼각함수를 이용할 수 있을지 생각해보자.

1. 2D 게임에서 대각선 이동

상하좌우로 이동하는 경우에는 x나 y값만 증가시키면 되지만, 대각선으로 움직일 경우 x와 y값이 동시에 변화해야 한다. 여기서 삼각함수의 역할이 중요해진다.

대각선 이동 공식:

만약 오브젝트가 특정 각도로 움직이고 속도가 v라고 한다면, 삼각함수를 사용해 x와 y축 방향 속도를 계산할 수 있다. (속도는 알다시피 벡터고, 벡터의 x 증가량과 y증가량은 곧 x축의 속도와 y축 속도를 의미한다.)

  • x축 속도: x=v·cos θ
  • y축 속도: y=v·sin θ

2. 포물선 경로 계산

삼각함수는 투사체의 포물선 경로를 계산하는 데도 자주 사용된다. 예를 들어, 게임 속에서 활을 쏘거나 공을 던질 때, 초기 속도와 각도를 바탕으로 물체가 이동하는 궤적을 삼각함수로 계산할 수 있다.

포물선 운동 공식:

물리학에서 투사체 운동의 기본 공식은 다음과 같다(v : 초기 속도, θ : 발사각도, t : 시간, g : 중력 가속도)

  • x좌표: x=v·cos θ·t
  • y좌표: y=v·sin θ·t-1/2gt^2

3. 회전 이동

2D 게임에서 오브젝트가 특정 축을 중심으로 회전하거나, 원형 궤도를 따라 움직이는 경우 삼각함수가 필수적이다.

원형 궤도 공식:

반지름 r을 가진 원형 궤도를 따라 움직이는 오브젝트의 좌표는 삼각함수를 통해 계산된다.

  • x좌표: x=r·cos θ
  • y좌표: y=r·sin θ

여기서 ( θ )는 시간에 따라 변화하는 각도이다. ( θ )를 프레임마다 증가시키면 오브젝트가 원을 따라 움직이는 애니메이션을 만들 수 있다.

예제 코드:

float radius = 5.0f; // 원의 반지름
float angle = 0.0f; // 초기 각도

void Update()
{
    angle += Time.deltaTime; // 매 프레임마다 각도를 증가
    float x = radius * Mathf.Cos(angle);
    float y = radius * Mathf.Sin(angle);

    transform.position = new Vector2(x, y);
}

 

댓글