【发布时间】:2020-07-11 19:40:39
【问题描述】:
我正在尝试制作像这样的interference figure 动画:
不同之处在于上图显示了一段时间内的干涉图,因此相长干涉和相消干涉点保持不变。相反,我正在尝试制作一个动画,在其中更改两个源的频率,将它们固定在空间中。
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
source = 0.5
sources = [-source, source]
axlim = max(sources)*2 + 1
N = 1000
x = np.linspace(-axlim, axlim, N)
y = np.linspace(-axlim, axlim, N)
X, Y = np.meshgrid(x, y)
fig = plt.figure()
def update(f):
plt.gca().cla()
C1 = np.sin(2*np.pi*f*((X - sources[0])**2 + Y**2))
C2 = np.sin(2*np.pi*f*((X - sources[1])**2 + Y**2))
Z = C1 + C2
plt.contour(X, Y, Z)
plt.plot(sources, [0, 0], 'ro')
plt.gca().set_aspect('equal')
plt.axis('off')
ani = FuncAnimation(fig = fig, func = update, frames = 11, interval = 100)
plt.show()
问题是奇怪的模式出现在最后几帧中:
那些模式不是物理的(它们不符合物理定律),所以我的代码一定有错误。我不知道在哪里,但我认为问题出在 matplotlib contour 函数中:我怀疑它引入了一种别名......
【问题讨论】:
-
那些是波纹图案。建议你使用interpolation=hanning来最小化。
-
很抱歉,我看到您正在使用轮廓。这仍然是同样的问题:您没有足够的 dpi 来解析矩阵中的最高频率。我会弄清楚你需要多少个点来表示你的轴,然后让你的模拟在每个维度上都小于一半,这样每个像素都会被过采样。即使 N 相当小。
标签: python python-3.x matplotlib animation physics