从混乱到秩序:
一个随机多边形,将其各个顶点移动到原来各边的中点,不断迭代,最终会形成一个椭圆!
下面附上绘图的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
np.random.seed(np.random.randint(1e9))
fig, ax = plt.subplots()
#随机生成N个点的坐标
N = 30
xdata = list(np.random.rand(N)*100)
xdata.append(xdata[0]) # 封闭
ydata = list(np.random.rand(N)*100)
ydata.append(ydata[0]) # 封闭
ln, = plt.plot([], [], 'r*-', animated=True)
ax.set_title("迭代成椭圆",color ='b',fontsize =14)
def init():
ax.set_xlim(0, 100)
ax.set_ylim(0, 100)
return ln, #注意这个逗号。返回的是元组
def update(frame):
for i in range(len(xdata)-1):
xdata[i] = 0.5*(xdata[i]+xdata[i+1])
ydata[i] =0.5* (ydata[i]+ydata[i+1])
xdata[-1] = xdata[0]# 封闭
ydata[-1] = ydata[0]# 封闭
ln.set_data(xdata, ydata)
min_x, max_x = min(xdata), max(xdata)
span_x = max_x - min_x
min_y, max_y = min(ydata), max(ydata)
span_y = max_y - min_y
ax.set_xlim(min_x- 0.2*span_x , max_x+ 0.2*span_x)
ax.set_ylim(min_y- 0.2*span_y , max_y+ 0.2*span_y)
return ln, #注意这个逗号。返回的是元组
ani = FuncAnimation(fig, update, frames=range(1000),
init_func=init, blit=True, interval=100)
#ani.save('t.gif', fps=20) #可保存动画,fps :每秒帧数,帧率。
plt.show()#若前面保存了动画,则这里只显示最后一帧
本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!