에피사이클: 돌아가는 화살표로 그림 그리기

공간 곡선: 화살표 사슬을 3차원으로

지금까지 펜은 종이 위에 있었다. 드론 불빛 공연이 밤하늘에 그리는 자취, 철사로 꼰 매듭, 로봇 팔 끝이 지나는 자취는 공간 곡선이다. 자리가 x, y, z 세 값이라 복소수 하나에 담기지 않는다. 복소수가 평면의 화살표였으니 공간에서는 막히는 걸까, 아니면 평면에서 한 일을 그대로 공간으로 넓힐 길이 있을까?

역사: 기울인 주전원

프톨레마이오스의 체계도 평면에 머물지 않았다. 행성은 해가 지나는 길(황도)에서 조금씩 위아래로 벗어나는데, 『알마게스트』는 이 벗어남(위도)까지 다루었다. 핸슨은 「주전원 천문학의 수학적 힘」의 끝에서 이렇게 짚었다. 지금까지의 그림이 모두 평면에 있었던 것은 「기술적인 한계일 뿐」이고, 주전원이 도는 축을 기울이기만 하면 평면에 수직인 움직임도 쉽게 얻는다. 같은 증명을 조금 넓히면 유한 개의 주전원으로 점을 정육면체나 피라미드의 겉면 위로 움직이게 할 수도 있다는 것이다.

삼잎 매듭은 타원 셋

세 성분을 하나씩 따로 보자. x(t)는 실수 하나가 되풀이되는 함수라서 실수 푸리에 급수로, 다시 말해 주파수 k와 −k인 화살표 짝들로 적힌다. 실수 함수에서는 c₋ₖ가 cₖ의 켤레라서, 짝 하나는 2 Re(cₖ eikt) = aₖ cos kt + bₖ sin kt로 묶인다. y(t), z(t)도 같다. 같은 주파수 k의 세 성분을 한데 모으면 aₖ와 bₖ는 숫자가 아니라 공간의 벡터가 되고, aₖ cos kt + bₖ sin kt는 두 벡터 aₖ, bₖ가 펼치는 평면 위의 타원을 시간 2π 동안 k바퀴 돈다. 공간의 에피사이클은 기울어진 타원들의 사슬이다.

가장 유명한 매듭인 삼잎 매듭으로 해 보자. 이 매듭은 x = sin t + 2 sin 2t, y = cos t − 2 cos 2t, z = −sin 3t로 그릴 수 있다. 식에 이미 주파수 1, 2, 3만 있으므로 타원도 셋이면 끝나는데, 계산하면 다음과 같다.

주파수 k aₖ bₖ 모양
1 (0, 1, 0) (1, 0, 0) 수평면(xy 평면)의 반지름 1 원
2 (0, −2, 0) (2, 0, 0) 수평면의 반지름 2 원, 주파수 1 의 원과 반대 방향
3 (0, 0, 0) (0, 0, −1) 위아래로 1만큼 오르내리는 선분(납작한 타원)

타원 하나로 되살리면 원래 매듭과의 가장 큰 거리 오차가 1.414, 둘이면 1.000, 셋이면 0이다. 수평면의 두 원이 반대로 돌며 세 잎 모양을 그리고, 셋째 타원이 한 바퀴에 세 번 오르내리며 잎이 겹치는 곳에서 한 가닥을 위로, 다른 가닥을 아래로 보내 매듭을 만든다.

왼쪽: 삼잎 매듭(초록)과, 어느 한 시각에 세 타원의 화살표를 이어 붙인 사슬. 가운데: 매듭을 이루는 세 타원. 오른쪽: 정육면체의 모서리 여섯 개를 지나는 닫힌 길(회색)과 큰 타원 3개로 되살린 길(초록)(s5_space.py, figs.py)
왼쪽: 삼잎 매듭(초록)과, 어느 한 시각에 세 타원의 화살표를 이어 붙인 사슬. 가운데: 매듭을 이루는 세 타원. 오른쪽: 정육면체의 모서리 여섯 개를 지나는 닫힌 길(회색)과 큰 타원 3개로 되살린 길(초록)(s5_space.py, figs.py)

모서리가 있는 공간 곡선은 평면에서처럼 타원이 많이 필요하다. 핸슨이 말한 정육면체로, 한 변 2인 정육면체의 모서리 여섯 개를 지나는 닫힌 길을 같은 간격 1024점으로 뽑아 보았다. 큰 타원 1개면 원래 길과의 평균 거리 오차가 한 변의 15.08%, 3개면 2.36%, 10개면 0.35%, 30개면 0.05%다. 살아남는 주파수는 1, 3, 5, 7, … 홀수뿐이다.

