開発環境
- OS X El Capitan - Apple (OS)
- Emacs (Text Editor)
- Python 3.5 (プログラミング言語)
Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の6章(幾何図形とフラクタルを描画する)、6.4(プログラミングチャレンジ)、問題6-2(シェルピンスキーの三角形)を取り組んでみる。
問題6-2(シェルピンスキーの三角形)
コード(Emacs)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import random
def transformation_1(p):
x, y = p
return 0.5 * x, 0.5 * y,
def transformation_2(p):
x, y = p
return 0.5 * x + 0.5, 0.5 * y + 0.5
def transformation_3(p):
x, y = p
return 0.5 * x + 1, 0.5 * y
def transform(p):
transformations = [transformation_1, transformation_2, transformation_3]
transformation = random.choice(transformations)
return transformation(p)
def draw_sierpinski_gasket(n):
x = 0
y = 0
xs = [x]
ys = [y]
for _ in range(n):
x, y = transform((x, y))
xs.append(x)
ys.append(y)
return xs, ys
if __name__ == '__main__':
for n in [10 ** i for i in range(1, 6)]:
plt.figure(figsize=(4, 4))
# n = int(input('点の個数: '))
xs, ys = draw_sierpinski_gasket(n)
plt.plot(xs, ys, 'o')
plt.title('Sierpinski gasket({0})'.format(n))
plt.savefig('sierpinski_gasket_{0}.png'.format(n))
入出力結果(Terminal, IPython)
$ ./sample2.py $
0 コメント:
コメントを投稿