背景知识视频教程

本文将开发产生圆形鼓面声波图形所需的图形和动画机制。

理论

一维波形可以通过傅立叶分析描述为由正弦波之和组成,以整数谐波间隔组成。

在敲击乐器(例如鼓)的作用下,二维膜上的波传播受贝塞尔微分方程



的控制。 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限制

允许绘制第一帧

清理缓存