应用matplotlib.animation.FuncAnimation绘制摆线

上次尝试了用matplotlib.animation.ArtistAnimation绘制摆线,实际上也可以用matplotlib.animation.FuncAnimation实现同样的功能。

导入相关文件

引用的库包括numpymatplotlib,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

配置ffmpeg和imagemagick

动图会保存为.gif.mp4两种格式,需要用到这两个库

# Config the ffmpeg_path
plt.rcParams['animation.ffmpeg_path'] = r'D:\Data\software\programming\ffmpeg\ffmpeg-7.0.1-full_build\bin\ffmpeg.exe'
# Config the ImageMagick path with convert_path
plt.rcParams['animation.convert_path'] = r'D:\Data\software\programming\ImageMagick\ImageMagick-7.1.1-33-portable-Q16-HDRI-x64\convert.exe'

animation.FuncAnimation介绍

通过以下命令,可以查看这个方法:

可见,该方法第一个参数是绘图句柄fig,第二个参数是绘制函数func,第三个参数是像素帧frames

animation.FuncAnimation?

Init signature:
animation.FuncAnimation(
fig,
func,
frames=None,
init_func=None,
fargs=None,
save_count=None,
*,
cache_frame_data=True,
**kwargs,
)
Docstring:
TimedAnimation subclass that makes an animation by repeatedly calling
a function func.

… note::

You must store the created Animation in a variable that lives as long
as the animation should run. Otherwise, the Animation object will be
garbage-collected and the animation stops.

Parameters

fig : ~matplotlib.figure.Figure

Whether frame data is cached. Disabling cache might be helpful when
frames contain large objects.
File: d:\miniconda3\lib\site-packages\matplotlib\animation.py
Type: type
Subclasses:
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings…

animation.FuncAnimation??

Init signature:
animation.FuncAnimation(
fig,
func,
frames=None,
init_func=None,
fargs=None,
save_count=None,
*,
cache_frame_data=True,
**kwargs,
)
Source:
class FuncAnimation(TimedAnimation):
“”"
TimedAnimation subclass that makes an animation by repeatedly calling
a function func.

.. note::

    You must store the created Animation in a variable that lives as long
    as the animation should run. Otherwise, the Animation object will be
    garbage-collected and the animation stops.

Parameters

save_count = _api.deprecate_privatize_attribute("3.7")

File: d:\miniconda3\lib\site-packages\matplotlib\animation.py
Type: type
Subclasses:
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings…

定义圆及像素帧方法

  • 设置圆的半径
# 圆半径
R = 1
  • 定义圆和像素帧(摆线定义)
def circle(a, b, r, num=100):
    # (a,b): 圆心坐标
    # r: 圆半径
    # num: 采样密度,默认100
    x, y = [0]*num, [0]*num
    for i,theta in enumerate(np.linspace(0,2*np.pi,num)):
        x[i] = a + r*np.cos(theta)
        y[i] = b + r*np.sin(theta)
    return x, y

# 摆线定义
def gen():
    for theta in np.linspace(0,4*np.pi,100):
        yield R*(theta-np.sin(theta)), R*(1-np.cos(theta)), R*theta   

绘制图像

配置图像属性,并为动画绘制作准备。

fig = plt.figure(figsize=(6,3))
ax = fig.add_subplot(111)
ax.set_ylim(0, 3)
ax.set_xlim(0, 15)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')
ax.grid()
time_text = ax.text(0.05, 0.8, '', transform=ax.transAxes)

cycloid, = ax.plot([], [], 'r-', lw=2)
line, = ax.plot([], [], 'y-', lw=2)
circle_line, = ax.plot([], [], 'g', lw=2)
point, = ax.plot([], [], 'bo', ms=4)

