8-1-나.삼각 함수

수학 함수는 수학적인 계산을 하는 함수들이다. 수학 함수들의 원형은 모두 math.h에 선언되어 있으므로 이 함수들을 사용하려면 제일 먼저 #include <math.h> 전처리문을 삽입하여 이 헤더 파일을 포함시켜야 한다. 이 책에서 사용하는 Turboc.h가 이 헤더 파일을 포함하고 있지 않으므로 math.h를 포함하지 않으면 수학 함수를 쓸 수 없다. 실제 프로젝트를 할 때도 반드시 math.h를 인클루드해야 함을 꼭 기억해 놓도록 하자.

수학 함수 중에 비교적 이해하기 쉬운 삼각 함수에 대해 먼저 정리해 보자. 삼각 함수들은 이름만 다르고 원형이 모두 동일하다. 실수형 인수를 하나 받아들이며 이 인수의 삼각함수값을 계산하여 그 결과를 실수로 리턴한다.

 

double sin(double x);

double cos(double x);

double tan(double x);

double asin(double x);

double acos(double x);

double atan(double x);

double sinh(double x);

double cosh(double x);

double tanh(double x);

 

기본적인 수학 교육을 받았다면 sin, cos, tan 함수가 어떤 값을 계산한다는 것은 잘 알고 있을 것이다. asin, acos, atan 함수는 기본 삼각 함수의 역함수들이며 sinh, cosh, tanh는 쌍곡선 삼각함수라는 것이다. 설마 그럴리야 없겠지만 삼각 함수가 뭐하는 함수인지 모르겠다는 사람은 수학책을 참고하기 바란다. 이 책은 수학책이 아니므로 함수들이 구하는 값의 수학적 의미에 대한 설명은 하지 않기로 한다.

삼각 함수들이 받아들이는 인수 x는 360분법의 각도가 아니라 호도(라디안)값이다. 1호도는 원주의 길이가 반지름과 같아지는 각도인데 180/3.1416으로 정의되어 있다. 따라서 각도값으로 호도를 구할 때는 다음 공식을 사용하면 된다.

 

호도=각도*3.1416/180

 

이 공식에서 3.1416이라는 상수는 물론 원주율이다. 다음 예제는 sin 함수를 사용하여 0도~90도까지 매 10도마다의 사인값을 계산해서 화면으로 출력한다.

 

: sin

#include <Turboc.h>

#include <math.h>

 

void main(void)

{

     int r;

 

     for (r=0;r<=90;r+=10) {

          printf("sin(%d도)=%f\n",r,sin(r*3.1416/180));

     }

}

 

sin 함수를 한 번 호출해 본다는 것 외에는 사실 별다른 의미는 없다. 실행 결과는 다음과 같은데 심심하면 컴퓨터가 정확하게 계산했는지 수학책의 부록과 대조해 보아라.

 

sin(0도)=0.000000

sin(10도)=0.173649

sin(20도)=0.342021

sin(30도)=0.500001

sin(40도)=0.642789

sin(50도)=0.766046

sin(60도)=0.866027

sin(70도)=0.939694

sin(80도)=0.984808

sin(90도)=1.000000

 

예제가 조금 썰렁한 감이 있는데 그래픽을 보여 줄 수 있다면 멋진 사인 곡선을 그려 보겠지만 콘솔 환경에서는 그래픽을 그릴 수가 없으므로 sin 함수의 동작만 확인해 보았다. 다음 프로그램은 그래픽 환경에서 실행되는 아날로그 시계이다.

이 시계에서 시간을 표시하는 12개의 작은 원 좌표와 시침, 분침, 초침의 끝 좌표를 계산하려면 sin, cos 같은 삼각 함수가 반드시 필요하다. 다음에 그래픽 환경에서 프로그래밍을 할 때 삼각 함수가 어떻게 사용되는지 실습해 보도록 하자. 사실 프로그래머의 입장에서 삼각 함수가 어떤 값을 어떻게 계산해 내는가는 전혀 중요하지 않으며 언제 어떤 위치에 삼각 함수를 적절하게 사용하는가가 훨씬 더 중요하다. 실생활에서도 그렇지만 정수를 주로 다루는 컴퓨터 환경에서 삼각 함수가 필요한 경우는 그리 흔하지 않다.