Chapter 2

삼각함수와 단위원

각도를 좌표로 바꾸는 첫 도구
핵심 질문

각도 하나가 왜 두 좌표 cos\cos, sin\sin으로 바뀔까?

삼각함수와 단위원

핵심 질문

각도를 재면 왜 점의 위치가 , 라는 두 숫자로 바뀔까?

교과서 설명

반지름이 1인 원을 단위원이라고 부른다. 원 위의 한 점을 생각해 보자. 중심에서 그 점까지 선을 그으면 각도 하나가 생기고, 그 점의 좌표는 항상 다음처럼 쓸 수 있다.

여기서 는 각도다. 는 점이 오른쪽으로 얼마나 갔는지, 는 위로 얼마나 갔는지를 말한다.

각도를 잴 때 FFT에서는 보통 라디안을 쓴다. 반지름이 인 원에서 호의 길이가 이면 그 각도가 라디안이다.

원 한 바퀴의 둘레는 이므로 한 바퀴는 라디안이다.

각도를 도 단위에서 라디안으로 바꾸려면 한 바퀴가 서로 같다는 사실을 비율로 쓰면 된다.

각도는 오른쪽 방향에서 시작해서 반시계 방향으로 커진다고 약속한다. 그래서 은 오른쪽, 는 위쪽이다.

반대로 음수 각도는 시계 방향으로 돈다는 뜻이다. 예를 들어 는 오른쪽에서 시작해 아래쪽으로 도는 각도다. 나중에 DFT 식에서 처럼 마이너스가 붙는 이유도 이 “반대 방향 회전” 약속과 연결된다.

단위원에서는 사분면에 따라 좌표의 부호가 달라진다. 오른쪽 위인 제1사분면에서는 가 모두 양수다. 왼쪽 위인 제2사분면에서는 가로 좌표가 왼쪽이므로 이고, 세로 좌표는 위쪽이므로 이다.

축 위의 대표점도 함께 기억하자.

따라서 음수 각도라고 해서 좌표가 모두 음수가 되는 것은 아니다. 시계 방향으로 어느 사분면에 도착했는지를 보고 의 부호를 따로 판단한다.

라디안과 삼각함수의 유도

라디안은 원의 호 길이에서 나온 각도 단위다. 반지름이 인 원에서 중심각이 라디안이면, 그 각이 만드는 호의 길이 는 다음과 같다.

단위원에서는 이므로 가 된다. 그래서 한 바퀴의 호 길이 가 곧 한 바퀴 각도 라디안이 된다. FFT에서 가 반복해서 등장하는 이유는 “한 바퀴 회전”을 수식으로 쓰기 위해서다.

단위원 위의 점 를 오른쪽 축에서 만큼 회전한 위치라고 하자. 에서 축으로 수선을 내리면 직각삼각형이 생긴다. 빗변 길이가 이므로 가로 길이와 세로 길이는 각각

가 된다. 따라서 단위원 좌표는 이다. 이 정의에서 곧바로 피타고라스 항등식도 나온다.

또 원 위에서 한 바퀴 더 돌면 같은 점으로 돌아오므로, 삼각함수는 를 주기로 반복된다. 이 주기성이 DFT에서 “정수 개의 바퀴”를 검사할 수 있게 해 준다.

길이 인 샘플 묶음에서 한 바퀴를 칸으로 나누면 한 칸의 각도는

이다. 번째 칸의 각도는 이고, 이 값이 뒤에서 같은 식의 기본 재료가 된다.

직관 비유

손전등을 들고 원 위를 걷는다고 생각하자. 바닥에 생기는 그림자의 가로 위치가 , 벽에 생기는 세로 위치가 이다. 같은 움직임을 두 방향의 그림자로 나누어 보는 것이다.

예제

각도가 이면 점은 에 있다.

각도가 이면 점은 에 있다.

한 바퀴를 더 돌아도 같은 위치로 돌아온다.

자주 쓰는 각도는 미리 익혀 두면 좋다.

손풀이 체크

  1. 를 라디안으로 바꾸면 얼마일까?

    답 보기

    π3\frac{\pi}{3}

  2. 는 몇 도일까?

    답 보기

    4545^\circ

  3. 일 때 단위원 위의 점은 어느 사분면에 있을까?

    답 보기

    제1사분면. 좌표는 (32,12)\left(\frac{\sqrt{3}}{2},\frac{1}{2}\right)이다.

다음으로 이어지는 생각

점이 원 위를 계속 돌면 , 값도 반복된다. 이 반복이 다음 장의 파동으로 이어진다.

이번 장에서 기억할 3문장

  1. 단위원의 각도 θ\theta는 좌표 (cosθ,sinθ)(\cos\theta,\sin\theta)로 바뀐다.
  2. 음수 각도는 시계 방향 회전이고, 좌표의 부호는 사분면에 따라 달라진다.
  3. DFT의 회전식은 한 바퀴를 2π2\pi 라디안으로 세는 약속에서 출발한다.

C++ Practice

C++로 확인하기

각도 θ\theta를 라디안으로 바꾸고 단위원 좌표 (cosθ,sinθ)(\cos\theta,\sin\theta) 계산하기

#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\theta=30^\circ,45^\circ,90^\circ,180^\circ로 바꿔 보자.