やさいのつくりかた.

目次/第13章

13Phyllotaxis

螺旋は、描かない

phyllotaxis — 葉序・黄金角・フィボナッチ

この章の3行まとめ
  • ロマネスコやひまわりの螺旋は、螺旋を描いて作るのではありません。
  • 1個置くごとに 137.5° ずつ回すだけ。すると螺旋が勝手に見えてきます。
  • しかもその本数は 8・13・21 ……とフィボナッチ数になります。狙って作った数ではありません。

ロマネスコの写真を見ると、螺旋が右回りと左回りに走っているのが分かります。 数えると8本だったり13本だったり21本だったりします。 これをプログラムで作ろうとして、螺旋を線として描き始めると、まず失敗します。 螺旋は、作った結果として出てくるものであって、作るものではありません。

やっているのは、たった1行です。

const th = th0 + i * 2.3999632;   // i 番目の子の方位。2.3999632 rad = 137.5°
ロマネスコ.js / ブロッコリー.js / カリフラワー.js に共通して出てくる定数

1個置くたびに137.5°回す。それだけです。この角度を黄金角といいます。 植物が葉や種をつける角度で、葉序(ようじょ)と呼ばれる仕組みです。

なぜ137.5°なのか

植物にとって、あとから出る葉は先に出た葉の真上に来ると困ります。日陰になるからです。 では「いちばん重ならない角度」は何度か。 たとえば90°だと、4個置くと元に戻ってしまい、4方向にしか葉が出ません。 120°なら3方向。分数で表せる角度は、必ずどこかで重なります。

だから、いちばん分数で表しにくい数を使えばいい。 それが黄金比 φ = (1+√5)/2 で、360° ÷ φ² ≒ 137.507°。 これが「もっとも重ならない角度」になります。

螺旋の本数がフィボナッチ数になる理由

i 番目と i+m 番目が同じ方向に並んで見えるのは、 m 個ぶん回した角 m×137.5° が、ちょうど1周の整数倍に近いときです。 そういう m を小さいほうから探すと、1, 2, 3, 5, 8, 13, 21, 34 …… つまりフィボナッチ数が出てきます。 この m が、そのまま目に見える螺旋(斜列)の本数です。 下の実験で角度を少しずらすと、本数がフィボナッチ数から外れ、 同時に見た目が「植物らしくなくなる」のが分かります。

実験 — 角度をずらしてみる

137.5 から 0.5 ずらすだけで、螺旋がほどけて「腕」が見えはじめます。

球の上に均等に置く — フィボナッチ格子

同じ考え方は、球の表面に点を均等にばらまくのにも使えます。 緯度・経度で等分すると極のあたりだけ混み合います(06章のUVと同じ問題です)。 そこで、高さ方向を等間隔に切って、方位を137.5°ずつ回す。 すると、どこでも同じ密度で並びます。

// フィボナッチ球。等面積で並ぶので密度が極でも崩れない
const lz = 1 - 2 * (k + 0.5) / M;
const lr = Math.sqrt(Math.max(0, 1 - lz * lz));
const th = k * 2.3999632 + spin;
const d = vec(lr * Math.cos(th), lr * Math.sin(th), lz);
ブロッコリー.js。蕾の粒2〜4万個も、房の位置も、これで並べている

おまけ — 螺旋の格子は「まっすぐ」にできる

ロマネスコには都合のいい性質があります。 対数極座標 (x, y) = (θ/2π, ln f / ln λ) という座標に取り替えると、 葉序の格子はどの階層でも、まったく同じ形の格子になります。 螺旋が、ただの斜めの格子になるのです。 だから1枚のテクスチャを、大きさの違う何千個の円錐すべてに貼り回せます。 ロマネスコ.js が数万個の小塔を実時間で組めているのは、ここのおかげです。

つまずきポイント

粒の半径を「格子の目盛」で決めてはいけません。 黄金角の格子では、いちばん近い節点は「1つ隣」ではなく、 フィボナッチ数だけ離れた節点です。しかもその距離は5〜6目盛にもなります。 目盛を基準に「半径0.6」と決めると、粒がぽつぽつ散った点描になります。 ロマネスコ.js は、最初に最近接距離 DMIN を総当たりで求めてから、 それを基準に粒の大きさを決めています。

やってみよう
  1. 137.5°のまま「斜列を線でつなぐ」を入れて、赤・青・黄の線がどう走っているか見る。
  2. 角度を135.0°にする。螺旋がほどけて放射状の腕になることを確かめる。
  3. 置く数を40から600まで動かす。本数が 5/8/13 → 13/21/34 → 34/55/89 と、フィボナッチ数を1つずつ繰り上がっていくのを見る。
  4. ひまわり・松ぼっくり・パイナップルの写真で、螺旋の本数を数えてみる。