xx, yy = [], []
def func(data):
    x, y, Rt = data
    time_text.set_text(r'$\theta$ = %.2f $\pi$' % (Rt/np.pi))
    xx.append(x)
    yy.append(y)
    cx, cy = circle(Rt, R, R)
    
    cycloid.set_data(xx, yy)
    line.set_data((x,Rt), (y,R))
    circle_line.set_data(cx, cy)
    point.set_data([x], [y])   

绘图设置

创建动画

ani = animation.FuncAnimation(fig, func, frames=gen, blit=False, save_count=100, interval=50)

保存为mp4gif格式

fn = 'cycloid_FuncAnimation_blog'
ani.save('%s.mp4'%(fn), writer='ffmpeg', fps=1000/50)
xx, yy = [], [] # 清空轨迹缓存
ani.save('%s.gif'%(fn), writer='imagemagick', fps=1000/50)

在Jupyter Notebook上显示动画

plt.rcParams['animation.html'] = 'html5'
xx, yy = [], []
ani

动画效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/693263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字符串形成树形

字符串形成树形 有的时候我们形成树形不是以ID的关系进行匹配的而是以字符串进行形成 数据 CREATE TABLE `contract_main_org_info` (`id` bigint(20) NOT NULL COMMENT 组织单位id,`parent_id` int(11) NULL DEFAULT NULL COMMENT 父组织单位id,`org_name` varchar(255) CHA…

mysql数据库密码破解

一、Mysql数据库密码破解 ①一旦获取了网站一定的权限后,如果能够获取MSQL中保存用户数据,通过解密后,即可通过正常途径来访问数据库;一方面可以直接操作数据库中的数据,另一方面可以用来提升权限。 ②MySQL数据库用户密码跟其它…

jmeter的infludb+grafana实时监控平台

目的:可以实时查看到jmeter拷机信息 框架:将 Jmeter 的数据导入 InfluxDB ,再用 Grafana 从 InfluxDB 中获取数据并以特定的模板进行展示 性能监控平台部署实践 一、influxDB 官网:https://www.influxdata.com/downloads/ wget h…

第一篇红队笔记-百靶精讲之W1R3S-john

https://download.vulnhub.com/w1r3s/w1r3s.v1.0.1.zip 主机发现 nmap端口扫描及思路 扫描某个网段 扫描单个ip所有端口 重复扫描单个ip具体端口 udp协议再来一次 漏洞扫描 FTP渗透 尝试匿名登陆 防止文件损坏 识别加密方式-hash-identifier base64 Web目录爆破…

CAN协议简介

协议简介 can协议是一种用于控制网络的通信协议。它是一种基于广播的多主机总线网络协议,常用于工业自动化和控制领域。can协议具有高可靠性、实时性强和抗干扰能力强的特点,被广泛应用于汽车、机械、航空等领域。 can协议采用了先进的冲突检测和错误检测…

Vue2入门(安装Vue、devtools,创建Vue)以及MVVM分层思想

文章目录 1.下载并安装Vue2.使用Vue2.1 创建Vue以及挂载Vue2.2 模板语句的数据来源:data2.3 template配置项详解2.4 Vue实例和容器的关系 3.安装devtools4.MVVM分层思想5.通过vm可以访问哪些属性 1.下载并安装Vue (1)Vue是一个基于JavaScrip…

vs - vs2013中编译sqlite3.44.2

文章目录 vs - vs2013中编译sqlite3.44.2概述笔记工程输出归档END vs - vs2013中编译sqlite3.44.2 概述 以前在vs2019下编译了sqlite3.44.2, 好使。做了笔记(sqlite3.44.2的编译) 现在准备将手头的vs2019工程改为vs2013的,自然要将sqlite也编译为vs2013版本的。 按…

使用LabVIEW进行大数据数组操作的优化方法

针对大数据量数组操作,传统的内存处理方法可能导致内存不足。通过LabVIEW的图像批处理技术,可以有效地进行大数据数组操作,包括分块处理、并行处理和内存优化等。这种方法能显著提高处理效率和系统稳定性。 图像批处理的优势 内存优化&#…

Qt Designer 生成的 .ui 文件转为 .py 文件并运行

1. 使用使用 PyUIC将 .ui 转 .py (1)打开命令行终端(可以用cmd,或pycharm 下面的 Terminal)。 (2)导航到包含.ui文件的目录。 cd 你的ui文件路径 (3)运行以下命令来…

H.264官方文档下载

H.264是ITU(International Telecommunication Union,国际通信联盟)和MPEG(Motion Picture Experts Group,运动图像专家组)联合制定的视频编码标准。其官方文档可以在ITU官网上下载:https://www.…

架构设计-用户信息及用户相关的密码信息设计

将用户的基本信息和用户密码存放在不同的数据库表中是一种常见的安全做法,这种做法旨在增强数据的安全性和管理的灵活性。以下是这种做法的几个关键原因: 安全性增强: 当用户密码被单独存放在一个表中时,可以使用更强大的加密和哈…

计算机网络 期末复习(谢希仁版本)第8章

元文件就是一种非常小的文件,它描述或指明其他文件的一些重要信息。这里的元文件保存了有关这个音频/视频文件的信息。 10. 流式:TCP;流式实况:UDP。

QT C++ QTableWidget 表格合并 setSpan 简单例子

这里说的合并指的是单元格,不是表头。span的意思是跨度、宽度、范围。 setSpan函数需要设定行、列、行跨几格,列跨几格。 //函数原型如下 void QTableView::setSpan(int row, i nt column, 、 int rowSpanCount,/*行跨过的格数*/ int columnSpanCount…

opencv笔记 -- 核心功能模块(Mat)

笔者之前零零碎碎地用过一些opencv,但是一直没有足够详尽的了解,正巧刷到了opencv的tutorial,仅以此记录。 网址:link Mat - 基本的图像容器 一张普通的图片,如果想让计算机也能读得懂的话,我们需要把他转…

《精通ChatGPT:从入门到大师的Prompt指南》附录B:推荐阅读资源

作者:斯图尔特拉塞尔 (Stuart Russell) 和 彼得诺维格 (Peter Norvig) 简介:这本书被誉为人工智能领域的经典教材,内容涵盖了AI的基本原理、算法及其应用。无论是入门者还是专业研究者,都能从中获得启发。 2. 《深度学习》 作者…

Vue前端在线预览文件插件

Vue前端在线预览文件插件 一、使用场景 1.1.像文档资料等,只想让他人在线预览,但不能下载。此等场景需求可以用到此插件。 二、此文档介绍两种插件 1.view.xdocin插件 (上线后免费几天,然后收费,添加作者后,可以延…

OpenHarmony napi 编译 .so 并打包成 .har

一、前言 最近在搞公司标准产品适配OpenHarmony 平台, 按照行业上的常用方法,在Android 是将底层代码用c 封装成 xxx.so ,然后将其他一部分打包成 xxx.jar。 因此,在OpenHarmony 平台也是打算按照这个模式。正所谓,好…

CS1061 “HtmlHelper”未包含“Partial”的定义,并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 CS1061 “HtmlHelper”未包含“Partial”的定义,并且找不到可接受第一个“HtmlHelper”类型参数的可访问扩展方法“Partial”(是否缺少 using 指令或程序集引用?) 14_Views_Message_E…

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁)

【面试干货】MySQL 三种锁的级别(表级锁、行级锁和页面锁) 1、表级锁2、行级锁3、页面锁4、总结 💖The Begin💖点点关注,收藏不迷路💖 在 MySQL 数据库中,锁是控制并发访问的重要机制&#xff0…

CF279A Point on Spiral 题解

解题思路 按照题目中的规律画出来的图片如下: 那么,我们直接根据规律判断当前查询的节点在那一条线段上就可以了。易得,当前的基础转向次数为 max ( ∣ x ∣ − 1 , ∣ y ∣ − 1 ) 4 (|x|-1,|y|-1)\times 4 (∣x∣−1,∣y∣−1)4&#x…