Rotated Sierpinski Gasket のソースコード
参考( ↓はSierpinski Gasketのソースコードが載っている. ):
https://qiita.com/okakatsuo/items/f2e79fc501ed9f799734
https://qiita.com/physics303/items/5d4fb4708fe72ba48fb0
# -*- coding: utf-8 -*-
#sierpinskigasket.py
import numpy as np
# ベクトル回転関数
# deg=Falseならばラジアンで角度を指定
# deg=Trueならば度数単位で角度を指定
def rotation_o(u, t, deg=False):
# 度数単位の角度をラジアンに変換
if deg == True:
t = np.deg2rad(t)
# 回転行列
R = np.array([[np.cos(t), -np.sin(t)],
[np.sin(t), np.cos(t)]])
return np.dot(R, u)
maxlevel = 8 #再帰の回数
def gasket(x10, y10, x20, y20, x30, y30, level):
if level == maxlevel:
print(x10, y10)
print(x20, y20, "\n")
print(x20, y20)
print(x30, y30, "\n")
print(x30, y30)
print(x10, y10, "\n")
return
else:
x11, y11 = (x20+x30)/2.0, (y20+y30)/2.0
x21, y21 = (x30+x10)/2.0, (y30+y10)/2.0
x31, y31 = (x10+x20)/2.0, (y10+y20)/2.0
x12, y12 = (4* x11 + 1* x21)/5, (4* y11 + 1* y21)/5
x22, y22 = (4* x21 + 1* x31)/5, (4* y21 + 1* y31)/5
x32, y32 = (4* x31 + 1* x11)/5, (4* y31 + 1* y11)/5
# print(x12, y12)
# print(0, 0, "\n")
print(x12, y12)
print(x22, y22, "\n")
print(x12, y12)
print(x32, y32, "\n")
print(x22, y22)
print(x32, y32, "\n")
gasket(x10,y10, x31, y31, x21, y21, level + 1)
gasket(x31,y31, x20, y20, x11, y11, level + 1)
gasket(x21,y21, x11, y11, x30, y30, level + 1)
gasket(x12,y12, x22, y22, x32, y32, level + 1)
x10, y10, x20, y20, x30, y30, level = 0.0, 0.0, 1.0, 0.0, 0.5, 1.0, 0
gasket(x10, y10, x20, y20, x30, y30, level)

