はじめに
この実験では、Python の Matplotlib を使って塗りつぶされた多角形を作成する方法を学びます。例としてコッホの雪花を多角形として使います。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替えて、Jupyter Notebook を使って練習します。
時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
ライブラリのインポート
始める前に、必要なライブラリをインポートしましょう。
import matplotlib.pyplot as plt
import numpy as np
コッホの雪花関数を定義する
次に、コッホの雪花を生成する関数を定義します。この関数は 2 つのパラメータをとります。再帰の深さとスケール係数です。
def koch_snowflake(order, scale=10):
"""
Return two lists x, y of point coordinates of the Koch snowflake.
Parameters
----------
order : int
The recursion depth.
scale : float
The extent of the snowflake (edge length of the base triangle).
"""
def _koch_snowflake_complex(order):
if order == 0:
## initial triangle
angles = np.array([0, 120, 240]) + 90
return scale / np.sqrt(3) * np.exp(np.deg2rad(angles) * 1j)
else:
ZR = 0.5 - 0.5j * np.sqrt(3) / 3
p1 = _koch_snowflake_complex(order - 1) ## start points
p2 = np.roll(p1, shift=-1) ## end points
dp = p2 - p1 ## connection vectors
new_points = np.empty(len(p1) * 4, dtype=np.complex128)
new_points[::4] = p1
new_points[1::4] = p1 + dp / 3
new_points[2::4] = p1 + dp * ZR
new_points[3::4] = p1 + dp / 3 * 2
return new_points
points = _koch_snowflake_complex(order)
x, y = points.real, points.imag
return x, y
塗りつぶされた多角形を生成する
今、fill() 関数を使って塗りつぶされた多角形を生成することができます。多角形の座標を生成するためにコッホの雪花関数を使います。
x, y = koch_snowflake(order=5)
plt.figure(figsize=(8, 8))
plt.axis('equal')
plt.fill(x, y)
plt.show()
多角形をカスタマイズする
fill() 関数のキーワード引数を使って、多角形の色と線幅をカスタマイズすることができます。
x, y = koch_snowflake(order=2)
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(9, 3),
subplot_kw={'aspect': 'equal'})
ax1.fill(x, y)
ax2.fill(x, y, facecolor='lightsalmon', edgecolor='orangered', linewidth=3)
ax3.fill(x, y, facecolor='none', edgecolor='purple', linewidth=3)
plt.show()
まとめ
この実験では、Python の Matplotlib を使って塗りつぶされた多角形を作成する方法を学びました。コッホの雪花を例とした多角形を使い、異なる色と線幅で多角形をカスタマイズする方法を示しました。