ドラゴン曲線 — 紙を折って開くと、決めていない模様が出てくる
なにか
細長い紙テープを、同じ向きに半分・半分・半分と折る。開いて折り目を全部きっちり直角にすると、紙は自分でこの形になる。折り目の山と谷の並びは自分で決めていないのに、何度やっても同じ列が出る——紙折り数列。4回折れば折り目は 2⁴−1 = 15本で、並びは必ず 110110011100100(1=山)になる。
この紙を「1歩進んで折り目のとおりに直角へ曲がる道」として読むと、上の図になる。線なのに面積を持ち(隙間なく詰まっていく)、自分自身を触るけれど横切らない。折るという身近な操作ひとつに、これだけの構造が入っていた。
同じ列に、独立な2つの道
①物理の道: もう一度折ると、列は「前の列 + 山 + 前の列を裏返して山谷を入れ替えたもの」になる。紙を開く動作そのままの再帰。
②数論の道: k 番目の折り目だけを直接答えられる。k を 2 で割れるだけ割って残った奇数を m とすると、m mod 4 が 1 なら山、3 なら谷。折り紙のことは何も出てこない。
この2つが n=16(折り目 65535 本)まで1つも違わずに一致する。紙の物理と 2 進法の割り算が、同じ列を別々の理由で書いていた。
後半は前半の写し(整数座標で厳密に)
歩いた点の座標は全部整数になる(1歩ずつ直角に曲がるので格子から外れない)。だから自己相似を丸め誤差ゼロで検査できる: レベル n の点集合 = レベル n−1 の点集合 ∪ それを「n−1 の終点」まわりに −90° 回した写し。n=6〜16 まで集合として完全一致した(n=16 なら 36982 点)。上の図の塗り分けはこの式そのもの。
終点も閉じた式で出る。1歩を複素数で見ると全体は (1+i)ⁿ ——だから終点までの距離はちょうど (√2)ⁿ、向きは 45°×n。折るごとに √2 倍に伸びて 45° 回る、が座標の整数演算で確かめられる。
⚠️ 検査の途中で一度ひっかかった。回転を +90° で書くと、和集合の点の個数だけがぴったり一致する(190=190)のに中身は違う。「大きさが合ったから正しい」は根拠にならない——集合の中身を1点ずつ突き合わせて初めて向きが −90° だと分かった。
触るけれど、横切らない
レベル14 の道は 16384 本の辺を通るが、同じ辺を二度通ることは一度もない(16384本すべて別)。いっぽう頂点は 16385 回訪れて別々の点は 9658 個だけ——6727 回は「前に通った点にまた触っている」。触れても渡らない、という詰まり方。これが「線のまま面積を持つ」ことの中身で、同じ紙を4枚(90°ずつ回して)並べると平面が隙間なく埋まる性質につながる。
★自分で動かす
下の絵はこの場で計算している(あらかじめ描いた絵の切り替えではない)。上の図を作っているのと同じ 1 本のコード gallery/assets/dragon-live.js を、記事の中で呼んでいる。開く角を 0° から 90° へ動かすと、折りたたんだ紙が実際に開いていく。
- 折り目の数
- —
- 2つの道は一致するか
- —
- 終点
- —
- 自己相似
- —
- 整数座標との差
- —
スライダーで決めた折り回数と開く角のドラゴン曲線
塗り分けを入れると、藍=前の段そのもの・茜=それを終点まわりに 90° 回した写し。この2つを合わせると、ちょうど次の段になる。⚠️ 回すのは −90° で、+90° にすると点の個数だけが一致して中身が違う——「大きさが合ったから正しい」と早合点しかけた場所(この記事の下の注を参照)。θ を 90° 以外にすると座標は整数でなくなるので、厳密な検査はできなくなる。
どう作ったか
折り目の列は「折る再帰」と「mod 4 の式」の両方を実装して突き合わせる。曲線は列のとおりに整数格子を歩くだけ(三角関数を使わないので座標に誤差が入らない)。機械検査は11件: ①2つの道が n=1〜16 で完全一致 ②折り目の数 2ⁿ−1・辺の数 2ⁿ ③終点=(1+i)ⁿ を整数演算で ④自己相似の集合一致(n=6〜16)⑤辺の重複ゼロ=自分を横切らない ⑥頂点の重複(触れる点)を数で記録 ⑦記事のドラッグ版を偽DOMの上で実際に走らせる8項目(★開く角を19通り動かすと紙が開いていく/θ=90° のときだけ整数格子と突き合わせられる——角度で歩くと三角関数の誤差が 10⁻¹⁴ 積もるのに対し、整数で作れば誤差はゼロ)⑧出荷SVGとドラッグ版が同じ1本のコードを共有していること ⑨出荷SVG2枚。ドラッグ版の検査の実体は tools/dragon-live-test.js。
→ ミウラ折り(同じ「紙を折る」から出る、こちらは規則正しい方)
出典
- 数理
- 紙折り数列(regular paperfolding sequence, OEIS A014577)。Heighway dragon は John Heighway (1966) の発見で、Martin Gardner が Scientific American (1967) で紹介。閉じた式(m mod 4)は同数列の標準的な表示
- 生成
- generators/dragon.js(折る再帰と mod 4 の式の2実装・整数格子のタートル・自己相似の集合一致判定・短冊図と曲線図。依存ゼロ・乱数ゼロ)ドラゴン曲線の数理は gallery/assets/dragon-live.js に置き、出荷SVGの生成器と記事のドラッグ版が同じ1本を共有している