我正致力于激光穿过圆柱形光纤的激光路径。我们的想法是从光纤的一端开始,沿着它画一条线,然后沿着光纤的周边移动回到起始端,然后重复,直到光纤的一半被覆盖。我使用的大部分代码都来自在线示例,似乎没有任何效果。我的非工作代码如下:
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()
错误是:解包的值太多。