今日は落書きで書いた図形をプログラム(matplotlib)で描いてみようと思い,Pythonを使って描いてみた。
今回使うプログラム
fractal.py
import matplotlib.pyplot as plt
import matplotlib.collections as mc
import numpy as np
import math
def return_point(p1, p2):
point = (p2-p1)*0.08 + p1
return point
N = 1000
x = np.linspace(-1, 1, N)
x_point = [0, 100, 200]
y_point = [0, math.sqrt(3)*100, 0]
for i in range (N):
new_x_point = return_point(x_point[i], x_point[i+1])
new_y_point = return_point(y_point[i], y_point[i+1])
x_point.append(new_x_point)
y_point.append(new_y_point)
fractal = [[(x_point[i], y_point[i]), (x_point[i+1], y_point[i+1])] for i in range(N)]
lc = mc.LineCollection(fractal, colors='#333333', linewidths=1, antialiased=True)
fig = plt.figure(figsize=(10,10))
ax = fig.add_subplot(1,1,1)
# ↓非本質的な設定
ax.set_axis_bgcolor('#f3f3f3')
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['left'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['bottom'].set_visible(False)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
# ↑非本質的な設定
ax.add_collection(lc)
ax.autoscale()
plt.savefig('./fractal.png')
7行目point = (p2-p1)*0.08 + p1
の0.08
の値を変えてみるのも一興.
実行後
あら,美しい(CDのジャケットにありそう)
(ところで,何か名前がついていたらコメント欄で教えてください)
#####【追記】
厳密にはフラクタル図形でないと考え,タイトルを"フラクタル図形をPythonを使って描いてみた"から"擬似フラクタル図形をPythonを使って描いてみた"に変更しました。
参考にした記事
ありがとうございました。
pythonでフラクタル図形を作成part1(シェルピンスキーのギャスケット)
https://qiita.com/okakatsuo/items/f2e79fc501ed9f799734
Matplotlibで複数の線分を描画する方法
https://omedstu.jimdofree.com/2019/10/04/matplotlibで複数の線集合を描画する方法/
matplotlibのめっちゃまとめ
https://qiita.com/nkay/items/d1eb91e33b9d6469ef51#2-グラフaxesの作成