見出し画像

フォトギャラリー用画像#26

パスカルの三角形の二項係数を偶奇で塗り分けると現れる模様が、所謂”シェルピンスキーの ギャスケット”でした。

今回はパスカルの三角形を「2の倍数とそれ以外」、「4の倍数とそれ以外」、「8の倍数とそれ以外」、「16の倍数とそれ以外」といった規則で塗り分けた図です。

偶数が黒、奇数が白
4の倍数が黒、それ以外が白
8の倍数が黒、それ以外が白
16の倍数が黒、それ以外が白
32の倍数が黒、それ以外が白
64の倍数が黒、それ以外が白
128の倍数が黒、それ以外が白
256の倍数が黒、それ以外が白

ソースコード

Google Collaboratoryの共有リンク

# -*- coding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np

width = 1280; height = 670 # みんなのフォトギャラリー用にサイズを指定

im = np.ones((height, width))

# 二項係数をpで割った余りを計算
p = 4
h = 10 ; w = 10
mat = np.zeros((h,w))
mat[0][0]=1
for i in range (1,h):
    mat[0][i] = 1
    for j in range (1,i+1):
        mat[j][i-j] = (mat[j-1][i-j]+mat[j][i-j-1] )%p
print(mat)

for k0 in range(8):
    k = k0+1

    # 二項係数をpで割った余りを計算
    p = 2 ** k
    n = height + width
    mat = np.zeros((n,n))
    mat[0][0]=1
    for i in range (1,n-1):
        mat[0][i] = 1
        for j in range (1,i+1):
            mat[j][i-j] = (mat[j-1][i-j]+mat[j][i-j-1])%p

    # 余りが 0 の所は黒、それ以外は白を格納
    for i in range (height):
        for j in range (width):
            im[i][j]= 0 if mat[i][j] == 0 else 255

    #画像の表示と保存
    plt.imshow(im, cmap='gray')
    plt.axis('off')
    plt.show()

    plt.imsave('no+e_photo_gallery_026_'+str(k)+'.png', im, cmap='gray',dpi=1000 )


いいなと思ったら応援しよう!