-2 | รอแทนที่ |
-1 | หันซ้าย |
0 | วาดตรงไป |
1 | หันขวา |
2 | รอแทนที่ |
import numpy as np
import matplotlib.pyplot as plt
andap = 8 # อันดับ
# สร้างรหัส
lis_rahat = [-2] # รหัสเริ่มต้น
for i in range(andap):
lis_rahat_mai = []
for rahat in lis_rahat: # ทำซ้ำโดยเอารหัสจากอันดับที่แล้วมาแปลง
if(rahat==-2):
lis_rahat_mai.extend([-1,2,0,1,-2,0,-2,1,0,2,-1])
elif(rahat==2):
lis_rahat_mai.extend([1,-2,0,-1,2,0,2,-1,0,-2,1])
else:
lis_rahat_mai.extend([rahat])
lis_rahat = lis_rahat_mai
# ทำการแปลงรหัสเป็นตำแหน่ง
tamnaeng = [(0,0)] # ตำแหน่งเริ่มต้น
thit = 1
for rahat in lis_rahat: # ไล่อ่านรหัสทีละตัว
if(rahat==0): # 0: ทำการเคลื่อนย้าย
x = tamnaeng[-1][0]+(thit==0)-(thit==2)
y = tamnaeng[-1][1]+(thit==1)-(thit==3)
tamnaeng.append((x,y)) # บันทึกตำแหน่งใหม่
elif(rahat==-1 or rahat==1): # หันซ้ายหรือขวา
thit += rahat
thit %= 4
xy = np.array(tamnaeng)
x,y = xy.T
plt.figure(figsize=[6.4,6.4])
plt.axes([0,0,1,1],aspect=1,xlim=[-0.5,2**andap-0.5],ylim=[-0.5,2**andap-0.5])
plt.plot(x,y,'#FF6666',lw=0.5)
plt.axis('off')
plt.show()
def hilbert(andap,thit):
# สร้างรหัส
def sang_rahat(andap):
if(andap==0):
return [-2] # รหัสเริ่มต้น
else:
lis_rahat = []
for rahat in sang_rahat(andap-1): # เวียนเกิดโดยเอารหัสจากอันดับที่แล้วมาแปลง
if(rahat==-2):
lis_rahat.extend([-1,2,0,1,-2,0,-2,1,0,2,-1])
elif(rahat==2):
lis_rahat.extend([1,-2,0,-1,2,0,2,-1,0,-2,1])
else:
lis_rahat.extend([rahat])
return lis_rahat
# ทำการแปลงรหัสเป็นตำแหน่ง
def plaeng_rahat(lis_rahat,thit):
'''thit = ทิศ
0: ขวา
1: บน
2: ซ้าย
3: ล่าง
'''
tamnaeng = [(0,0)] # ตำแหน่งเริ่มต้น
for rahat in lis_rahat: # ไล่อ่านรหัสทีละตัว
if(rahat==0): # 0: ทำการเคลื่อนย้าย
x = tamnaeng[-1][0]+(thit==0)-(thit==2)
y = tamnaeng[-1][1]+(thit==1)-(thit==3)
tamnaeng.append((x,y)) # บันทึกตำแหน่งใหม่
elif(rahat==-1 or rahat==1): # หันซ้ายหรือขวา
thit += rahat
thit %= 4
return tamnaeng
lis_rahat = sang_rahat(andap)
return plaeng_rahat(lis_rahat,thit)
andap = 8
xy = np.array(hilbert(andap,1))
x,y = xy.T
plt.figure(figsize=[6.4,6.4])
plt.axes([0,0,1,1],aspect=1,xlim=[-0.5,2**andap-0.5],ylim=[-0.5,2**andap-0.5])
plt.plot(x,y,'#FF6666',lw=0.5)
plt.axis('off')
plt.show()
for n in range(1,8):
xy = np.array(hilbert(n,1))
plt.figure(figsize=[6,6])
plt.axes([0,0,1,1],aspect=1,xlim=[-1,2**n],ylim=[-1,2**n])
c = plt.get_cmap('rainbow')(np.linspace(0,1,len(xy)-1))
for i in range(len(xy)-1):
plt.plot(xy[i:i+2,0],xy[i:i+2,1],color=c[i])
plt.axis('off')
plt.savefig('h%d'%n)
plt.close()
import imageio as imo
phap = imo.imread('remram.jpg')
n = 5
X = np.array(hilbert(n,1))
for i in range(2,len(X)+1):
fig = plt.figure(figsize=[6.4,6.4],facecolor='k')
plt.axes([0,0,1,1],aspect=1,xlim=[-0.5,2**n-0.5],ylim=[-0.5,2**n-0.5])
plt.plot(X[:i,0],X[:i,1],'w',lw=13)
plt.axis('off')
fig.canvas.draw()
ar = np.array(fig.canvas.renderer._renderer)[:,:,:3]/255.
ar *= phap
imo.imsave('remram/rr%04d.jpg'%i,ar)
plt.close()
ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