행복한 하루
[Unity] 게임을 위한 수학 용어 빠르게 이해하기 (호도법 - radian, 각도 - degree) 본문
안녕하세요.
학교 수학시간에 게임이나 실용적인 내용으로 응용해서 가르쳐 주면 학교 다닐 때 좀 더 관심 있게 배우지 않았았을까 생각을 해봅니다.
삼각함수를 기반으로 우리는 이런저런 각도와 삼각형의 각 변의 길이를 구할 수 있었습니다. 그리고 원주의 길이라고 하는 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
'Unity > Math' 카테고리의 다른 글
[Unity] 게임을 위한 거리, 속도 매크로 소스 (0) | 2023.03.26 |
---|