介绍
本篇文章给大家分享的是有关怎么在python项目中动态生成一个波形曲线,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>用到的模块:强>
* matplotlib。pyplot
* matplotlib.animation。* numpy FuncAnimation
三个圆的半径分别为:5、2、1 .
三个点旋转的角频率分别为:1,3,5 .
<强>生成固定的圆——基础圆强>
xdata =, np.linspace (0, 2, *, np.pi,, 50) 无花果,ax =, plt.subplots (1,, 1,, figsize=(8, 5)) 时间=b_cir ax.plot (5, *, np.cos (xdata), 5, *, np.sin (xdata)) #,配置下画布 ax.spines[& # 39;底部# 39;].set_visible (False),, #,清除下脊 ax.spines[& # 39;顶部# 39;].set_visible (False),,,, #,清除上脊 ax.spines[& # 39;左# 39;].set_visible (False),,, #,清除左脊 ax.spines[& # 39;对# 39;].set_visible (False),,, #,清除右脊 #,取消刻度和数字标签 ax.tick_params(底部=& # 39;从# 39;,,左=& # 39;从# 39;,,labelbottom=& # 39;从# 39;,,labelleft=& # 39;从# 39;)
<强>生成第1个移动点强>
? ?根据圆上点的坐标公式,更新点的位置:
x =, r *,因为(w *, t), +, a *=y r 罪(w *, t), +, b def 更新(帧): 时间=movX1 才能;5,*,np.cos (frame *, 1) 时间=movY1 才能;5,*,np.sin (frame *, 1) movp1.set_data才能(movX1, movY1),, #,更新移动点数据 return 才能;movp1,,,, #,还是得有& # 39;,& # 39; ani =, FuncAnimation(无花果,更新,?xdata,位块传输=True)
<强>生成第1个移动圆强>
? ?根据坐标系中任意位置上圆的公式,计算移动的圆。
c_sub1,,=, ax.plot([],[],,动画=True) #,修改,update 函数生成在基础圆上移动的圆 def 更新(帧): #才能,计算移动点 #才能,计算移动圆 时间=c_sub1X 才能;2,*,np.cos (xdata), + movX1 时间=c_sub1Y 才能;2,*,np.sin (xdata), + movY1 #,才能更新移动点数据 c_sub1.set_data才能(c_sub1X, c_sub1Y) return 才能;movp1, c_sub1,
<强>生成第2个移动点和移动圆强>
? ?生成的方式和前面的类似
movp2,,=, ax.plot ([], [],, & # 39; ro # 39;,,动画=True) c_sub2,,=, ax.plot([],[],,动画=True) def 更新(帧): 1 #,计算第个移动点和圆 #,计算第2个移动点和圆 +=movX2 movX1 2, *, np.cos (* frame 3) +=movY2 movY1 2, *, np.sin (* frame 3) c_sub2X =, 1, *, np.cos (xdata), + movX2 c_sub2Y =, 1, *, np.sin (xdata), + movY2 1 #,更新第个移动点和圆 #,更新第2个移动点和圆 movp2.set_data (movX2, movY2) c_sub2.set_data (c_sub2X, c_sub2Y) return movp1, c_sub1, movp2,, c_sub2,
<强>生成波形曲线强>
? ?生成的波形曲线,其实就是3个圆生成的正弦曲线的叠加值:
sineTotal=sine1 + sine2 + sine3
sin,,=, ax.plot (xdata +, 10日,np.zeros (50)) def 更新(帧): 1 #,计算第个移动点和圆 #,计算第2个移动点和圆 #,计算波形曲线的,y 值 时间=s 5, *, np.sin ((xdata +帧),*,1),+ \ 2,才能*,np.sin ((xdata +帧),*,3),+ \ ,,1,*,np.sin ((xdata +帧),*,5) 1 #,更新第个移动点和圆 #,更新第2个移动点和圆 #,更新波形曲线 sine.set_ydata (s) return movp1, c_sub1, movp2,, c_sub2,, sin,
<强>加条直线指示下强>
? ?直线就是,第3个移动圆上的移动点与波形末端的连线。
movp3,,=, ax.plot ([], [],, & # 39; ro # 39;,,动画=True), #,添加第3个圆上的移动点 ln,,=, ax.plot([],[],,动画=True) def 更新(帧): 1 #,计算第个移动点和圆 #,计算第2个移动点和圆 #,计算波形曲线的,y 值 3 #,计算第个移动点 +=movX3 movX2 1, *, np.cos (* frame 5) +=movY3 movY2 1, *, np.sin (* frame 5) 1 #,更新第个移动点和圆 #,更新第2个移动点和圆 #,更新波形曲线 ln.set_data ([movX3, 10, +, 2, *, np.pi],, [movY3 movY3也]) null null怎么在python项目中动态生成一个波形曲线