행복한 하루

[Unity] 게임을 위한 수학 용어 빠르게 이해하기 (호도법 - radian, 각도 - degree) 본문

Unity/Math

[Unity] 게임을 위한 수학 용어 빠르게 이해하기 (호도법 - radian, 각도 - degree)

변화의 물결 2023. 2. 19. 00:27

 

 

안녕하세요.

 

  학교 수학시간에 게임이나 실용적인 내용으로 응용해서 가르쳐 주면 학교 다닐 때 좀 더 관심 있게 배우지 않았았을까 생각을 해봅니다.

  삼각함수를 기반으로 우리는 이런저런 각도와 삼각형의 각 변의 길이를 구할 수 있었습니다. 그리고 원주의 길이라고 하는 2πr 공식을 기억할 것입니다. 여기서 나오는 각도와 라디안의 변환으로 확인해 보겠습니다.


1. 간단하게 호도법, 도수법 이해하기

1.1 개  념

  - 호도법: 파이(π)를 사용해서 180도 각도를 표시하는 방법, 표기 단위를 라디안(Radian, rad)

    -- 1 라디안: 호의 길이가 반지름과 같게 되는 만큼의 각을 1rad(라디안), 약 57.3°

 

<https://en.wikipedia.org/wiki/File:Circle_radians.gif>

 

  - 도수법: 두 직선이 이루는 각을 각도의 도수로 나타내는 방법, 원이 한 바퀴 도는데 필요한 각을 360° 표현하는 방법

 

 1.2 왜 호도법을 사용하는가?

  - 실수와 일대일 대응이 가능하기 때문입니다. 1°(도)라는 단위 표현을 실수로 계산할 수 있는 단위로 변화하기 위해서입니다. 즉, 1° (360° = 2πr, 1° =π/180) 이므로 π/180라고 표현할 수 있습니다.

  예로, 90°() 90 x 1° 표현할 있고 다시 90 * π/180 = π/2라는 실수로 계산할 수 있습니다. π를 우리가 알고 있는 3.14라고 한다면 3.14 / 2 = 1.57이라고 할 수 있습니다.

 

  - 삼각함수를 미분할 때 육십분법을 사용하면 상수가 나와서 계산이 복잡해지지만 호도법을 사용하면 상수가 나타나지 않습니다.

<https://ko.wikipedia.org/wiki/%EB%9D%BC%EB%94%94%EC%95%88>

2. 프로그램 소스로 확인

 - 각도를 원주의 길이 비율로 서로 변환이 가능합니다. 2πr = 360° 일 때 r(반지름) 1 놓으면 2π= 360° 되므로 이것이 변환의 시작된다고 보면 됩니다.   

#define  _USE_MATH_DEFINES

#include <stdio.h>
#include <math.h>

// Degree to Radian
//#define DEGREE_RADIAN(_deg) (M_PI*(_deg)/180.0f)
#define DEGREE_RADIAN(_deg) ((_deg)*M_PI/180.0f)

// Radian to Degree
#define RADIAN_DEGREE(_rad) ((_rad)*180.0f/M_PI)

int main()
{

	double rad_d = DEGREE_RADIAN(45.0);

	double sin_d = sin(rad_d);
	double cos_d = cos(rad_d);
	double tan_d = tan(rad_d);

	double  asin_d = asin(0.5);
	double  acos_d = acos(0.5);
	double  atan_d = atan(0.5);

	// atan2는 물체 사이 공간을 파악하는데 사용한다. 그리고 인자로 밑변과 대변을 필요로 한다.
	// 결과 범위 (-180 ~ 180)
	double atan2_d = atan2(2.0f, 1.0f);

	printf("sin 45 (double) : %f\n", sin_d);
	printf("cos 45 (double) : %f\n", cos_d);
	printf("tan 45 (double) : %f\n", tan_d);
	printf("\n");
	printf("asin 0.5 (dobule) : %f(radian)  %f(degree)\n", asin_d, RADIAN_DEGREE( asin_d ));
	printf("acos 0.5 (dobule) : %f(radian)  %f(degree)\n", acos_d, RADIAN_DEGREE( acos_d ));
	printf("atan 0.5 (dobule) : %f(radian)  %f(degree)\n", atan_d, RADIAN_DEGREE( atan_d ));
	printf("\n");
	printf("atan2 2.0,1.0 (dobule) : %f(radian)  %f(degree)\n", atan2_d, RADIAN_DEGREE(atan2_d));

	return 0;
}

 

<실행결과>

 

감사합니다.

 

<참고 자료>

1. [도서] 게임을 움직이는 수학과 물리

2. 제발 호도법 이상하게 외우지 마세요...

https://www.youtube.com/watch?v=vVU_u0gfIqs

3. [육십분법과 호도법의 이해 ②] 왜 호도법을 사용하는가?

https://m.blog.naver.com/alwaysneoi/100188370054

4. [삼각함수] 호도법, 1 라디안 크기; 1 radian; 육십분법 비교

https://m.blog.naver.com/biomath2k/221867576248

radian_example.cpp
0.00MB

 

Comments