2024年8月2日金曜日

Pythonで描くコッホ雪片

コッホ雪片は、その自己相似性から非常に美しいフラクタル図形です。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()

コード解説:

  1. モジュールのインポート: matplotlib.pyplotは図を描画するためのライブラリ、numpyは数値計算に用います。
  2. koch関数:
    • x, y: 初期の座標
    • size: 一辺の長さ
    • depth: 再帰の深さ(フラクタルの複雑さ)
    • 再帰的に線分を分割し、コッホ曲線を描きます。
  3. 図の初期化: 図のサイズを設定し、軸を非表示にします。
  4. コッホ雪片を描く: koch関数を呼び出し、初期座標、一辺の長さ、再帰の深さを指定します。
  5. 図を表示: 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()

コード解説:

  1. モジュールのインポート: turtleは亀型ロボットをシミュレーションするライブラリです。
  2. koch関数:
    • t: turtleオブジェクト
    • order: 再帰の次数
    • size: 一辺の長さ
    • 再帰的に線分を分割し、亀に描かせます。
  3. 描画の準備: turtleオブジェクトを作成し、初期位置を設定します。
  4. コッホ雪片を描く: koch関数を呼び出し、turtleオブジェクト、再帰の次数、一辺の長さを指定します。

どちらを使うべきか?

  • matplotlib: 数値的な処理や複雑な図を生成したい場合に適しています。
  • turtle: 教育用や視覚的な表現に適しています。

その他

  • コッホ曲線: コッホ雪片はコッホ曲線を組み合わせた図形です。コッホ曲線のみを描画することも可能です。
  • 深さ: 再帰の深さを変えることで、フラクタルの複雑さを調整できます。
  • 色: matplotlibでは、plt.plotの引数に色を指定することで、カラフルな図を描くことができます。

ポイント:

  • 再帰関数の仕組みを理解することが重要です。
  • フラクタルの自己相似性について考えてみましょう。
  • さまざまなパラメータを調整して、自分だけの美しいフラクタル図形を作成してみてください。

このコードを参考に、あなただけの美しいコッホ雪片を描いてみてください。

何か他に知りたいことがあれば、お気軽にご質問ください。

0 件のコメント:

コメントを投稿