← ギャラリーへ

ドラゴン曲線 — 紙を折って開くと、決めていない模様が出てくる

ドラゴン曲線。前半を藍、後半を茜で塗り分けてあり、後半が前半を90度回した合同な写しであることが見える
紙を14回半分に折って開き、折り目を全部直角にしたときの紙の形(16384歩の1本道)。藍=前半/茜=後半。後半は前半を終点まわりに90°回しただけの合同な写し——自己相似が塗り分けで見える

なにか

細長い紙テープを、同じ向きに半分・半分・半分と折る。開いて折り目を全部きっちり直角にすると、紙は自分でこの形になる。折り目の山と谷の並びは自分で決めていないのに、何度やっても同じ列が出る——紙折り数列。4回折れば折り目は 2⁴−1 = 15本で、並びは必ず 110110011100100(1=山)になる。

この紙を「1歩進んで折り目のとおりに直角へ曲がる道」として読むと、上の図になる。線なのに面積を持ち(隙間なく詰まっていく)、自分自身を触るけれど横切らない。折るという身近な操作ひとつに、これだけの構造が入っていた。

同じ列に、独立な2つの道

紙を1〜5回折ったときの折り目の並びを短冊で示した図。山は上向きの藍の三角、谷は下向きの茜の三角
紙を1回・2回・3回・4回・5回折って開いたときの折り目(上から順)。▲藍=山/▼茜=谷。前の段の折り目は次の段でも同じ位置に同じ向きで残り、その隙間に新しい折り目が入る

①物理の道: もう一度折ると、列は「前の列 + 山 + 前の列を裏返して山谷を入れ替えたもの」になる。紙を開く動作そのままの再帰。

②数論の道: 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

→ ミウラ折り(同じ「紙を折る」から出る、こちらは規則正しい方)

→ 対数螺旋(自己相似のもうひとつの顔=縮んで回っても自分)

→ ペンローズ P3(置換で自己相似を作る=同じ発想でタイルを増やす)

出典

数理
紙折り数列(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本を共有している