Game ← Back
回る円で、字を書く
COLUMN 1 / 2
回る円をつないだ鎖の先が、横書きの「ありがとう」を書いているところ

回る円で、字を書く ― フーリエ級数のしくみを、1 文字から順番に

601 個の回る円で「ありがとう」を書いた映像の裏側を、好きな 1 文字で確かめながら分解します。文字の選び方と筆順データ、級数に分けて円の半径と速さが決まるしくみ、そして円を回すと字が書けるわけまで、順番に。


601 個の回る円だけで「ありがとう」を書く映像をつくりました。円が回るたびに、書き順どおりに字が現れていきます。なぜ、ただ回っているだけの円で、字が書けるのでしょう。

このコラムでは、そのしくみを 3 つの段階に分けて、順番に見ていきます。

  1. 字を 1 つ選び、ペン先の通り道を取り出す
  2. 点の並びから、円(半径と速さ)を取り出す
  3. 円を回して、字を書く

このページの図は、すべてこのページの中で実際に計算しています。下で好きな字を選ぶと、ページの図がすべてその字に変わります。

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 つの数を持っています。

線を点に分けたところ(見やすいように 4 個に 1 個だけ表示)。光っている点の座標を右上に出しています。

1-3画と画をつないで、1 周の輪にする

一画を書き終えたら、筆を上げて次の画の書き始めへ移ります。この「筆を上げた移動」も道としてつなぎ、最後の画からは 1 画目の書き始めへ戻します。すると、字全体がひと続きの輪になります。

移動の区間は線を書かないので、3 倍の速さで通らせています(そのぶん点も少なくなります)。

点線が筆を上げた移動。光る点が輪を 1 周します。左上の t は、1 周を 1 としたときの時刻です。

輪を 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θ = cos θ + i sin θ

eiθ は、長さ 1 の矢印を角度 θ だけ回したものです。ある数に eiθ を掛けると、その矢印は長さを変えずに θ だけ回ります。このあと出てくる「円を回す」計算は、すべてこの掛け算です。

02点の並びから、円を取り出す

ここがいちばんの山場です。永 の輪は、いまはただの点の並び(2,048 個)です。この点の並びから、「どの速さの円が、どれくらいの大きさで入っているか」を取り出します。小さな段に分けて、ゆっくり進みます。

2-1回る矢印 1 本

c · e2πint

時刻 t が 0 から 1 まで進むあいだに、この矢印は n 回まわります。1 本の矢印は、次の 3 つで決まります。

  • 半径 = |c|(c の大きさ)
  • はじめの向き = c の角度
  • 速さ = n(1 周のあいだに回る回数)。n がプラスなら時計回り、マイナスなら反時計回り、0 なら回りません(この画面では縦の座標が下向きのため、時計回りになります)
速さの違う矢印。n = 2 は、n = 1 が 1 回まわるあいだに 2 回まわります。

2-2円を足すと、形ができる

まず、やさしい向きから見てみます。回る矢印を、根元から順につないでいきます。1 本目の先に 2 本目の根元を付け、2 本目の先に 3 本目を付ける……。いちばん先の点を、このページではペン先と呼びます。ペン先が 1 周のあいだに通った道が、描かれる形です。

円 1 つなら、ペン先は円を描くだけ。速さの違う円を足すたびに、形が変わっていきます。
f(t) = Σ cn e2πint

これがフーリエ級数です。速さ n はすべて整数なので、1 周(t = 1)たつと、どの矢印も元の向きに戻ります。だから、1 周で元に戻る輪なら、どんな形でも、円をうまく選べばこの足し算で描けます。

ここからが本題です。上の図は「円 → 形」でした。やりたいのはその逆、形(点の並び) → 円です。永 を描くには、どの速さの円を、どの大きさ・どの向きで足せばいいのでしょう。

円を試しに足したり引いたりして、形に合わせていくのではありません。速さを 1 つ決めると、その速さの円の大きさと向きを、点の並びから直接「測る」方法があります。使う道具は 2 つだけ、「平均」と「回るカメラ」です。

