当两个或多个波源在同一介质中发出波动时,波动会在空间中相遇并叠加。在某些位置,波峰遇到波峰(相长干涉),振幅加倍;在另一些位置,波峰遇到波谷(相消干涉),彼此抵消。这个模拟器让你在二维平面上自由放置波源,实时观察干涉图样的形成。
叠加原理是线性波动系统最核心的性质:合位移等于各波位移的代数和。干涉图样中出现的明暗条纹(或彩色区域),正是这一原理在空间上的直接表现。
点波源在二维平面上发出的球面波(在二维中退化为圆形波)的位移场为:
其中各参数的含义:
| 符号 | 名称 | 说明 |
|---|---|---|
| \(A\) | 振幅 | 波的最大位移,控制明暗对比度 |
| \(r = \sqrt{(x - x_0)^2 + (y - y_0)^2}\) | 到波源的距离 | 波源 \((x_0, y_0)\) 到场点 \((x, y)\) 的欧氏距离 |
| \(k = \dfrac{2\pi f}{v}\) | 波数 | 单位长度上的相位变化,\(f\) 为频率,\(v\) 为波速 |
| \(\omega = 2\pi f\) | 角频率 | 相位随时间的变化率 |
| \(\dfrac{1}{\sqrt{\alpha r + 1}}\) | 空间衰减 | 模拟能量在二维中的几何扩散;\(\alpha\) 控制衰减速率 |
在三维空间中,球面波按 \(1/r\) 衰减(能量守恒:流过球面的总能流恒定)。在二维模拟中采用 \(1/\sqrt{\alpha r + 1}\) 的衰减形式,既能体现出离波源越远振幅越小,又能避免 \(r \to 0\) 时的奇异性。
当存在 \(N\) 个波源时,空间中任意一点的合位移为各波源贡献的代数和:
这是线性叠加——波动方程是线性的,所以解的线性组合仍然是解。干涉图样的所有复杂性都来自这个简单的加法。
考虑两个同频、同幅、同相的波源 S₁ 和 S₂,在空间某点 P:
这些干涉条纹形成一族双曲线——到两个定点距离之差为常数的点的轨迹。
模拟器包含一个可选的多普勒演示模式。当波源移动时,波源前方的波长被压缩(频率变高),后方波长被拉伸(频率变低)。这在模拟中以波源位置随时间线性变化来实现:
每一帧渲染时,波源位置已更新,导致波前的间距在运动方向上呈现不均匀分布——这就是多普勒效应的空间表现。
| 功能 | 操作 | 说明 |
|---|---|---|
| 添加波源 | 点击画布空白处 | 在点击位置创建新点波源 |
| 拖拽波源 | 按住波源拖动 | 改变波源位置,实时观察干涉图样的变化 |
| 删除波源 | 右键点击波源 | 移除选中的波源 |
| 双缝预设 | 点击"双缝"按钮 | 自动设置两个同频波源,展示经典双缝干涉条纹 |
| 多普勒演示 | 点击"多普勒"按钮 | 波源沿直线匀速运动,观察波前压缩与拉伸 |
| 暂停/继续 | 按钮或空格键 | 冻结波的传播,便于仔细分析干涉图样 |
| 重置 | 按钮 | 清除所有波源,恢复初始状态 |
模拟器采用逐像素的渲染方式:对画布上的每个像素,计算其世界坐标,叠加所有波源的贡献,将最终位移值映射为颜色。
使用 ImageData 直接操作像素缓冲区,并通过 putImageData 一次性提交到 Canvas,避免逐像素调用绘图 API 的性能开销。
合位移经 \(\tanh\) 函数压缩到 \([-1, 1]\) 后映射为颜色:
| 位移 | 颜色 | 含义 |
|---|---|---|
| \(v > 0\) | 暖色(红 → 橙) | 正向位移(波峰) |
| \(v < 0\) | 冷色(蓝 → 青) | 负向位移(波谷) |
| \(v \approx 0\) | 深暗色(近黑) | 相消干涉——两波几乎完全抵消 |
\(\tanh\) 压缩的目的:单波源的位移范围随距离衰减变化很大,直接映射会使近源处过饱和而远处几乎不可见。\(\tanh\) 的非线性压缩使整个画面的对比度更加均匀。
双缝干涉是波动光学中最经典的实验。两个相距很近的同相波源产生稳定的干涉条纹——杨氏双缝实验的二维类比。预设中两个波源沿 y 轴放置,间距约 50 像素,对应 "双缝" 的物理位置。