专栏首页拇指笔记【Python】五分钟画一条动态心形曲线~

【Python】五分钟画一条动态心形曲线~

0.最终效果

1.绘制一条心形曲线

最近看到个视频,打算绘制个心型动态的曲线。

1.1 Matlab确定图像及其函数

网上有很多关于心形曲线的资料,各种各样的形状,但是我比较倾心于桃心形。先在Matlab里简单看一下是什么样的。

桃心形曲线的方程如下

x = 16sin^3(t)
y = 13cos(t)-5cos(2t)-2cos(3t)-cos(4t)

Matlab绘制效果如下:

Matlab程序如下。

clc
clear
t = -10:0.01:10
x = 16*(sin(t)).^3
y = 13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t)
%ylim([-5,2])
%xlim([-3,3])
grid on;
hold on
plot(x,y,'linewidth',1)

1.2 Python绘制动态曲线

光是一张图片,属实是太乏味了,不如直接找网图。为了让这个心形曲线更有意思点,我使用了matplotlib中的animation模块来绘制一个动态的心形。

首先需要进行初始化x,y列表、窗口和曲线。

fig, ax = plt.subplots()
#初始化窗口和坐标轴
xdata, ydata = [], []
#初始化x,y列表
ln, = ax.plot([], [], 'r-', animated=False)
#初始化绘制曲线的参数。

然后使用两个核心函数init()updata()计算曲线经过的点。

#init()函数初始化x,y轴范围
def init():
    ax.set_xlim(-20,20)
    ax.set_ylim(-20,15)
    return ln,
#迭代器,根据传入的frame更新x,y值
def update(frame):
    xdata.append(np.sin(frame)^3)
    ydata.append(13*np.cos(frame)-5*cos(2*frame)-2*cos(3*frame)-cos(4*frame))
    ln.set_data(xdata, ydata)
    return ln,

最后调用一下函数,设置一下显示速度(interval),是否重复绘制(repeat)等参数即可。

ani = animation.FuncAnimation(fig, update, frames=np.linspace(0,10,1000),init_func=init,interval=5, repeat = False,blit=True)

1.3 几点注意

  1. 可以使用imagemagick工具,可以将图片保存为gif格式。
ani.save('heart.gif',writer='imagemagick',fps=30)
  1. 选择matplotlib的backend。使用jupyter notebook绘制图像时,常常会遇到无法显示的情况,这种情况大概率是backend的问题。使用下面的代码,选择backend为qt5。
 %matplotlib qt5

本文分享自微信公众号 - 拇指笔记(shuzhi990),作者:拇指笔记

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【动手学深度学习笔记】之实现softmax回归模型

    设置小批量数目为256。这一部分与之前的线性回归的读取数据大同小异,都是转换类型-->生成迭代器。

    树枝990
  • 【Python爬虫】写一个爬取中国天气网的终端版天气预报爬虫

    前几篇文章介绍了爬取静态网站的主要方法。今天写一个小项目实践一下。本项目可以在终端窗口查询全国3400多个区县的当天天气信息和近七天天气信息。

    树枝990
  • 三步修改jupyter notebook主题和页面宽度

    最近每天都对着jupyter notebook的默认主题,感觉实在是单调了点。而且jupyter notebook的宽度,实在是让人难受...

    树枝990
  • 深度 | 苹果首任AI总监Ruslan Salakhutdinov大起底

    随着人工智能成为科技巨头们的下一个决战场,各大科技巨头均加紧了对相关学术人才的招揽。深度学习的“四大天王”中,Geoffrey Hinton在Google,Ya...

    AI科技评论
  • Python Threading 学习笔记 | 5、不一定有效率GIL

    GIL的全称是Global Interpreter Lock(全局解释器锁),来源是python设计之初的考虑,为了数据安全所做的决定。

    TeamsSix
  • FFmpeg 实现视频 封装 与 解封装

    本例子实现的是将视频数据和音频数据,按照一定的格式封装为特定的容器,比如FLV、MKV、MP4、AVI等等。

    glumes
  • 为什么要放弃 JSP ?

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    一个优秀的废人
  • 为什么做页面优化要用静态化,静态化如何落地?

    动态网页,是以.asp、.jsp、.php、.perl、.cgi等形式为后缀,并且在动态网页网址中有一个标志性的符号—“?”。首先它不是真实存在的,他需要执行A...

    lyb-geek
  • 为什么要放弃 JSP ?

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    乔戈里
  • Java Web项目为什么要放弃JSP

    随着时代的发展,渐渐的许多大中小公司开始把前后端的界限分的越来越明确,前端工程师只负责前端的事情,后端工程师只管后端的事情。正所谓术业有专攻,一个人如果什么都会...

    秃头哥编程

扫码关注云+社区

领取腾讯云代金券