반응형
C언어 삼각함수 가이드: sin, cos, tan부터 atan2 활용까지
C언어에서 기하학적 계산이나 물리 시뮬레이션, 게임 개발을 할 때 math.h 라이브러리의 삼각함수는 필수적입니다. 하지만 많은 초보 개발자들이 '도(Degree)'와 '라디안(Radian)'의 변환 문제로 어려움을 겪곤 합니다.
오늘은 삼각함수의 기본 사용법부터 실무에서 각도 계산 시 가장 많이 쓰이는 atan2 함수까지 완벽하게 정리해 보겠습니다.

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. 주의사항 및 실무 팁
- 정밀도: math.h의 함수들은 double 형을 사용하므로 아주 미세한 오차가 발생할 수 있습니다. 0인지를 확인할 때는 value == 0 대신 fabs(value) < 1e-9와 같은 방식을 권장합니다.
- 컴파일 옵션: 리눅스(GCC) 환경에서는 컴파일 시 명령어 끝에 -lm 옵션을 반드시 추가해야 링크 에러가 발생하지 않습니다.
- 임베디드 최적화: 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' 블로그에서 계속됩니다.
반응형
'Core Programming > C Standard Library: Resource & Performan' 카테고리의 다른 글
| C언어 시간 함수 총정리: time, clock, difftime 사용법과 실행 시간 측정 (0) | 2025.02.22 |
|---|---|
| C언어 절댓값, 올림, 내림, 반올림 함수 완벽 정리 (abs, fabs, ceil, floor) (0) | 2025.02.21 |
| C언어 수학 함수 총정리: math.h 사용법과 컴파일 에러(-lm) 해결법 (0) | 2025.02.19 |
| C언어 메모리 관리 완벽 가이드: memcpy, memmove, memset, memcmp 차이점 (0) | 2025.02.18 |
| C언어 동적 메모리 할당 총정리: malloc, calloc, realloc, free 완벽 가이드 (0) | 2025.02.17 |