2-3道具 1:平均 ― 全部の点の平均は「真ん中」

点の位置を全部足して、点の数で割ります(横の位置は横どうし、縦の位置は縦どうし)。これが平均です。平均は、その図形のつり合いの点、重心になります。

点を 1 個ずつ足しながら、そこまでの平均を青い点で示しています。最後は重心(点線の輪)に落ち着きます。

この重心は、回らない矢印(速さ n = 0)の先にあたります。円の鎖の根元は、ここに置かれています。1 つ目の答えは、平均をとるだけで出ました。

2-4平均の大事な性質 ― ぐるぐる回る動きは、平均すると消える

犬の散歩を思い浮かべてください。飼い主は立ち止まっていて、犬はそのまわりをぐるぐる走り回っています。犬がいた場所を、1 周ぶん全部平均すると、どこになるでしょう。

白い点が犬、青い点が「ここまでに犬がいた場所の平均」。1 周すると、平均は飼い主の位置にぴたりと戻ります。

答えは、飼い主の位置です。右にいた時間と左にいた時間、上にいた時間と下にいた時間が、ちょうど同じだけあるので、平均すると打ち消し合います。犬が小さな輪を描きながら回っていても同じです。1 周の平均には、止まっているもの(飼い主)だけが残ります。

2-5道具 2:回るカメラで見る

次は、カメラを回します。調べたい速さ n と同じ速さで、カメラを回しながら絵を見るのです。メリーゴーランドに乗ると、同じ台の馬は止まって見え、まわりの景色が回って見えます。それと同じことが起きます。

左(上)がふつうに見た絵、右(下)が回るカメラで見た絵。光っている矢印が、カメラと同じ速さの円です。ボタンで、この字の大きい円を選べます。

光っている矢印は、左ではほかの矢印と一緒に回っていますが、右では止まって見えます。ほかの矢印は、カメラと速さが違うので、右でも回り続けます。

右の白い線は、回るカメラで見たときのペン先の道です。ペン先は左と同じ点ですが、カメラが回っているので、ぐるぐると渦を巻いたような道になります(カメラを回すのは、絵全体を逆向きに回すのと同じことです)。

2-62 つの道具を合わせる ― 回るカメラで見たペン先を、1 周ぶん平均する

右の絵をよく見ると、犬の散歩と同じ形になっています。

  • 飼い主 = 止まった矢印の先。ここが知りたい場所です(まだ、どこにあるかわかりません)
  • 犬 = 回るカメラで見たペン先。ほかの円がぐるぐる回るので、止まった矢印の先のまわりを動き回ります

だから、ペン先の位置を 1 周ぶん平均すれば、ぐるぐるは消えて、止まった矢印の先だけが残ります。

回るカメラで見た絵。白い線がペン先の道、青い点が「ここまでのペン先の平均」。1 周すると、平均は止まった矢印の先(点線の輪)に着きます。

平均の点が着いた場所が答えです。根元(重心)からその点までの長さが、その円の半径、向きが、その円のはじめの向きです。

大事なのは、白い道の形そのものは使っていないことです。使うのは、その道の「平均の位置」だけです。白い道がどんなにぐちゃぐちゃでも、平均の点は、決まった場所へ向かっていきます。

2-7答えのわかっている形で、確かめる

本当にこれで円が取り出せるのか、答えを知っている形で確かめてみます。下の形は、3 つの円(速さ +1・−2・+4)を足して作りました。この形の点の並びだけを使って、速さ −6 から +6 まで、順番に「回るカメラで見て、平均」をしてみます。

左(上):回るカメラで見たペン先の道と、その平均(青い点)。右(下):取り出した円の半径(棒)と、形を作るのに使った円の半径(点線の枠)。

棒が立つのは、作るのに使った 3 つの速さだけです。高さ(半径)も、作るのに使った大きさとぴったり同じになります。ほかの速さでは、平均の点は根元に戻ってきて、棒は 0 です。この形の中に、その速さの円は入っていないからです。