곡선의 차원이 2에서 3으로 늘어도 바뀐 것은 계수 하나가 품은 숫자의 개수뿐이다. 평면에서는 주파수마다 복소수 하나였고, 공간에서는 복소수 셋, 다시 말해 실수 벡터 두 개(aₖ, bₖ)다. 이렇게 주파수마다 성분 수만큼의 숫자를 모은 것을 계수 벡터 (주파수마다 모은 성분별 계수 / vector-valued Fourier coefficient)라 하자. 곡선이 몇 차원 공간에 있든 「주파수마다 계수 벡터 하나」라는 틀은 그대로이고, 계수를 구하는 평균 내기도 성분마다 똑같다.

r(t)=a0+∑k=1∞(akcos⁡kt+bksin⁡kt),ak−i bk=1π∫02πr(t) e−ikt dt\textcolor{#1b9e77}{\mathbf{r}}(\textcolor{#a67a63}{t}) = \textcolor{#c45a00}{\mathbf{a}}_0 + \sum_{\textcolor{#0078e1}{k}=1}^{\infty}\Big(\textcolor{#c45a00}{\mathbf{a}}_{\textcolor{#0078e1}{k}}\cos \textcolor{#0078e1}{k}\textcolor{#a67a63}{t} + \textcolor{#c45a00}{\mathbf{b}}_{\textcolor{#0078e1}{k}}\sin \textcolor{#0078e1}{k}\textcolor{#a67a63}{t}\Big), \qquad \textcolor{#c45a00}{\mathbf{a}}_{\textcolor{#0078e1}{k}} - i\,\textcolor{#c45a00}{\mathbf{b}}_{\textcolor{#0078e1}{k}} = \frac{1}{\pi}\int_0^{2\pi}\textcolor{#1b9e77}{\mathbf{r}}(\textcolor{#a67a63}{t})\,e^{-i\textcolor{#0078e1}{k}\textcolor{#a67a63}{t}}\,d\textcolor{#a67a63}{t}
r(t)시각 t 의 펜 끝 자리 (공간의 벡터 (x,y,z))a0곡선의 무게중심 (돌지 않는 부분)ak, bk주파수 k 의 계수 벡터: 타원을 펼치는 두 벡터k주파수: 시간 2π 동안 타원을 도는 바퀴 수t시각. 곡선을 한 바퀴 그리는 데 2π\begin{array}{ll} \textcolor{#1b9e77}{\mathbf{r}}(\textcolor{#a67a63}{t}) & \text{시각 } t \text{ 의 펜 끝 자리 (공간의 벡터 } (x, y, z)\text{)} \\ \textcolor{#c45a00}{\mathbf{a}}_0 & \text{곡선의 무게중심 (돌지 않는 부분)} \\ \textcolor{#c45a00}{\mathbf{a}}_{\textcolor{#0078e1}{k}},\ \textcolor{#c45a00}{\mathbf{b}}_{\textcolor{#0078e1}{k}} & \text{주파수 } k \text{ 의 계수 벡터: 타원을 펼치는 두 벡터} \\ \textcolor{#0078e1}{k} & \text{주파수: 시간 } 2\pi \text{ 동안 타원을 도는 바퀴 수} \\ \textcolor{#a67a63}{t} & \text{시각. 곡선을 한 바퀴 그리는 데 } 2\pi \end{array}
직접 움직여 보기공간에서 도는 화살표 사슬새 창에서 열기 ↗

ML에서: 로봇 팔의 궤적을 계수 몇 개로

로봇 팔 끝이 1초 동안 지나는 길도 공간 곡선이다. 언어 모델처럼 토큰을 하나씩 내놓는 로봇 제어 모델은 이 궤적을 토큰으로 바꿔야 하는데, 칸마다 자리를 그대로 토큰으로 만들면 이웃한 칸끼리 값이 거의 같아 토큰이 많고 쓸모없이 겹친다. 퍼치(Karl Pertsch)와 동료들의 FAST(2025)는 궤적을 성분마다 이산 코사인 변환으로 계수로 바꾸고, 계수를 반올림한 뒤 자주 나오는 묶음을 합쳐(BPE) 토큰으로 만들었다. 부드러운 팔 동작은 느린 물결 몇 개의 계수가 크고 나머지는 작으므로 토큰 수가 크게 준다. 도는 화살표 대신 왜 굳이 코사인만의 꼴을 썼는지는 아래 문제 14와 15에서 따진다.

문제 13. 회전 그네

회전 그네의 의자는 반지름 5 m 원을 20초에 한 바퀴 시계 반대 방향으로 돌면서, 한 바퀴 동안 두 번, 가운데 높이에서 위아래로 1 m까지 오르내린다(높이 sin 2t m). (가) 의자의 자리를 타원의 사슬로 적으면 주파수마다 어떤 타원이 있는가? (나) 의자가 가장 높을 때는 출발 뒤 몇 초이고 그때 방위각은? (다) 한 바퀴에 지나는 길이는 평평한 원보다 얼마나 긴가?

김민준 M01
김민준

(가)는 수평으로 원을 도니까 주파수 1이고, 오르내림은 따로 위아래 주파수 2요. 근데 오르내림은 타원이 아니라 선분이잖아요.

선생님 T01
선생님

삼잎 매듭의 주파수 3인 타원은 어땠죠?

김민준 M07
김민준

아, 그것도 위아래 선분이었어요. 한쪽 벡터가 0인 납작한 타원이요.

이서연 S01
이서연

그럼 주파수마다 두 벡터를 적어 보면?

김민준 M01
김민준

주파수 1은 a = (5, 0, 0), b = (0, 5, 0)인 원이고, 주파수 2는 a = 0, b = (0, 0, 1)이에요.

이서연 S01
이서연

(나)는 sin 2t = 1인 2t = π/2, 5π/2니까 t = π/4, 5π/4. 20초에 2π라서 2.5초와 12.5초, 방위각 45°와 225°야.

선생님 T02
선생님

(다)는요?

이서연 S06
이서연

32.64 m예요. 평평한 원 31.42 m보다 1.22 m 길어요. 어, 생각보다 조금이네요.

김민준 M03
김민준

+1 m와 −1 m 사이를 두 번 오가면 위아래로만 8 m 움직인 건데?

이서연 S01
이서연

응, 위아래로 8 m인데 길이는 1.22 m만 늘었어. 그냥 더하면 안 되나 봐.

선생님 T01
선생님

위아래로 8 m를 움직이는 동안 옆으로는 얼마나 가죠?

이서연 S07
이서연

31 m쯤이요. 아, 위아래 8 m를 옆으로 가는 31 m에 나눠 실으니까 길이 조금씩만 비스듬해지는 거예요.

김민준 M11
김민준

회전 그네 탈 때 위아래로 움직이는 게 별로 안 크게 느껴지던 게 이거였네요.

문제 14. 닫히지 않은 나선

한 바퀴 돌며 1만큼 오르는 나선 x = cos t, y = sin t, z = t/2π (0 ≤ t < 2π) 를 같은 방법으로 타원 사슬로 적는다. (가) z 성분의 화살표 길이 |ck| 는 k = 1, 2, 3, … 에서 어떻게 줄어드는가? (나) 타원 3개, 10개, 30개로 되살린 z 와 원래 z 의 가장 큰 차이는? (다) 이 나선에서 무엇이 「닫힌 곡선」이라는 조건을 어겼고, 어떻게 하면 계수가 빨리 줄게 할 수 있는가?

김민준 M01
김민준

z = t/2π는 그냥 직선인데요. 화살표는 하나만 있으면 되겠죠.

선생님 T01
선생님

급수는 곡선이 시간 2π마다 되풀이된다고 봐요. z를 2π 너머까지 되풀이해 그리면 어떤 모양이죠?

김민준 M04
김민준

0에서 1까지 오르고 다시 0으로 뚝 떨어지고… 톱니 모양이에요. 끝에서 끊기네요.

선생님 T01
선생님

끊긴 곳이 있으면 화살표가 몇 개나 필요할까요?

김민준 M01
김민준

많이 필요하겠죠. 계산하면 |ck|가 0.1592, 0.0796, 0.0531로 1/(2πk)예요. 1/k로밖에 안 줘요.

이서연 S01
이서연

(나)는 타원 3개, 10개, 30개에서 원래 z와의 가장 큰 차이가 0.497, 0.490, 0.470이야. 타원을 늘려도 거의 안 줄어.

김민준 M03
김민준

곡선 전체가 다 그렇게 안 맞아?

이서연 S01
이서연

아니, 가운데 절반에서는 0.056, 0.019, 0.007로 잘 줄어드는데, 끊긴 곳 근처에서 되살린 z가 0과 1의 중간쯤을 지나가 버려. 30개일 때 되살린 z의 가장 큰 값은 1.073이라 끝에서 넘치기도 하고.

선생님 T13
선생님

그래요. 「닫힌」이라는 조건을 빼면 끝과 처음 사이가 끊긴 곡선이 되고, 끊긴 곳은 계수를 1/k로 느리게 만들어요. (다)는요?

이서연 S01
이서연

끊긴 데를 없애면 되겠네요. 처음과 끝을 잇는 직선, 여기서는 z = t/2π 자체를 먼저 빼 보면… 남는 값이 0이에요. 끊긴 데가 없어요.

김민준 M01
김민준

뺀 직선은 어떻게 해?

이서연 S08
이서연

직선 하나는 따로 적고 나머지만 급수로 펼치면 돼. 아니면 구간을 거울에 비춰 이어 붙여서 되풀이해도 끊기지 않게 할 수 있고.

김민준 M08
김민준

반복 재생하는 짧은 영상도 마지막 장면에서 첫 장면으로 넘어갈 때 툭 튀면 어색하잖아요. 그 튀는 곳을 없애려면 처음과 끝을 맞춰야 하고요.

문제 15. 로봇 팔 궤적을 계수 몇 개로

로봇 팔 끝이 1초 동안 앞으로 30 cm, 옆으로 살짝 비켜 갔다 돌아오고, 위로 5 cm 오르면서 가운데에서 8 cm 들린다. 이 궤적을 50칸으로 적고 성분마다 계수를 몇 개만 남긴다. (가) 복소 푸리에 급수에서 주파수 0…3 만 남기면(성분마다 실수 7개) 원래 궤적과의 가장 큰 거리 오차는 몇 cm인가? 주파수 0…6 이면? (나) 코사인만으로 적는 이산 코사인 변환에서 계수 4개, 7개를 남기면? (다) 왜 차이가 나는가? FAST 가 코사인 꼴을 고른 이유와 이어서 말하라.

김민준 M01
김민준

(가)는 주파수 0…3이면 가장 큰 거리 오차가 12.90 cm, 0…6이면 11.10 cm요. 계수를 거의 두 배로 늘렸는데 별로 안 나아져요.

이서연 S01
이서연

(나)는 코사인 계수 4개면 1.66 cm, 7개면 0.62 cm야. 숫자는 더 적게 쓰는데 훨씬 잘 맞아.

선생님 T02
선생님

처음 칸과 끝 칸의 자리를 봐요.

김민준 M05
김민준

처음은 (0, 0.01, 0.3) cm, 끝은 (30, 0.01, 5.2) cm예요. 앞으로 30 cm 갔으니까 처음과 끝이 안 맞아요. 문제 14의 닫히지 않은 나선이랑 같아요.

이서연 S01
이서연

그럼 복소 푸리에 급수한테는 끝에서 처음으로 30 cm 뚝 떨어지는 톱니로 보이겠네.

김민준 M07
김민준

그래서 계수가 느리게 줄었구나.

선생님 T01
선생님

그런데 코사인 꼴은 같은 궤적에서 잘 맞았어요. 나선 문제에서 끊긴 곳을 없애는 방법이 두 가지 나왔죠?

이서연 S07
이서연

직선 빼기하고 거울 비추기요. 아, 코사인 꼴은 구간을 거울에 비춰 이어 붙인 것처럼 되풀이하니까 끝과 처음이 끊기지 않는 거예요. 거울 비추기를 변환이 알아서 해 주는 거네요.

김민준 M01
김민준

로봇 팔 동작 한 토막은 처음과 끝이 다른 게 보통이니까 FAST가 코사인 꼴을 고른 거고요.

선생님 T13
선생님

그래요. 계수가 빨리 줄면 남길 숫자가 적고, 남길 숫자가 적으면 토큰도 적어요. 닫힌 곡선이면 도는 화살표가, 열린 구간이면 코사인이 그 일을 잘해요.

김민준 M11
김민준

실험 보고서 그래프를 그릴 때 양 끝이 안 맞는 데이터에 주기 함수를 억지로 맞추면 끝이 출렁이던 게 이거였어요.