コッホ雪片(Koch snowflake)

コッホ雪片(Koch snowflake)

コッホ雪片(Koch snowflake)は、フラクタル幾何学の代表的な図形の1つです。
スウェーデンの数学者Helge von Kochによって提案されました。
コッホ雪片は、次のような手順で構築されます。

1. 始点の設定:

最初に、正三角形(すなわち、$3$つの等しい長さの辺と$3$つの$60$度の内角を持つ図形)を描きます。

2. 分割:

各辺を$3$等分し、中央の$1/3$地点に新しい頂点を追加します。
これにより、正三角形の各辺が4つの小さな正三角形に分割されます。

3. 内側の辺の追加:

新しい頂点を中心として、外側の辺の中心に向かって、正三角形の$1/3$の長さの辺を追加します。
これにより、外側の辺が内側に折り返されます。

4. 再帰:

生成された小さな三角形に対して、同じ手順を再帰的に適用します。
各ステップで、図形はより細かい詳細を持つより複雑な形状に進化します。

5. 極限に向かって:

無限に続くこのプロセスにより、図形の周囲は収束し、コッホ雪片と呼ばれる図形が形成されます。

コッホ雪片は、境界の長さが無限になるにつれて、形状が複雑になり、自己相似性(自分自身の一部が全体と似ている性質)を持つフラクタルとして知られています。

このようにして、コッホ雪片は独特の幾何学的美しさと複雑さを持ち、数学や美術など様々な分野で興味深い研究対象として扱われています。

ソースコード

コッホ雪片(Koch snowflake)をPythonで生成し、matplotlibを使用してグラフ化するコードを以下に示します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np
import matplotlib.pyplot as plt

def koch_snowflake(order, length):
if order == 0:
# 基本の三角形の頂点座標
return np.array([[0, 0], [length/2, length*np.sqrt(3)/2], [length, 0]])
else:
# 前のオーダーの座標
points = koch_snowflake(order-1, length)
new_points = [points[0]]
for i in range(len(points)-1):
# 現在の辺を3等分する点の座標を計算
p1 = points[i]
p2 = points[i+1]
dx = p2[0] - p1[0]
dy = p2[1] - p1[1]
new_points.append(p1 + np.array([dx/3, dy/3]))
new_points.append(p1 + np.array([dx/2 + np.sqrt(3)*dy/6, dy/2 - np.sqrt(3)*dx/6]))
new_points.append(p1 + np.array([2*dx/3, 2*dy/3]))
new_points.append(p2)
return np.vstack(new_points)

def plot_koch_snowflake(order, length):
snowflake = koch_snowflake(order, length)
plt.figure(figsize=(8, 8))
plt.title("Koch Snowflake (order = {})".format(order))
plt.plot(snowflake[:, 0], snowflake[:, 1], 'b-')
plt.axis('equal')
plt.axis('off')
plt.show()

# コッホ雪片のオーダーと辺の長さ
order = 4
length = 300

# コッホ雪片のプロット
plot_koch_snowflake(order, length)

このコードは、指定されたオーダーと辺の長さに基づいてコッホ雪片を生成し、matplotlibを使用してグラフ化します。

[実行結果]

ソースコード解説

以下は、コードの詳細な説明です。

1. 必要なライブラリのインポート:

1
2
import numpy as np
import matplotlib.pyplot as plt
  • numpyは、数値計算を行うためのPythonライブラリです。
  • matplotlib.pyplotは、グラフ描画機能を提供するMatplotlibライブラリのサブモジュールです。

2. コッホ雪片を生成する関数の定義:

1
2
def koch_snowflake(order, length):
...
  • orderlengthを引数として受け取り、指定されたオーダーと辺の長さに基づいてコッホ雪片の頂点座標を計算します。
  • 再帰的なアプローチを使用して、コッホ雪片の各オーダーの頂点座標を計算します。

3. コッホ雪片をプロットする関数の定義:

1
2
def plot_koch_snowflake(order, length):
...
  • orderlengthを引数として受け取り、指定されたオーダーと辺の長さで生成されたコッホ雪片をプロットします。
  • koch_snowflake関数を呼び出してコッホ雪片の頂点座標を取得し、それをmatplotlibを使用して描画します。

4. コッホ雪片のオーダーと辺の長さの指定:

1
2
order = 4
length = 300
  • order変数には、コッホ雪片のオーダーを指定します。
    オーダーが大きいほど、より詳細なコッホ雪片が生成されます。
  • length変数には、コッホ雪片辺の長さを指定します。

5. コッホ雪片のプロット:

1
plot_koch_snowflake(order, length)
  • plot_koch_snowflake関数を呼び出して、指定されたオーダーと辺の長さでコッホ雪片をプロットします。

これらの手順によって、指定されたオーダーと辺の長さでコッホ雪片が生成され、matplotlibを使用してグラフ化されます。

グラフ解説

[実行結果]

以下は、グラフに表示される内容の詳細です。

1. コッホ雪片の生成:

koch_snowflake関数は、指定されたオーダー(order)と辺の長さ(length)に基づいて、コッホ雪片の頂点の座標を計算します。
コッホ雪片は再帰的な方法で生成され、与えられたオーダーに応じて詳細な構造が形成されます。

2. グラフの描画:

plot_koch_snowflake関数は、生成されたコッホ雪片をmatplotlibを使用してプロットします。
プロットされたコッホ雪片は青色の線で表され、その形状はコッホ曲線の特徴的な三角形の形状を持ちます。
グラフのタイトルは、「Koch Snowflake (order = 指定されたオーダー)」となります。

3. グラフの設定:

plt.figure関数によって、図のサイズが設定されます。
plt.title関数によって、グラフにタイトルが追加されます。
plt.plot関数は、コッホ雪片の頂点座標を線でつなぎ、コッホ雪片を描画します。
plt.axis('equal')によって、$x$軸と$y$軸の比率が等しくなり、コッホ雪片の歪みがなくなります。
plt.axis('off')は、$x$軸と$y$軸の目盛りや枠線を非表示にします。

4. 表示される内容:

グラフに表示される内容は、生成されたコッホ雪片の形状です。
コッホ雪片は、フラクタル図形の一種であり、無限に複雑な形状を持つ三角形です。
このグラフは、コッホ雪片のオーダーに応じた細かい構造を視覚的に示しています。