[게임 수학] 삼각함수

LeeTaes·2023년 12월 9일
0

게임수학

목록 보기
1/5
post-thumbnail
post-custom-banner

1. 삼각함수

  • 삼각함수는 각의 크기를 삼각비로 나타낸 함수를 의미합니다.
  • 삼각비는 변과 각의 관계를 수치로 나타낸 것으로 sin, cos, tan이 이에 속합니다.
  • 삼각함수의 기본 개념과 실습을 진행해보도록 하겠습니다.

[1 - 1] 기본적으로 알아야 하는 개념(공식)

위에서 언급한 삼각비를 구하는 방법 및 빗변의 길이를 구하는 피타고라스 정리는 필수로 암기하고 넘어가야 하는 개념입니다.


[1 - 2] 각도법과 호도법

  • 일반적으로 게임에서 각도는 회전을 위해 사용됩니다.
    • 각도법 (Degree)
      • 각의 크기를 0 ~ 360 까지의 수로 각도를 표현하는 방법
    • 호도법 (Radian)
      • 호의 길이로 각도를 표현하는 방법
  • 각도와 호도는 서로 변환이 가능합니다.

    • 각도에서 라디안으로 변환 : degree * (π/180)
    • 라디안에서 각도로 변환 : radian * (180/π)
  • ex) 30°를 라디안으로 변환 : 30° * (π/180) = π/6

  • ex) 2π를 각도로 변환 : 2π * (180/π) = 360°


[1 - 3] 단위(Unit)원을 이용한 길이 구하기

  • 단위(Unit)원은 반지름의 길이가 1인 원을 의미합니다.
  • 단위원과 피타고라스 법칙을 이용해 x길이, y길이를 구할 수 있습니다.

  • 위 그림에서 노란색 선이 원과 만나는 지점의 좌표는 다음과 같습니다.

    • x 좌표 = x / 빗변 = cosθ
    • y 좌표 = y / 빗변 = sinθ
  • 만약 각도가 점점 증가한다고 가정한다면?

    • 다음 그래프와 같이 값이 변할 것입니다.

2. 삼각함수 실습 - UE_Blueprint

  • 간단한 대포를 만들어 각도에 따라 포신을 회전시키기
  • 포신의 끝에서 총알이 일직선으로 발사되도록 구현하기

[2 - 1] 대포 생성 및 회전

  • 대포 역할을 해줄 Buleprint class를 생성합니다.
  • Q, E 입력을 받아 각도를 조정합니다.
    (x, y, z 중 x, z축만을 사용해 2차원 처럼 구현)
  1. 대포 역할을 해줄 블루프린트 클래스를 생성합니다.
    포신의 길이를 500으로 설정합니다.
    (기본 Cube = 100이므로, Scale을 5배 증가)

  2. 레벨 블루프린트에서 Q와 E 입력이 들어오면 Degree를 수정하고 대포에 적용시켜줍니다.


[2 - 2] 총알 생성 및 발사

  • 총알 역할을 해줄 Buleprint class를 생성합니다.
  • 총알이 생성되면 매 프레임 특정 각도로 속도만큼 위치를 이동합니다.
  • SpaceBar를 통해 총알을 포신의 끝에 생성합니다. (발사)
  1. 대포에서 발사될 총알 블루프린트 클래스를 생성합니다.
    총알은 매 프레임 자동으로 특정 각도를 향해 이동하도록 수정합니다.
    (pos.x += speed x cos(degree) x deltaTime)
    (pos.z += speed x sin(degree) x deltaTime)

  2. 총알을 포신의 끝 위치에서 스폰합니다.
    생성 후 현재 총알에게 포신의 각도를 전달합니다.
    총알의 스폰 위치는 각도만 계산했을 때 cos(Degree), sin(Degree)입니다.
    여기에 포신의 길이를 적용시켜 주면 포신의 끝에서 총알이 스폰되게 설정할 수 있습니다.
    (총알의 스폰 위치.x = 대포의 위치.x + (포신의 길이 x cos(Degree))
    (총알의 스폰 위치.z = 대포의 위치.z + (포신의 길이 x sin(Degree))

  3. 결과 확인
    포신의 끝에서 총알이 제대로 발사되는 것을 확인할 수 있습니다.

profile
클라이언트 프로그래머 지망생
post-custom-banner

0개의 댓글