前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >随机多边形迭代成椭圆

随机多边形迭代成椭圆

作者头像
用户6021899
发布2021-09-15 15:24:33
6620
发布2021-09-15 15:24:33
举报
文章被收录于专栏:Python编程 pyqt matplotlib

从混乱到秩序:

一个随机多边形,将其各个顶点移动到原来各边的中点,不断迭代,最终会形成一个椭圆!

下面附上绘图的代码:

代码语言:javascript
复制
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()#若前面保存了动画,则这里只显示最后一帧
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档