삼각함수는 수학, 물리, 그래픽, 위치 계산 등 다양한 분야에서 핵심적인 역할을 한다. MySQL에서도 이를 위해 SIN(), COS(), TAN()과 같은 삼각함수를 지원한다. 이 함수들은 단독으로 쓰이는 경우는 드물지만, 좌표계 연산, 경로 계산, 데이터 시각화, 나아가 3D 공간 계산에서도 유용하게 쓰인다.

삼각함수 입력 단위는 라디안(Radian)
MySQL에서 모든 삼각함수는 각도를 '라디안' 단위로 입력받는다. 즉, 90도는 π/2 라디안, 180도는 π 라디안이다. 만약 도(degree) 단위를 사용하고 싶다면 RADIANS() 함수로 변환해야 한다.
SELECT SIN(RADIANS(30)); -- 결과: 약 0.5
이를 명심하지 않으면 삼각함수 결과가 전혀 다른 값이 나올 수 있다.
SIN() 함수 – 사인
SIN(x) 함수는 주어진 라디안 값 x에 대한 사인 값(sine)을 반환한다. 사인 함수는 직각삼각형에서 높이/빗변의 비율로 정의되며, 주기적인 변화를 표현할 때 자주 사용된다.
SELECT SIN(RADIANS(90)); -- 결과: 1
SELECT SIN(RADIANS(0)); -- 결과: 0
예제: 파형 값 생성
SELECT i,
SIN(RADIANS(i * 10)) AS sin_wave
FROM generate_series AS i
WHERE i BETWEEN 0 AND 36;
0도부터 360도까지 10도 단위로 사인값을 구하면 파형 형태 데이터를 만들 수 있어 그래프 처리에 유용하다.
COS() 함수 – 코사인
COS(x) 함수는 주어진 라디안 값 x에 대한 코사인 값(cosine)을 반환한다. 밑변/빗변의 비율로 정의되며, 사인과 함께 주기 함수를 만들거나 방향 계산에서 사용된다.
SELECT COS(RADIANS(60)); -- 결과: 약 0.5
SELECT COS(RADIANS(0)); -- 결과: 1
예제: 2D 원형 좌표 생성
SELECT
COS(RADIANS(angle)) * r AS x,
SIN(RADIANS(angle)) * r AS y
FROM angles;
사인과 코사인을 조합하면 원형 좌표계(x, y)를 만들 수 있어 레이더 차트, 원형 그래프, 게임 캐릭터 이동 경로 등을 구현할 수 있다.
TAN() 함수 – 탄젠트
TAN(x) 함수는 주어진 라디안 값 x에 대한 탄젠트 값(tangent)을 반환한다. 탄젠트는 높이/밑변, 즉 SIN(x)/COS(x)로 정의된다. 경사도 계산, 회전 각도 계산 등에 유용하다.
SELECT TAN(RADIANS(45)); -- 결과: 1
SELECT TAN(RADIANS(0)); -- 결과: 0
예제: 경사도 계산
SELECT height / width AS 탄젠트값,
DEGREES(ATAN(height / width)) AS 경사도_각도
FROM ramps;
TAN은 ATAN()의 반대 함수로써, 경사비로부터 각도를 유추하는 계산 과정의 일부로 쓰인다.
삼각함수 실무 활용 예시
- 경로 계산: 위도/경도 기반 거리 계산 (Haversine 공식을 구성할 때 사용)
- 좌표 변환: 도넛 차트, 파형 데이터, 그래픽 위치 처리
- 3D 게임 또는 지도 뷰: 물체 회전, 방향 계산, 시야각 구현
- IoT 센서 데이터 분석: 회전 센서, 각도 센서의 출력값 분석
주의사항
- 입력은 도(degree)가 아니라 라디안(radian)이므로 RADIANS(x)로 변환 필수
- TAN(x)는 x = 90°, 270°처럼 COS(x) = 0일 경우 무한대 값(INF) 또는 NULL이 반환될 수 있음
- 실무에서는 SIN(), COS()는 함께 쓰는 경우가 많고, TAN()은 제한적인 상황에서 사용된다
정리
- SIN(), COS(), TAN()은 각도 기반의 연산에 사용하는 대표적인 삼각함수이다.
- MySQL에서는 모든 삼각함수 입력은 라디안 단위이며, RADIANS()를 꼭 함께 사용해야 한다.
- 파형 생성, 좌표계 처리, 회전 각도 계산, 데이터 시각화 등 실무 활용도가 높다.
- 삼각함수는 단순 계산 외에도 시계열 표현, 그래픽 계산, 방향성 처리에 매우 유용하다.
참고 문서
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_sin
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_cos
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_tan
'DB' 카테고리의 다른 글
| [MySQL] IF 함수로 조건 분기 처리하는 법 (0) | 2025.07.25 |
|---|---|
| [MySQL] PI, RAND, SIGN 등 특수 수학 함수 모음 (3) | 2025.07.25 |
| [MySQL] RADIANS, DEGREES로 각도 변환하기 (0) | 2025.07.24 |
| [MySQL] ASIN, ACOS, ATAN 역삼각함수 활용법 (2) | 2025.07.24 |
| [MySQL] SQRT, EXP, LOG로 제곱근과 로그 구하기 (0) | 2025.07.24 |
| [MySQL] MOD, DIV, %, POW로 나머지·제곱 계산하기 (1) | 2025.07.24 |
| [MySQL] ROUND, TRUNCATE로 소수점 제어하기 (0) | 2025.07.24 |
| [MySQL] IF vs CASE 차이점과 선택 기준 정리 (0) | 2025.07.24 |