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