Python在同一块画布叠加画,

  Python在同一块画布叠加画,

  本文主要介绍利用Python绘制双摆,绘制双摆的过程主要包括以下步骤:双摆问题、运动过程、公式推导过程。下面有详细介绍,有需要的朋友可以参考一下。

  00-1010 1.双摆问题2。运动过程3。公式推导流程

  

目录

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

  接下来,我要推出公式。考虑到大家可能都有公式恐惧症,喜欢同时看图,我就把公式挪到后面了。

  因此,你可以写相应的代码,其方程如下:,只需知道角速度的微分方程。

  从而转为代码得到:

  #其中lam,mu,G_L1,M是全局变量

  def derivs(州,t):

  dydx=np.zeros_like(state)

  th1,om1,th2,om2=状态

  dydx[0]=状态[1]

  delta=状态[2] -状态[0]

  cDelta,sDelta=np.cos(delta),np.sin(delta)

  sTh1,_,sTh2,_=np.sin(状态)

  den1=M - mu*cDelta**2

  dydx[1]=(mu * om1 * * 2 * s delta * c delta

  mu * G_L1 * sTh2 * cDelta

  mu * lam * om2**2 * sDelta

  - M * G_L1 * sTh1)/den1

  dydx[2]=状态[3]

  den2=lam * den1

  dydx[3]=(-mu * lam * om2 * * 2 * s delta * c delta

  M * G_L1 * sTh1 * cDelta

  - M * om1**2 * sDelta

  - M * G_L1 * sTh2)/den2

  返回dydx

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

  #这段代码用来设置初始值,调用integrate求解微分方程。

  将numpy作为np导入

  将scipy.integrate导入为integrate

  G=9.8

  L2 L1=1.0,1.0

  L1=L1

  Lam=L2/L1 #杆长比L2/L1

  =1.0 #质量比M2/M1

  M=1亩

  #生成时间

  dt=0.01

  t=np.arange(0,20,dt)

  Th1,th2=120.0,-10.0 #初始角度

  1,om2=0.0,0.00 #初始角速度

  state=np .弧度([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

  此时得到所有位置的坐标,这样就可以观察到如图所示的双摆的运动轨迹。

  绘图代码为:

  将matplotlib.pyplot作为plt导入

  plt.scatter(x1,y1,marker= . )

  plt.scatter(x2,y2,marker= . )

  plt.show()

  如果把时间设定的长一点,然后在画图的时候改变颜色,就会看到双摆的运动间隔,可见大自然是相当多愁善感的。

  其绘图代码为:

  plt.plot(x1,y1,marker= . =0.2,线宽=0.2)

  plt.plot(x2,y2,marker= . ,alpha=0.2,线宽=2,c=r )

  plt.axis(“关”)

  plt.show()

  当然也可以把它的轨迹用三维的形式画出来。

  ax=plt.gca(投影=3d )

  ax.plot3D(t,x1,y1,线宽=1)

  plt.show()

  嗯.嗯,好像我没有什么感觉。

  但是,如果把这两个球分别看成两个星球,我们在一个星球上,那么观测到的另一个星球的运动大致如下。毫不奇怪,它是一个圆。毕竟两个圆之间的距离是恒定的。

  绘图代码为:

  ax=plt.gca(投影=3d )

  ax.plot3D(t,x2-x1,y2-y1,线宽=0.5)

  plt.show()

  如果您更改初始值,图形将如下变化

  初值设为:

  Th1,th2=0,0 #初始角度

  1,om2=120.0,108.00 #初始角速度

  

1.双摆问题

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

  代码为:

  将matplotlib.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)

  #初始化图形

  定义初始化():

  line.set_data([],[])

  时间文本设置文本()

  返回行,时间_文本

  定义动画(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))

  返回行,时间_文本

  ani=动画。FuncAnimation(fig,animate,range(1,len(y)),

  interval=dt*1000,blit=True,init_func=init)

  ani.save(dua_1.gif ,writer=imagemagick )

  plt.show()

  

2.运动过程

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

  根据拉格朗日方程

  则有:

  其中,

  展开可得则:

  关于用Python画双摆的这篇文章到此为止。关于用Python绘制双摆的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: