gif演示python循环_用 Python 制作演示 Hilbert 曲线的 gif 动图

SeaRecluse

2018-11-20 17:19:54 +08:00

看上去不错,抛砖引玉下

```python

import matplotlib.pyplot as plt

import numpy as np

from matplotlib.animation import FuncAnimation

#-----------------------------坐标转换----------------------------

def rot(n,x,y,rx,ry):

if ry == 0:

if rx == 1:

x = (n - 1 - x)

y = (n - 1 - y)

tmp = x

x = y

y = tmp

return x,y

def xy2d(n,x,y):

rx,ry,s,d = 0,0,0,0

s = n//2

while s:

rx = 1 if (x&s) > 0 else 0

ry = 1 if (y&s) > 0 else 0

d += s * s * ((3 * rx) ^ ry)

x,y = rot(s,x,y,rx,ry)

s = s//2

return d

#-----------------------------n:2 的次幂----------------------------

n = pow(2,4)

x = np.arange(0,n)

y = np.arange(0,n)

allxy = []

for per_y in y:

for per_x in x:

d = xy2d(n,per_x,per_y)

allxy.append([per_x,per_y,d])

for i in range(len(allxy)):

for j in range(i + 1, len(allxy)):

if allxy[j][2] < allxy[i][2]:

temp = allxy[j]

allxy[j] = allxy[i]

allxy[i] = temp

#-----------------------------画动态图----------------------------

fig, ax = plt.subplots()

xdata, ydata = [], []

ln, = ax.plot([], [], '-*', color = "purple", animated=False)

def init():

ax.set_xlim(-0.25, n-0.25)

ax.set_ylim(-0.25, n-0.25)

return ln,

def update(frame):

xdata.append(allxy[frame][0])

ydata.append(allxy[frame][1])

lnT, = ax.plot([], [], '-*', animated=False)

lnT.set_data(xdata[-2:], ydata[-2:])

ln.set_data(xdata[:-1], ydata[:-1])

return ln,lnT

ani = FuncAnimation(fig, update, frames=range(0,pow(n,2)),

init_func=init, blit=True)

plt.show()

#-----------------------------画静态图----------------------------

# allxy = np.array(allxy)

# plt.figure()

# plt.plot(allxy[:,0],allxy[:,1],'-*',color = "purple",linewidth=2)

# plt.show()

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值