本文将开发产生圆形鼓面声波图形所需的图形和动画机制。
理论
一维波形可以通过傅立叶分析描述为由正弦波之和组成,以整数谐波间隔组成。
在敲击乐器(例如鼓)的作用下,二维膜上的波传播受贝塞尔微分方程x2d2ydx2+xdydx +x2-2y=0
的控制。 x = 0的值被称为第一类贝塞尔函数,可用于模拟圆形或环形薄膜(例如铃鼓或鼓头)的振动模式。 下面绘制了α= 0、1、2时的第一类Jα的贝塞尔函数。
圆形传播的弹性薄圆形膜受贝塞尔微分方程解的控制。 谐波不再是基频的整数倍之和,而是谐音。 相反,鼓面模式是由多个不和谐部分,基本频率的非整数倍组成,也即是谐音。
在二维中,这些鼓面模式看起来像轮廓图:
而在3D上,高度膨胀,它们看起来像下面图像:
这些模式的动画是通过双重缓冲技术实现的。 两个相同的缓冲区
以及指向每个缓冲区的一对指针。 完成绘图后,将交换两个指针。 这样,当前的显示缓冲区将成为先前的绘图缓冲区,而新的图形缓冲区将成为先前的显示缓冲区。
Python实现
所需库
绘制贝塞尔函数
作为一个简单的图形函数示例
特点说明:
在iPython中输入%matplotlib之后,打开交互式绘图
结果数字应与之前显示的数字进行比较
3D绘图
特点说明:
结果图形:
正弦求和的方波动画
该程序作为简单的2D动画,说明了的加法合成器。
特点说明:
结果图形:
沿轴传播3D波形动画
使用基本的双缓冲,在重绘缓冲区之前先清除缓冲区和mplot3d工具包,可以创建非常有效的波传播动画。
特点说明:
清理缓存Python 声波 动画模拟 傅里叶变换 Numpy scipy MatplotlibPython 声波 动画模拟 傅里叶变换 Numpy scipy Matplotlib