返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python绘画双摆操作分享
  • 917
分享到

利用Python绘画双摆操作分享

2024-04-02 19:04:59 917人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1.双摆问题2.运动过程3.公式推导过程1.双摆问题 所谓双摆,就是两个连在一起的摆。 接下来本来是要推公式的,考虑考虑到大家可能会有公式恐惧症,同时又喜欢看图,所以把公式挪

1.双摆问题

所谓双摆,就是两个连在一起的摆。

接下来本来是要推公式的,考虑考虑到大家可能会有公式恐惧症,同时又喜欢看图,所以把公式挪到后面。

所以,只需知道角速度的微分方程,就可写出对应的代码,其方程如下:

从而转为代码得到:

# 其中,lam,mu,G_L1,M为全局变量
def derivs(state, t):
    dydx = np.zeros_like(state)
    th1,om1,th2,om2 = state
    dydx[0] = state[1]
    delta = state[2] - state[0]
    cDelta, sDelta = np.cos(delta), np.sin(delta)
    sTh1,_,sTh2,_ = np.sin(state)
    den1 = M - mu*cDelta**2
    dydx[1] = (mu * om1**2 * sDelta * cDelta
                + mu * G_L1 * sTh2 * cDelta
                + mu * lam * om2**2 * sDelta
                - M * G_L1 * sTh1)/ den1
    dydx[2] = state[3]
    den2 = lam * den1
    dydx[3] = (- mu * lam * om2**2 * sDelta * cDelta
                + M * G_L1 * sTh1 * cDelta
                - M * om1**2 * sDelta
                - M * G_L1 * sTh2)/ den2
    return dydx

接下来根据微分方程的解,便可进行绘图。

# 这段代码用于设置初值,并调用integrate求解微分方程组
import numpy as np
import scipy.integrate as integrate

G = 9.8
L1,L2 = 1.0, 1.0
G_L1 = G/L1
lam = L2/L1   #杆长度比L2/L1
mu = 1.0      #质量比M2/M1
M = 1+mu

# 生成时间
dt = 0.01
t = np.arange(0, 20, dt)

th1,th2 = 120.0, -10.0  #初始角度
om1,om2 = 0.0, 0.00       #初始角速度
state = np.radians([th1, om1, th2, om2])

# 微分方程组数值解
y = integrate.odeint(derivs, state, t)

# 真实坐标
x1 = L1*sin(y[:, 0])
y1 = -L1*cos(y[:, 0])
x2 = L2*sin(y[:, 2]) + x1
y2 = -L2*cos(y[:, 2]) + y1

至此,就得到了所有位置处的坐标,从而可以观察到双摆的轨迹如图所示

绘图代码为:

import matplotlib.pyplot as plt
plt.scatter(x1,y1,marker='.')
plt.scatter(x2,y2,marker='.')
plt.show()

若将时间设置得长一点,然后在画图的时候更改一下颜色,就会看到双摆的运动区间,可见自然界还是挺有情怀的

其绘图代码为:

plt.plot(x1,y1,marker='.',alpha=0.2, linewidth=0.2)
plt.plot(x2,y2,marker='.',alpha=0.2, linewidth=2, c='r')
plt.axis('off')
plt.show()

当然,也可以将其运动轨迹以一种三维的形式绘制出来

ax = plt.GCa(projection='3D')
ax.plot3D(t,x1,y1,linewidth=1)
plt.show()

额……好吧,看来并没有什么情怀。

但是,如果把这两个小球分别当作两个星球,而我们又在一颗星球上,那么所观测到的另一颗星球的运动大致如下,不出意外是个圆,毕竟圆形二者之间的距离是恒定的。

绘图代码为:

ax = plt.gca(projection='3d')
ax.plot3D(t,x2-x1,y2-y1,linewidth=0.5)
plt.show()

如果更改一下初值,则图形将有如下变化

初值设为:

th1,th2 = 0, 0  #初始角度
om1,om2 = 120.0, 108.00       #初始角速度

2.运动过程

最后,还是传统技能,绘制一下双摆的运动过程如下:

代码为:

import matplotlib.animation as animation
# 下面为绘图过程
fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-2, 2), ylim=(-2, 2))
ax.set_aspect('equal')
ax.grid()

line, = ax.plot([], [], 'o-', lw=2)
time_template = 'time = %.1fs'
time_text = ax.text(0.05, 0.9, '', transfORM=ax.transAxes)

# 初始化图形
def init():
    line.set_data([], [])
    time_text.set_text('')
    return line, time_text

def animate(i):
    thisx = [0, x1[i], x2[i]]
    thisy = [0, y1[i], y2[i]]
    line.set_data(thisx, thisy)
    time_text.set_text(time_template % (i*dt))
    return line, time_text

ani = animation.FuncAnimation(fig, animate, range(1, len(y)),   
        interval=dt*1000, blit=True, init_func=init)
ani.save("dua_1.gif",writer='imagemagick')
plt.show()

3.公式推导过程

双摆的动能和势能分别为:

根据拉格朗日方程

则有:

其中,

展开可得则:

到此这篇关于利用python画双摆的文章就介绍到这了,更多相关Python画双摆内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Python绘画双摆操作分享

