回る円で、字を書く ― フーリエ級数のしくみを、1 文字から順番に
601 個の回る円で「ありがとう」を書いた映像の裏側を、好きな 1 文字で確かめながら分解します。文字の選び方と筆順データ、級数に分けて円の半径と速さが決まるしくみ、そして円を回すと字が書けるわけまで、順番に。
601 個の回る円だけで「ありがとう」を書く映像をつくりました。円が回るたびに、書き順どおりに字が現れていきます。なぜ、ただ回っているだけの円で、字が書けるのでしょう。
このコラムでは、そのしくみを 3 つの段階に分けて、順番に見ていきます。
- 字を 1 つ選び、ペン先の通り道を取り出す
- 点の並びから、円(半径と速さ)を取り出す
- 円を回して、字を書く
このページの図は、すべてこのページの中で実際に計算しています。下で好きな字を選ぶと、ページの図がすべてその字に変わります。
00好きな字を選ぶ
書ける字は 6,703 字です。常用漢字・JIS 第 1・第 2 水準の漢字すべてと、ひらがな・カタカナ・英数字が入っています。名前に使う「髙」「﨑」「𠮷」のような字は、筆順データがまだ無いため書けません。
01字から、ペン先の通り道を取り出す
1-1使うのは「見た目」ではなく「書き順」
パソコンの文字(フォント)は、太さのある「輪郭の形」として作られています。けれど、回る円で書くのに必要なのは形ではありません。どこから書き始めて、筆がどう動いたかです。
そこで、KanjiVG という筆順データを使います。KanjiVG には、6,703 字について、一画ずつ筆の中心が通る線が、書き順どおりに入っています。
中身は数字です。たとえば 永 の 1 画目は、データの中で次のように書かれています。
…
M は「ここから書き始める」、c は「なめらかな曲線(3 次ベジェ曲線)でここまで」という意味です。数字は、縦横 109 のマス目の上の座標です。1 画は、こうした短い曲線のつながりとして書かれています。
1-2線を、細かい点に分ける
計算しやすいように、線を同じ間隔の点に分けます。この字では 2,048 個です(6 画以上の字は 4,096 個にしています)。点の一つひとつは、横の位置 x と縦の位置 y、2 つの数を持っています。
1-3画と画をつないで、1 周の輪にする
一画を書き終えたら、筆を上げて次の画の書き始めへ移ります。この「筆を上げた移動」も道としてつなぎ、最後の画からは 1 画目の書き始めへ戻します。すると、字全体がひと続きの輪になります。
移動の区間は線を書かないので、3 倍の速さで通らせています(そのぶん点も少なくなります)。
輪を 1 周する時間を 1 として、時刻 t(0 ≦ t < 1)にペン先がいる場所を f(t) と書くことにします。1 周すると、f(1) は f(0) に戻ります。この「1 周したら元に戻る」ことが、次の章のフーリエ級数にとって大切です。
1-4平面の点を、1 つの数で表す
点 (x, y) を、x + i y という 1 つの数(複素数)で表します。i は、2 乗すると −1 になる数です。こう書くと、「回す」という動きが掛け算 1 回で書けるようになります。
eiθ は、長さ 1 の矢印を角度 θ だけ回したものです。ある数に eiθ を掛けると、その矢印は長さを変えずに θ だけ回ります。このあと出てくる「円を回す」計算は、すべてこの掛け算です。
02点の並びから、円を取り出す
ここがいちばんの山場です。永 の輪は、いまはただの点の並び(2,048 個)です。この点の並びから、「どの速さの円が、どれくらいの大きさで入っているか」を取り出します。小さな段に分けて、ゆっくり進みます。
2-1回る矢印 1 本
時刻 t が 0 から 1 まで進むあいだに、この矢印は n 回まわります。1 本の矢印は、次の 3 つで決まります。
- 半径 = |c|(c の大きさ)
- はじめの向き = c の角度
- 速さ = n(1 周のあいだに回る回数)。n がプラスなら時計回り、マイナスなら反時計回り、0 なら回りません(この画面では縦の座標が下向きのため、時計回りになります)
2-2円を足すと、形ができる
まず、やさしい向きから見てみます。回る矢印を、根元から順につないでいきます。1 本目の先に 2 本目の根元を付け、2 本目の先に 3 本目を付ける……。いちばん先の点を、このページではペン先と呼びます。ペン先が 1 周のあいだに通った道が、描かれる形です。
これがフーリエ級数です。速さ n はすべて整数なので、1 周(t = 1)たつと、どの矢印も元の向きに戻ります。だから、1 周で元に戻る輪なら、どんな形でも、円をうまく選べばこの足し算で描けます。
ここからが本題です。上の図は「円 → 形」でした。やりたいのはその逆、形(点の並び) → 円です。永 を描くには、どの速さの円を、どの大きさ・どの向きで足せばいいのでしょう。
円を試しに足したり引いたりして、形に合わせていくのではありません。速さを 1 つ決めると、その速さの円の大きさと向きを、点の並びから直接「測る」方法があります。使う道具は 2 つだけ、「平均」と「回るカメラ」です。
2-3道具 1:平均 ― 全部の点の平均は「真ん中」
点の位置を全部足して、点の数で割ります(横の位置は横どうし、縦の位置は縦どうし)。これが平均です。平均は、その図形のつり合いの点、重心になります。
この重心は、回らない矢印(速さ n = 0)の先にあたります。円の鎖の根元は、ここに置かれています。1 つ目の答えは、平均をとるだけで出ました。
2-4平均の大事な性質 ― ぐるぐる回る動きは、平均すると消える
犬の散歩を思い浮かべてください。飼い主は立ち止まっていて、犬はそのまわりをぐるぐる走り回っています。犬がいた場所を、1 周ぶん全部平均すると、どこになるでしょう。
答えは、飼い主の位置です。右にいた時間と左にいた時間、上にいた時間と下にいた時間が、ちょうど同じだけあるので、平均すると打ち消し合います。犬が小さな輪を描きながら回っていても同じです。1 周の平均には、止まっているもの(飼い主)だけが残ります。
2-5道具 2:回るカメラで見る
次は、カメラを回します。調べたい速さ n と同じ速さで、カメラを回しながら絵を見るのです。メリーゴーランドに乗ると、同じ台の馬は止まって見え、まわりの景色が回って見えます。それと同じことが起きます。
光っている矢印は、左ではほかの矢印と一緒に回っていますが、右では止まって見えます。ほかの矢印は、カメラと速さが違うので、右でも回り続けます。
右の白い線は、回るカメラで見たときのペン先の道です。ペン先は左と同じ点ですが、カメラが回っているので、ぐるぐると渦を巻いたような道になります(カメラを回すのは、絵全体を逆向きに回すのと同じことです)。
2-62 つの道具を合わせる ― 回るカメラで見たペン先を、1 周ぶん平均する
右の絵をよく見ると、犬の散歩と同じ形になっています。
- 飼い主 = 止まった矢印の先。ここが知りたい場所です(まだ、どこにあるかわかりません)
- 犬 = 回るカメラで見たペン先。ほかの円がぐるぐる回るので、止まった矢印の先のまわりを動き回ります
だから、ペン先の位置を 1 周ぶん平均すれば、ぐるぐるは消えて、止まった矢印の先だけが残ります。
平均の点が着いた場所が答えです。根元(重心)からその点までの長さが、その円の半径、向きが、その円のはじめの向きです。
大事なのは、白い道の形そのものは使っていないことです。使うのは、その道の「平均の位置」だけです。白い道がどんなにぐちゃぐちゃでも、平均の点は、決まった場所へ向かっていきます。
2-7答えのわかっている形で、確かめる
本当にこれで円が取り出せるのか、答えを知っている形で確かめてみます。下の形は、3 つの円(速さ +1・−2・+4)を足して作りました。この形の点の並びだけを使って、速さ −6 から +6 まで、順番に「回るカメラで見て、平均」をしてみます。
棒が立つのは、作るのに使った 3 つの速さだけです。高さ(半径)も、作るのに使った大きさとぴったり同じになります。ほかの速さでは、平均の点は根元に戻ってきて、棒は 0 です。この形の中に、その速さの円は入っていないからです。
2-8選んだ字でやってみる
同じことを、選んだ字の点の並びでやります。速さを 1 つずつ変えながら、そのたびに「回るカメラで見て、平均」をして、結果の矢印(根元から平均の点まで)を記録していきます。
今度は、たくさんの速さに棒が立ちます。字の形は、たくさんの円が混ざってできているからです。取り出した円を、大きい順に並べるとこうなります。
| 順位 | 速さ n | 1 周のあいだに (↻ 時計回り ↺ 反時計回り) | 半径 (字の大きさに対して) | はじめの向き |
|---|
どの字でも、ゆっくり回る円ほど大きく、速い円ほど小さくなります。字の大まかな位置と形はゆっくりの大きな円が、角や細かな曲がりは速く小さな円が受け持ちます。こうして取り出した円を、大きい順につないで回したのが、00 の図です。
角や、筆を上げた移動の折れ目のように、向きが急に変わるところがあると、速い円がたくさん必要になります。このページで画数の多い字ほど円を増やしている(最大 1,201 個)のは、そのためです。
2-9式で書くと
ここまでの手順を式で書くと、次の 1 行になります。
- fk … k 番目の点の位置(k = 0, 1, …, M−1)
- e−2πink/M … その点を、速さ n の回るカメラで見る(絵を逆向きに回す)
- (1/M) Σ … 全部足して、点の数で割る = 平均
これが離散フーリエ変換です。点の数を限りなく増やした形で書くと、積分になります。
「犬のぐるぐるは平均で消える」ことも、式で確かめられます。速さ m の円を、速さ n の回るカメラで見ると、速さ m−n で回って見えます。m ≠ n なら回り続けるので、1 周の平均は 0 になります。
この性質を直交性と呼びます。このおかげで、ほかの円に邪魔されずに、1 つの速さの円だけを取り出せるのです。
2-10計算は、一瞬で終わる
M 個の点から全部の cn を式のとおりに求めると、M × M 回ほどの掛け算が要ります。高速フーリエ変換(FFT)という工夫を使うと、M × log2M 回ほどで済みます。点が 4,096 個なら、約 1,700 万回が約 5 万回になります。
あなたの端末では、この字の計算に — ミリ秒かかりました(筆順の線を点に分けるところから、全部の円が決まるまで)。
03円を回して、字を書く
3-1時刻を少しずつ進める
アニメーションでは、1 コマごとに時刻 t を少しだけ進めます。速さ n の矢印の角度は、「はじめの向き + 2πnt」。全部の矢印をつないだ先が、その時刻のペン先です。
3-2大きい円から順につなぐ
足し算は順番を入れ替えても答えが同じです。だから、ペン先の位置は、どの順に円をつないでも変わりません。それでも大きい円から順につなぐのは、そのほうが見やすいからです。根元の近くで大きな円がゆったり回り、先へ行くほど小さな円が細かく回る、という並びになります。
3-3円の数で、形はどう変わるか
円が数個では、ぼんやりした輪にしかなりません。数十個で字と読めるようになり、数百個で元の線とほとんど重なります。
3-4インクは、筆を下ろしている間だけ
円の鎖は、筆を上げた移動の区間も止まらずに回り続けています。字が画ごとに離れて見えるのは、その区間でだけインクを付けていないからです。3-1 の図で「見えない移動も表示」を押すと、本当は 1 本につながった道を書いていることがわかります。
3-51 周で、書き終わる
速さ n がすべて整数なので、t = 1 で全部の円が元の向きに戻り、ペン先は書き始めの位置に帰ってきます。
映像の「ありがとう」は、5 文字 14 画を 1 周の輪にし、8,194 個の点から 601 個の円(速さ −300 〜 +300)を求めて、38 秒の映像にしました。元の線とのずれは、画面の上で 0.1 ピクセル足らずです。
—おわりに
フーリエがこの考え方を発表したのは 1807 年、熱の伝わり方を調べる研究の中でした。いまでは、音楽や写真の圧縮、病院の MRI、通信など、身のまわりのあちこちで使われています。
どんなに複雑に見える形も、分けてみれば、一つひとつは単純な回転の重なりです。わからないと感じるものも、こうして順番に分けていけば、きっとわかる形になる。好きな字で、ぜひ確かめてみてください。
ここまで読んでくださった方へ。この技術を 3 次元に広げるとできることと、現実の世界での使われ方を、次のページにまとめました。
筆順データ: KanjiVG(© Ulrich Apel, CC BY-SA 3.0、r20260714)。このページでは筆順の線だけを JSON にまとめて使っています(同じ条件で公開しています: LICENSE)。
図はすべて、このページの中(あなたのブラウザ)で計算しています。