首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python模拟不起作用

Python模拟不起作用
EN

Stack Overflow用户
提问于 2014-02-19 02:24:25
回答 2查看 286关注 0票数 0

我正在创建一个Python模拟模型,模拟重力波中的水粒子。到目前为止我的代码是

代码语言:javascript
复制
import numpy as np
#import matplotlib
import matplotlib.pyplot as plt
#import pylab

#pylab.ion()

h = 2     # water depth
D = 0.4   # wave amplitude
k = 1     # wave number

ds = 0.5
x = np.arange(0, 15+ds, ds)
y = np.arange(0, h+ds, ds)
g = 10
w = np.sqrt(g*k*np.tanh(k*h))
T = 2*np.pi/w
xx,yy = np.meshgrid(x,y)
hp = plt.plot(xx[:],yy[:],'x')
plt.axis('equal')
plt.axis([0,15,0,8]) #axis equal
N = 24

#matplotlib.interactive(True)

t = 0
while (True):
    t = t + T/N
    dispx = D/np.sinh(k*h) * np.outer(np.cosh(k*y), np.cos(k*x-w*t))
    dispy = D/np.sinh(k*h) * np.outer(np.sinh(k*y), np.sin(k*x-w*t))
    plt.setp(hp,'XData',xx[:]+dispx[:], 'YData',yy[:]+dispy[:])
    plt.drawNow()

我只是得到一个静态的图像,我知道我已经接近了。我还应该加些什么才能让所有东西都动起来?最好是实时绘图。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-19 04:10:58

您可以使用计时器回调:

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt

h = 2     # water depth
D = 0.4   # wave amplitude
k = 1     # wave number

ds = 0.5
x = np.arange(0, 15+ds, ds)
y = np.arange(0, h+ds, ds)
g = 10
w = np.sqrt(g*k*np.tanh(k*h))
T = 2*np.pi/w
xx,yy = np.meshgrid(x,y)
hp = plt.plot(xx[:],yy[:],'x')
plt.axis('equal')
plt.axis([0,15,0,8]) #axis equal
N = 24

fig = plt.gcf()

def update():
    t = 0
    while (True):
        t = t + T/N
        dispx = D/np.sinh(k*h) * np.outer(np.cosh(k*y), np.cos(k*x-w*t))
        dispy = D/np.sinh(k*h) * np.outer(np.sinh(k*y), np.sin(k*x-w*t))
        plt.setp(hp,'XData',xx[:]+dispx[:], 'YData',yy[:]+dispy[:])
        fig.canvas.draw_idle()
        yield

timer = fig.canvas.new_timer(interval=10)
timer.add_callback(update().next)
timer.start()

plt.show()
票数 2
EN

Stack Overflow用户

发布于 2014-02-19 04:54:59

我能够在我的笔记本电脑上获得15 fps,只需在导入pyplot并将plt.drawNow()更改为plt.draw()之后添加plt.drawNow()即可。第二步是因为我在pyplot中没有drawNow方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21869765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档