Core Programming/C Standard Library: Resource & Performan

C언어 삼각함수 완벽 가이드: sin, cos, tan와 각도 변환(Radian) 총정리

임베디드 친구 2025. 2. 20. 09:20
반응형

C언어 삼각함수 가이드: sin, cos, tan부터 atan2 활용까지

C언어에서 기하학적 계산이나 물리 시뮬레이션, 게임 개발을 할 때 math.h 라이브러리의 삼각함수는 필수적입니다. 하지만 많은 초보 개발자들이 '도(Degree)'와 '라디안(Radian)'의 변환 문제로 어려움을 겪곤 합니다.

오늘은 삼각함수의 기본 사용법부터 실무에서 각도 계산 시 가장 많이 쓰이는 atan2 함수까지 완벽하게 정리해 보겠습니다.

Generated by Gemini AI.


1. 삼각함수 사용 전 필수 지식: 라디안(Radian)

C언어의 모든 삼각함수는 입력값으로 '라디안' 단위를 사용합니다. 우리가 흔히 쓰는 30°, 90° 등의 '도(Degree)' 단위를 그대로 넣으면 엉뚱한 결과가 나옵니다.

  • 변환 공식: $radian = degree \times (\pi / 180)$
  • 역변환 공식: $degree = radian \times (180 / \pi)$

2. 기본 삼각함수 (sin, cos, tan)

가장 기본적인 사인, 코사인, 탄젠트 함수입니다.

함수 원형

C
 
double sin(double x);
double cos(double x);
double tan(double x);

예제 코드: 60도의 삼각비 구하기

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

#define PI 3.14159265358979323846

int main() {
    double degree = 60.0;
    double radian = degree * (PI / 180.0);

    printf("sin(60°) = %.4f\n", sin(radian)); // 0.8660
    printf("cos(60°) = %.4f\n", cos(radian)); // 0.5000
    printf("tan(60°) = %.4f\n", tan(radian)); // 1.7321

    return 0;
}

3. 역삼각함수와 실무 꿀팁 atan2

역삼각함수는 삼각비 값을 통해 각도(라디안)를 역산할 때 사용합니다.

함수 설명 입력 범위
asin(x) $sin$의 역함수 $-1 \le x \le 1$
acos(x) $cos$의 역함수 $-1 \le x \le 1$
atan(x) $tan$의 역함수 모든 실수
atan2(y, x) (추천) 좌표 기반 각도 계산 모든 실수

💡 왜 atan 대신 atan2를 써야 할까요?

atan(x)는 결과값이 $-90^\circ$ ~ $90^\circ$ 사이로 제한되어 사분면 판별이 어렵습니다. 반면 atan2(y, x)는 y와 x 좌표를 따로 입력받아 $-180^\circ$ ~ $180^\circ$ 범위의 정확한 각도를 반환하므로 캐릭터 이동 방향이나 센서 각도 계산에 훨씬 유리합니다.

예제 코드: 좌표 (1, 1)의 각도 구하기

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

#define PI 3.14159265358979323846

int main() {
    double x = 1.0, y = 1.0;
    double radian = atan2(y, x); // y/x의 아크탄젠트 계산
    double degree = radian * (180.0 / PI);

    printf("좌표(1,1)의 각도: %.2f°\n", degree); // 45.00°
    return 0;
}

4. 주의사항 및 실무 팁

  1. 정밀도: math.h의 함수들은 double 형을 사용하므로 아주 미세한 오차가 발생할 수 있습니다. 0인지를 확인할 때는 value == 0 대신 fabs(value) < 1e-9와 같은 방식을 권장합니다.
  2. 컴파일 옵션: 리눅스(GCC) 환경에서는 컴파일 시 명령어 끝에 -lm 옵션을 반드시 추가해야 링크 에러가 발생하지 않습니다.
  3. 임베디드 최적화: FPU(부동소수점 연산 장치)가 없는 저사양 MCU에서는 삼각함수 연산이 매우 느릴 수 있습니다. 이 경우 Look-up Table(LUT) 방식을 사용하는 것이 성능 향상의 핵심입니다.

5. 요약 정리

  • sin, cos, tan: 각도(라디안) $\rightarrow$ 비율
  • asin, acos, atan: 비율 $\rightarrow$ 각도(라디안)
  • 좌표로 각도를 구할 때는 atan2가 가장 안전하고 정확함
  • 모든 결과는 degree로 사용하기 위해 $(180 / \pi)$를 곱해야 함

    포스팅이 도움이 되셨다면 하트(♥)와 댓글 부탁드립니다!https://coding-by-head.tistory.com/
  • 임베디드 소프트웨어 및 최적화 기법에 대한 전문적인 정보는 'Coding by Head' 블로그에서 계속됩니다.
반응형