使用Matplotlib的三维动画不起作用

2024-06-12 08:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作激光穿过圆柱形光纤的路径动画。这个想法是从纤维的一端开始,沿着它画一条线,然后回到起始端,同时沿着纤维的周长移动并重复,直到纤维的一半被覆盖。我使用的大部分代码都来自于在线示例,似乎什么都不起作用。我的非工作代码如下:

from numpy import *
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time

r=1.0 #radius of capillary
L=1.0 #Length of capillary
d=0.1 #separation of lines


def fibre_curve():
    b=-r #position of each line with respect to the radial component
    i=0.1
    while b <=r:
        x=arange(0,L,i) #sets up the x-coordinate system needed for each data point
        for i in x:
            u=d*x+b
            y=0*x+b
            z1=sqrt((r**2)-(y**2))
            z2=sqrt((r**2)-(u**2))
        b=b+d
    return x,y,u,z1,z2

def init():
    ax.set_ylim(-r,r)
    ax.set_xlim(0,L)
    ax.set_zlim(-r,r)
    del xdata[:]
    del ydata[:]
    del udata[:]
    del z1data[:]
    del z2data[:]
    line1.set_data(xdata,ydata,z1data)
    line2.set_data(xdata,udata,z2data)
    return line,

fig = plt.figure()
ax = fig.gca(projection='3d') #tells python to make 3d plot
line1, = ax.plot([],[],[], color='blue')
line2, = ax.plot([],[],[], color='red')

xdata=[]
ydata=[]
udata=[]
z1data=[]
z2data=[]

def animate1(i):
    xdata.append(x)
    ydata.append(y)
    z1data.append(z1)
    line1.set_data(xdata,ydata,z1data)
    return line1,

def animate2(j):
    xdata.append(x)
    udata.append(u)
    z2data.append(z2)
    line2.set_data(xdata,udata,z2data)
    return line2,

ani1=animation.FuncAnimation(fig,animate1,fibre_curve,init_func=init,
interval=20,blit=False)
ani2=animation.FuncAnimation(fig,animate2,fibre_curve,init_func=init,
interval=20,blit=False)
plt.show()

错误是:要解包的值太多。你知道吗


Tags: ofimportdatainitdefaxdelset