本文链接: https://lsjlt.com/news/144711.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python绘画双摆操作分享
    目录1.双摆问题2.运动过程3.公式推导过程1.双摆问题 所谓双摆,就是两个连在一起的摆。 接下来本来是要推公式的,考虑考虑到大家可能会有公式恐惧症,同时又喜欢看图,所以把公式挪...
    99+
    2024-04-02
  • python利用scatter绘画散点图
    scatter绘画散点图代码如下: import matplotlib.pyplot  as plt plt.scatter(x,y,                 s = 20 ...
    99+
    2024-04-02
  • Python利用Turtle绘画简单图形
    目录前期准备基本函数与用法绘画图形1.画一个正方形2.画一个三角形3.画一个八角星4.画一个八边形5.其他图形No.1、多彩的五角星No.2、多彩的八角星No.3、四圆镶嵌No.4、...
    99+
    2024-04-02
  • python怎么利用scatter绘画散点图
    这篇文章主要介绍了python怎么利用scatter绘画散点图的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python怎么利用scatter绘画散点图文章都会有所收获,下面我们一起来看看吧。scatter绘画...
    99+
    2023-07-02
  • 怎么在python中利用deque操作双向列表
    这期内容当中小编将会给大家带来有关怎么在python中利用deque操作双向列表,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,...
    99+
    2023-06-14
  • 利用Python实现绘制3D爱心的代码分享
    目录环境介绍第一步,绘制一个三维的爱心亿点点细节加入时间序列加入心脏的跳动一个好的展示完整代码环境介绍 python3.8 numpy matplotlib 第一步,绘制一个三维的爱...
    99+
    2022-11-16
    Python绘制3D爱心 Python 3D爱心 Python 爱心
  • 如何利用css制作有趣的文字摆动动画特效
    小编给大家分享一下如何利用css制作有趣的文字摆动动画特效,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!我们先来看看效果图:下面...
    99+
    2024-04-02
  • Python中常用的17个操作分享
    这篇文章主要讲解了“Python中常用的17个操作分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中常用的17个操作分享”吧!1. 交换变量有时候,当我们要交换两个变量的值时,...
    99+
    2023-06-02
  • Python中Playwright的常用操作方法分享
    目录1. Playwright获得所有的Cookies2. Playwright获得所有的链接3. Playwright获得包含特定字符串/文本的所有链接4. Playwright点...
    99+
    2023-05-19
    Python Playwright常用操作 Python Playwright操作 Python Playwright
  • 14个Python处理Excel的常用操作分享
    目录一、关联公式:Vlookup二、数据透视表三、对比两列差异四、去除重复值五、缺失值处理六、多条件筛选七、 模糊筛选数据八、分类汇总九、条件计算十、删除数据间的空格十一、数据分列十...
    99+
    2023-03-06
    Python处理Excel操作 Python处理Excel Python Excel
  • 怎么利用python创作字符画
    本文小编为大家详细介绍“怎么利用python创作字符画”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用python创作字符画”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果图:理论很简单,就是对图片操作...
    99+
    2023-07-02
  • Python利用networkx画图绘制Les Misérables人物关系
    目录数据集介绍数据处理画图networkx自带的数据集完整代码数据集介绍 《悲惨世界》中的人物关系图,图中共77个节点、254条边。 数据集截图: 打开README文件: Les ...
    99+
    2024-04-02
  • Django常用操作命令分享
    这篇文章主要讲解了“Django常用操作命令分享”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django常用操作命令分享”吧!查看Django版本:点击(此处)折叠或打开[oracle@m...
    99+
    2023-06-04
  • 利用numpy+matplotlib绘图的基本操作教程
    简述 Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单。具体介绍见matplot官网。 Numpy(Nume...
    99+
    2022-06-04
    操作 教程 numpy
  • JS利用map整合双数组的小技巧分享
    目录前言模拟数据合并后数据合并思路代码展示&解析第一步第二步第三步第四步全部代码总结前言 最近因公司业务需求编写ECharts图表展示相关公司阶段型业务相关数据变化,需要服...
    99+
    2024-04-02
  • 在Python中绘制带有连接线的双饼图(操作代码)
    目录一、导入所需的库二、准备数据三、绘制双饼图3.1 创建画布和子图对象3.2 绘制大饼图3.3 绘制小饼图3.4 连接线1,连接大饼图的上边缘和小饼图的饼块3.5 连接线2,连接大...
    99+
    2023-05-18
    Python双饼图 Python 连接线双饼图
  • 利用Python实现自动工作汇报的脚本分享
    目录一、写在开头二、需要什么三、模型训练四、数据处理和传输五、金融模型六、代码七、MIME八、SMTP九、放在一起一、写在开头 哈喽兄弟们 之前经常编写Python脚本来进行数据处理...
    99+
    2024-04-02
  • Python怎么利用networkx画图绘制Les Misérables人物关系
    这篇文章主要介绍“Python怎么利用networkx画图绘制Les Misérables人物关系”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python怎么利用networkx画图绘制...
    99+
    2023-06-30
  • 用python进行简单的画图操作
    我用python的matplotlib模块进行简单的画图操作,作为入门参考,下面直接上代码:#coding:utf-8 import numpy as np import matplotlib.pyplot as plt x=np.lins...
    99+
    2023-01-31
    画图 操作 简单
  • 利用R语言绘制时间序列图的操作
    数据 GDP.csv文件,存储1879~2019年河南省GDP数据 绘图 # 读取数据, 首先将excel 格式的转化为 csv 格式 再读取 h <- read.tab...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作