仮想計算機構

IT業界と無縁な派遣社員のブログ

【Python】Lyapunovフラクタル

wikiの例を再現します。

繰り返し列:AB

プログラム
import numpy as np
import cv2

b_hsv = cv2.cvtColor(np.uint8([[[255,0,0]]]),cv2.COLOR_RGB2HSV)[0][0]
Px,Py = 360,360
s = [0,1] # AB
S = [] # 周期列
M = int(Px*Py/len(s))+1
for i in range(M):
    S.extend(s)

img = np.zeros((Px, Py,3), np.uint8)
xmin,xmax = 2,4
ymin,ymax = 2,4

def get_color(x,y):
    a = (xmax-xmin)*x/Px+xmin
    b = (ymax-ymin)*y/Py+ymin
    N = 100
    x = 0.5
    lmd = 0
    for n in range(N):
        if S[n] == 0:
            r = a
        else:
            r = b
        new_x = r*x*(1-x)
        lmd += np.log(abs(r*(1-2*new_x)))
        x = new_x
    lmd /= N
    if np.isinf(lmd):
        lmd = 0.0
    s = 255*lmd/3
    v = s
    r,g,b = cv2.cvtColor(np.uint8([[[b_hsv[0],s,v]]]),cv2.COLOR_HSV2RGB)[0][0]            
    return [r,g,b]

for x in range(Px):
    for y in range(Py):
        img[x][y] = get_color(x,y)

cv2.imwrite('test.png', img)
実行結果

f:id:riverta1992:20210626132427p:plain

繰り返し列:AABAB

プログラム

s を以下のように書き換える。

s = [0,0,1,0,1]
実行結果

f:id:riverta1992:20210626132301p:plain

繰り返し列:BBABBAABA

実行結果

f:id:riverta1992:20210626133036p:plain