🌻 黄金角向日葵
用斐波那契螺旋在终端里种一株向日葵,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,中心会糊成一片,但外圈依然井井有条