삼각함수와 단위원
핵심 질문
각도를 재면 왜 점의 위치가 sin, cos라는 두 숫자로 바뀔까?
교과서 설명
반지름이 1인 원을 단위원이라고 부른다. 원 위의 한 점을 생각해 보자. 중심에서 그 점까지 선을 그으면 각도 하나가 생기고, 그 점의 좌표는 항상 다음처럼 쓸 수 있다.
(cosθ,sinθ)
여기서 θ는 각도다. cosθ는 점이 오른쪽으로 얼마나 갔는지, sinθ는 위로 얼마나 갔는지를 말한다.
각도를 잴 때 FFT에서는 보통 라디안을 쓴다. 반지름이 1인 원에서 호의 길이가 1이면 그 각도가 1라디안이다.
원 한 바퀴의 둘레는 2π이므로 한 바퀴는 2π라디안이다.
360∘=2π,180∘=π,90∘=2π
각도를 도 단위에서 라디안으로 바꾸려면 한 바퀴가 서로 같다는 사실을 비율로 쓰면 된다.
θrad=θdeg⋅180π,θdeg=θrad⋅π180
각도는 오른쪽 방향에서 시작해서 반시계 방향으로 커진다고 약속한다. 그래서 θ=0은 오른쪽, θ=2π는 위쪽이다.
반대로 음수 각도는 시계 방향으로 돈다는 뜻이다. 예를 들어 −2π는 오른쪽에서 시작해 아래쪽으로 90∘ 도는 각도다. 나중에 DFT 식에서 e−2πikn/N처럼 마이너스가 붙는 이유도 이 “반대 방향 회전” 약속과 연결된다.
단위원에서는 사분면에 따라 좌표의 부호가 달라진다. 오른쪽 위인 제1사분면에서는 cosθ와 sinθ가 모두 양수다. 왼쪽 위인 제2사분면에서는 가로 좌표가 왼쪽이므로 cosθ<0이고, 세로 좌표는 위쪽이므로 sinθ>0이다.
사분면제1사분면제2사분면제3사분면제4사분면각도 범위0<θ<2π2π<θ<ππ<θ<23π23π<θ<2πcosθ+−−+sinθ++−−
축 위의 대표점도 함께 기억하자.
θ=π⇒(−1,0),θ=23π⇒(0,−1),θ=−2π⇒(0,−1)
따라서 음수 각도라고 해서 좌표가 모두 음수가 되는 것은 아니다. 시계 방향으로 어느 사분면에 도착했는지를 보고 cos와 sin의 부호를 따로 판단한다.
라디안과 삼각함수의 유도
라디안은 원의 호 길이에서 나온 각도 단위다. 반지름이 r인 원에서 중심각이 θ라디안이면, 그 각이 만드는 호의 길이 s는 다음과 같다.
s=rθ
단위원에서는 r=1이므로 s=θ가 된다. 그래서 한 바퀴의 호 길이 2π가 곧 한 바퀴 각도 2π라디안이 된다. FFT에서 2π가 반복해서 등장하는 이유는 “한 바퀴 회전”을 수식으로 쓰기 위해서다.
단위원 위의 점 P를 오른쪽 축에서 θ만큼 회전한 위치라고 하자. P에서 x축으로 수선을 내리면 직각삼각형이 생긴다. 빗변 길이가 1이므로 가로 길이와 세로 길이는 각각
cosθ,sinθ
가 된다. 따라서 단위원 좌표는 (cosθ,sinθ)이다. 이 정의에서 곧바로 피타고라스 항등식도 나온다.
cos2θ+sin2θ=1
또 원 위에서 한 바퀴 더 돌면 같은 점으로 돌아오므로, 삼각함수는 2π를 주기로 반복된다. 이 주기성이 DFT에서 “정수 개의 바퀴”를 검사할 수 있게 해 준다.
길이 N인 샘플 묶음에서 한 바퀴를 N칸으로 나누면 한 칸의 각도는
Δθ=N2π
이다. n번째 칸의 각도는 nΔθ=N2πn이고, 이 값이 뒤에서 cos(N2πkn) 같은 식의 기본 재료가 된다.
직관 비유
손전등을 들고 원 위를 걷는다고 생각하자. 바닥에 생기는 그림자의 가로 위치가 cos, 벽에 생기는 세로 위치가 sin이다. 같은 움직임을 두 방향의 그림자로 나누어 보는 것이다.
예제
각도가 0이면 점은 (1,0)에 있다.
cos0=1,sin0=0
각도가 2π이면 점은 (0,1)에 있다.
cos2π=0,sin2π=1
한 바퀴를 더 돌아도 같은 위치로 돌아온다.
cos(θ+2π)=cosθ,sin(θ+2π)=sinθ
자주 쓰는 각도는 미리 익혀 두면 좋다.
6π=30∘,4π=45∘,3π=60∘
손풀이 체크
-
60∘를 라디안으로 바꾸면 얼마일까?
답 보기
3π
-
4π는 몇 도일까?
답 보기
45∘
-
θ=6π일 때 단위원 위의 점은 어느 사분면에 있을까?
답 보기
제1사분면. 좌표는 (23,21)이다.
다음으로 이어지는 생각
점이 원 위를 계속 돌면 sin, cos 값도 반복된다. 이 반복이 다음 장의 파동으로 이어진다.
각도 θ를 라디안으로 바꾸고 단위원 좌표 (cosθ,sinθ) 계산하기
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
int main() {
const double pi = acos(-1.0);
double degrees = 60.0;
double radians = degrees * pi / 180.0;
double x = cos(radians);
double y = sin(radians);
cout << fixed << setprecision(3);
cout << degrees << " degrees = " << radians << " radians\n";
cout << "(cos, sin) = (" << x << ", " << y << ")\n";
}
연습: θ=30∘,45∘,90∘,180∘로 바꿔 보자.