🌻 黄金角向日葵

用斐波那契螺旋在终端里种一株向日葵,30 行 Python 搞定。

玩法

python3 content/code/fibonacci_sunflower.py

每颗种子的位置只有两条规则:

  • 半径 r = c·√n —— 越往外越稀疏,但永远填不满
  • 角度 θ = n × 137.5° —— 这个角度就是著名的黄金角

为什么是 137.5°?

137.5° = 360° × (1 − 1/φ),φ 是黄金比例。它是最”无理”的角度:任何有理数角度都会让种子排成整齐的直线,互相遮挡;而黄金角保证相邻两颗种子之间的夹角永远错开,谁也不会挡住谁的光。

向日葵花盘、松果鳞片、菠萝的六边形突起,全是这套算法在自然界里的实现——植物不懂数学,但亿万年进化让它们学会了最优解。

实际输出(300 颗种子)

                           .  . .
                        ..  .  . . . .
                      . .  ...  . .. .
                         ..  ..  .. .  .
                    .. ..   .  .      ..
                    . .  . o oo o. .. .  .
                   .   . .    o  o o.  .
                  . .. .o o oo  o     .. . .
                 .   .o   oo o o o oo.   ..
                  . .   o  o  o o oo o .  .
                 .  ..o o o o  o o    o .   .
                . .    o  o o @  @o oo . . .
                 .  .o   o   @ @  o o o . .
                .  .. o o o@  @ @@   o o .  .
                  ..   o o@ @ @    oo o .  .
                 ..  o  oo  @@ @@ oo o o  . .
                ..  . o o  o @   @o    . . .
                   . oo  o  @  @   oo o  ..
                 .. .   oo oo o oo   oo . . .
                . . .. o   o o oo oo o  ..
                   . .  o o o o    o  .   . .
                  .  .. oo o o  oo   o. ..
                   .  .     o  o o o.     .
                   . .  .. o  o o .   ...
                     .. . .. . . . . .. .
                      . .   ..  . . .
                       .  .  ..  .   ..
                         . .  ..  . .
                          . .  . ..

中心是密实的 @,向外扩散成螺旋的 o 臂,边缘是零星的 .——两条规则,一株向日葵。

还能怎么玩

  • c 调大,花盘会更大;调小则更紧凑
  • 把黄金角换成 137.4° 或 137.6°,螺旋臂立刻变成整齐的放射线——试试就知道大自然有多挑剔
  • 加大种子数到 1000,中心会糊成一片,但外圈依然井井有条

相关