Pythonで描く葉序(ようじょ)パターン ― フィボナッチ螺旋の美しさをコードで再現
葉序パターンとは?
植物学の授業や植物の世界でよく耳にする「葉序(ようじょ)」とは、植物の茎に花・葉・種子などがどのような順序で配置されるかを表す用語です。この配置は、いわゆる「フィボナッチ螺旋」と非常によく似たパターンを示します。
フィボナッチ螺旋は、パスカルの三角形にも似た規則性を持つ数列、すなわちフィボナッチ数列に基づいています。フィボナッチ数列は次のように続きます。
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 …
この数列の特徴は、各項が直前の2つの数の和になっているという点です。自然界のあらゆる場所に潜む、シンプルながら奥深い数理構造と言えます。
フィボナッチ螺旋と私たちの視覚
人間は、周囲の物体を理解するとき、無意識のうちに対称性やパターンを探しています。そのため、私たちの目は気づかぬままフィボナッチ数列を捉え、例えばヒマワリの花であれば、その種の並びをフィボナッチ螺旋として認識しているのです。
実行結果のイメージ


ヒマワリの螺旋パターン
サンプルコード
以下は、Python標準ライブラリの turtle モジュールを使って葉序パターンを描画するサンプルコードです。math モジュールと組み合わせ、黄金角(約137.508度)に基づいて円を螺旋状に配置していきます。
import math
import turtle
def PhyllotacticPattern( t, petalstart, angle = 137.508, size = 2, cspread = 4 ):
"""print a pattern of circles using spiral phyllotactic data"""
# initialize position
turtle.pen(outline=1,pencolor="black",fillcolor="orange")
# turtle.color("orange")
phi = angle * ( math.pi / 180.0 )
xcenter = 0.0
ycenter = 0.0
# for loops iterate in this case from the first value until < 4, so
for n in range (0,t):
r = cspread * math.sqrt(n)
theta = n * phi
x = r * math.cos(theta) + xcenter
y = r * math.sin(theta) + ycenter
# move the turtle to that position and draw
turtle.up()
turtle.setpos(x,y)
turtle.down()
# orient the turtle correctly
turtle.setheading(n * angle)
if n > petalstart-1:
#turtle.color("yellow")
drawPetal(x,y)
else: turtle.stamp()
def drawPetal( x, y ):
turtle.up()
turtle.setpos(x,y)
turtle.down()
turtle.begin_fill()
#turtle.fill(True)
turtle.pen(outline=1,pencolor="black",fillcolor="yellow")
turtle.right(25)
turtle.forward(100)
turtle.left(45)
turtle.forward(100)
turtle.left(140)
turtle.forward(100)
turtle.left(45)
turtle.forward(100)
turtle.up()
turtle.end_fill() # this is needed to complete the last petal
turtle.shape("turtle")
turtle.speed(0) # make the turtle go as fast as possible
PhyllotacticPattern( 200, 160, 137.508, 4, 10 )
turtle.exitonclick() # lets you x out of the window when outside of idle
コードのポイント
- 黄金角(137.508度):各要素を回転させながら配置する角度です。この角度を使うことで、点同士が重ならず均等に分散した美しい螺旋が生まれます。
- r = cspread * sqrt(n):中心からの距離を平方根で増加させることで、自然な葉序配置を再現します。
- drawPetal関数:一定数以上の要素からは円ではなく花びらを描画し、ヒマワリらしい見た目を作り出します。
アレンジ例

上記のプログラムに少し手を加えるだけで、出力結果は次のように変化します。色をカスタマイズしたり、角度や間隔などの値を調整したりすることで、さまざまなバリエーションを楽しむことができます。

ぜひ、自分好みのパラメータを試して、自然界にひそむフィボナッチの美しさをPythonで体感してみてください。
-
Pythonでパターンを出力する方法|三角形・数字・アルファベット・ピラミッドのコード例
Pythonでパターンを出力するには、ネストされた(入れ子構造の)forループを使用します。外側のループで行数を制御し、内側のループで列数を処理します。そしてprint文を工夫することで、目的に応じたさまざまなパターンを作成できます。パターンには、星(アスタリスク)パターン、数字パターン、アルファベットパターンなどがあり、三角形やピラミッドなど、さまざまな形状にも対応できます。パターン出力の基本これらのパターンは、print文を少し変更しながらforループを組み合わせることで出力できます。基本的な考え方はどのパターンも共通しており、違いはごくわずかです。ここからは、代表的なパターンのコードを実
-
PythonのTurtleグラフィックス入門!基本メソッド一覧と図形描画サンプルコード集
Turtle(タートル)はPythonに標準搭載された特殊な機能で、専用の描画ウィンドウ上に簡単に図形を描くことができるモジュールです。 使い方はとてもシンプルです。まずturtleモジュールをインポートし、次にウィンドウ(Screen)を作成、その後タートルオブジェクトを生成します。あとは各種メソッドを呼び出すだけで、キャンバス上に自由に描画できます。この記事では、よく使われるメソッドの一覧表と、正方形・星・六角形などの具体的な描画例をサンプルコード付きで解説します。 主なTurtleメソッド一覧 メソッド パラメータ 説明 Turtle() なし 新しいタートルオブジェクトを作成