2-8選んだ字でやってみる

同じことを、選んだ字の点の並びでやります。速さを 1 つずつ変えながら、そのたびに「回るカメラで見て、平均」をして、結果の矢印(根元から平均の点まで)を記録していきます。

上:いま調べている速さの円(根元から伸びる白い矢印と、その半径の輪)。下:調べ終わった速さの円の半径(横が速さ n、まん中が 0。見やすいように平方根の目盛り)。

今度は、たくさんの速さに棒が立ちます。字の形は、たくさんの円が混ざってできているからです。取り出した円を、大きい順に並べるとこうなります。

順位速さ n1 周のあいだに
(↻ 時計回り ↺ 反時計回り)
半径
(字の大きさに対して)
はじめの向き

どの字でも、ゆっくり回る円ほど大きく、速い円ほど小さくなります。字の大まかな位置と形はゆっくりの大きな円が、角や細かな曲がりは速く小さな円が受け持ちます。こうして取り出した円を、大きい順につないで回したのが、00 の図です。

角や、筆を上げた移動の折れ目のように、向きが急に変わるところがあると、速い円がたくさん必要になります。このページで画数の多い字ほど円を増やしている(最大 1,201 個)のは、そのためです。

2-9式で書くと

ここまでの手順を式で書くと、次の 1 行になります。

cn = (1/M) Σk=0M−1 fk e−2πink/M
  • fk … k 番目の点の位置(k = 0, 1, …, M−1)
  • e−2πink/M … その点を、速さ n の回るカメラで見る(絵を逆向きに回す)
  • (1/M) Σ … 全部足して、点の数で割る = 平均

これが離散フーリエ変換です。点の数を限りなく増やした形で書くと、積分になります。

cn = ∫01 f(t) e−2πint dt

「犬のぐるぐるは平均で消える」ことも、式で確かめられます。速さ m の円を、速さ n の回るカメラで見ると、速さ m−n で回って見えます。m ≠ n なら回り続けるので、1 周の平均は 0 になります。

(1/M) Σk e2πi(m−n)k/M = 1 (m = n), 0 (m ≠ n)

この性質を直交性と呼びます。このおかげで、ほかの円に邪魔されずに、1 つの速さの円だけを取り出せるのです。

2-10計算は、一瞬で終わる

M 個の点から全部の cn を式のとおりに求めると、M × M 回ほどの掛け算が要ります。高速フーリエ変換(FFT)という工夫を使うと、M × log2M 回ほどで済みます。点が 4,096 個なら、約 1,700 万回が約 5 万回になります。

あなたの端末では、この字の計算に — ミリ秒かかりました(筆順の線を点に分けるところから、全部の円が決まるまで)。

03円を回して、字を書く

3-1時刻を少しずつ進める

アニメーションでは、1 コマごとに時刻 t を少しだけ進めます。速さ n の矢印の角度は、「はじめの向き + 2πnt」。全部の矢印をつないだ先が、その時刻のペン先です。

f(t) = c0 + c1e2πi n₁t + c2e2πi n₂t + …
左上は時刻 t。止めて 1 コマずつ進めると、すべての円が、それぞれの速さで少しずつ回るのがわかります。

3-2大きい円から順につなぐ

足し算は順番を入れ替えても答えが同じです。だから、ペン先の位置は、どの順に円をつないでも変わりません。それでも大きい円から順につなぐのは、そのほうが見やすいからです。根元の近くで大きな円がゆったり回り、先へ行くほど小さな円が細かく回る、という並びになります。

3-3円の数で、形はどう変わるか

大きい順に、この数だけの円で 1 周したときの道(うすい線が元の筆順の線)。

円が数個では、ぼんやりした輪にしかなりません。数十個で字と読めるようになり、数百個で元の線とほとんど重なります。

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)。
図はすべて、このページの中(あなたのブラウザ)で計算しています。