2016年8月30日火曜日

開発環境

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 コメント:

コメントを投稿