コッホ雪片は、その自己相似性から非常に美しいフラクタル図形です。Pythonの描画ライブラリであるmatplotlibとturtleを用いて、コッホ雪片を描くコードを段階的に解説します。
matplotlibを使った方法
Python
import matplotlib.pyplot as plt
import numpy as np
def koch(x, y, size, depth):
if depth == 0:
plt.plot([x, x+size, x+size*0.5, x, x], [y, y, y+size*np.sqrt(3)/2, y+size*np.sqrt(3)/2, y])
else:
koch(x, y, size/3, depth-1)
koch(x+size/3, y, size/3, depth-1)
koch(x+size/6, y+size*np.sqrt(3)/6, size/3, depth-1)
koch(x+size/2, y, size/3, depth-1)
# 図の初期化
plt.figure(figsize=(8, 8))
plt.axis('off')
# コッホ雪片を描く
koch(0, 0, 2, 4)
# 図を表示
plt.show()
コード解説:
- モジュールのインポート: matplotlib.pyplotは図を描画するためのライブラリ、numpyは数値計算に用います。
- koch関数:
x
,y
: 初期の座標size
: 一辺の長さdepth
: 再帰の深さ(フラクタルの複雑さ)- 再帰的に線分を分割し、コッホ曲線を描きます。
- 図の初期化: 図のサイズを設定し、軸を非表示にします。
- コッホ雪片を描く: koch関数を呼び出し、初期座標、一辺の長さ、再帰の深さを指定します。
- 図を表示: plt.show()で図を表示します。
turtleを使った方法
Python
import turtle
def koch(t, order, size):
if order == 0:
t.forward(size)
else:
for angle in [60, -120, 60, 0]:
koch(t, order-1, size/3)
t.left(angle)
# 描画の準備
t = turtle.Turtle()
t.speed(0) # 描画速度を最速に
t.penup()
t.goto(-200, -100)
t.pendown()
# コッホ雪片を描く
koch(t, 4, 400)
turtle.done()
コード解説:
- モジュールのインポート: turtleは亀型ロボットをシミュレーションするライブラリです。
- koch関数:
t
: turtleオブジェクトorder
: 再帰の次数size
: 一辺の長さ- 再帰的に線分を分割し、亀に描かせます。
- 描画の準備: turtleオブジェクトを作成し、初期位置を設定します。
- コッホ雪片を描く: koch関数を呼び出し、turtleオブジェクト、再帰の次数、一辺の長さを指定します。
どちらを使うべきか?
- matplotlib: 数値的な処理や複雑な図を生成したい場合に適しています。
- turtle: 教育用や視覚的な表現に適しています。
その他
- コッホ曲線: コッホ雪片はコッホ曲線を組み合わせた図形です。コッホ曲線のみを描画することも可能です。
- 深さ: 再帰の深さを変えることで、フラクタルの複雑さを調整できます。
- 色: matplotlibでは、plt.plotの引数に色を指定することで、カラフルな図を描くことができます。
ポイント:
- 再帰関数の仕組みを理解することが重要です。
- フラクタルの自己相似性について考えてみましょう。
- さまざまなパラメータを調整して、自分だけの美しいフラクタル図形を作成してみてください。
このコードを参考に、あなただけの美しいコッホ雪片を描いてみてください。
何か他に知りたいことがあれば、お気軽にご質問ください。
0 件のコメント:
コメントを投稿