東華大學_普通物理_葉旺奇作業
physis
dB⃗ =μ04πids⃗ ×r⃗ r3
我認為是經由高斯定律推廣而得
rho.x=coil.x
rho.y=coil.y
rho.z=0
得到rho方向的向量,其中coil.x 和 coil.y 為分割成許多微小長方體的x,y座標
rho=rho.norm()
X=dP*rho
Y=(Jdirection.cross(rho)).norm()
Y*=r*dtheta
Z=dL*Jdirection
定出微小長方體,三個方向的向量
dp
dL
dtheta
Jdirection
if p<line.radius:
if abs(dot(R,X))/X.mag<X.mag and dot(R,X)>0:
if abs(dot(R,Y))/Y.mag<Y.mag and dot(R,Y)>0:
if abs(dot(R,Z))/Z.mag< Z.mag and dot(R,Z)>0:
continue
如果R向量長度小於diagonal則省略不計算此直
缺點無法判別是否處於微小長方體內部或外部
diagonal=sqrt(dP*dP+dL*dL+(dtheta*r)*(dtheta*r))
1.測試點距離和所受磁場強度成正比
2.磁場方向為切線方向
from visual import*
from visual.graph import*
#from math import*
scene=display(width=1000,height=800,background=color.white,center=(0,1,0))#畫視窗&背景
dots=sphere(color=color.red,radius=0.01,pos=(0,0,3))
line=cylinder(color=color.blue,radius=0.1,pos=(0,0,0),axis=(0,0,6),Length=6)
coil=vector(0,0,0)
f=gdots(color=color.red)
f1=gdots(color=color.green)
#J=I/A current density
Jdirection=vector(0,0,1)
J=Jdirection*1/(pi*line.radius*line.radius)
mui=4*pi*10**-7
R=vector(0,0,0)
dL=line.length/100
dP=line.radius/20
dtheta=2*pi/20
B=vector(0,0,0)
X=vector(0,0,0)
Y=vector(0,0,0)
Z=vector(0,0,0)
row=vector(0,0,0)
i=0
for p in arange(0.0,4*line.radius,2*line.radius/50):
i=i+1
dots.pos.x=p*cos(pi/4)
dots.pos.y=p*sin(pi/4)
B.x=0
B.y=0
B.z=0
#直角坐標轉圓柱座標
B1=vector(0,0,0)
check=0
for r in arange(0.01,line.radius,dP):
for theta in arange(0,2*pi,dtheta):
for L in arange(0.0,line.Length,dL):
coil.x=r*cos(theta)
coil.y=r*sin(theta)
coil.z=L
R=dots.pos-coil
diagonal=sqrt(dP*dP+dL*dL+(dtheta*r)*(dtheta*r))
row.x=coil.x
row.y=coil.y
row.z=0
row=row.norm()
X=dP*row
Y=(Jdirection.cross(row)).norm()
Y*=r*dtheta
Z=dL*Jdirection
if p<line.radius:
if abs(dot(R,X))/X.mag<X.mag and dot(R,X)>0:
if abs(dot(R,Y))/Y.mag<Y.mag and dot(R,Y)>0:
if abs(dot(R,Z))/Z.mag< Z.mag and dot(R,Z)>0:
continue
B+=cross(J,(R.norm()))*dP*dtheta*dL*r/R.mag2
#B+=cross( R, dL*line.pos.norm() )/R.mag2
#Rx dline /R^2
B*=mui/(4*pi)
f.plot(pos=(p,B.mag))
#for phi in arange(0,2*pi,dtheta):
#a=arrow(pos=sun.pos,color=color.black,axis=B)
#scene,center forward
from visual import*
from visual.graph import*
from math import*
scene=display(width=1000,height=800,background=color.white,center=(0,1,0))#畫視窗&背景
dots=sphere(color=color.red,radius=0.01,pos=(0,0,3))
line=cylinder(color=color.blue,radius=0.1,pos=(0,0,0),axis=(0,0,6),Length=6)
coil=vector(0,0,0)
f=gdots(color=color.red)
f1=gdots(color=color.green)
#J=I/A current density
Jdirection=vector(0,0,1)
J=Jdirection*1/(pi*line.radius*line.radius)
mui=4*pi*10**-7
R=vector(0,0,0)
dL=0.05
dP=line.radius/20
dtheta=2*pi/20
B=vector(0,0,0)
X=vector(0,0,0)
Y=vector(0,0,0)
Z=vector(0,0,0)
row=vector(0,0,0)
i=0
for p in arange(0.0,2*line.radius,2*line.radius/50):
s=0
for phi in arange(0,2*pi,dtheta):
dots.pos.x=p*cos(phi)
dots.pos.y=p*sin(phi)
B.x=0
B.y=0
B.z=0
#直角坐標轉圓柱座標
for r in arange(0.001,line.radius,dP):
for theta in arange(0,2*pi,dtheta):
for L in arange(0.0,line.Length,dL):
coil.x=r*cos(theta)
coil.y=r*sin(theta)
coil.z=L
R=dots.pos-coil
diagonal=sqrt(dP*dP+dL*dL+(dtheta*r)*(dtheta*r))
row.x=coil.x
row.y=coil.y
row.z=0
row=row.norm()
X=dP*row
Y=(Jdirection.cross(row)).norm()
Y*=r*dtheta
Z=dL*Jdirection
if p<line.radius:
if abs(dot(R,X))/X.mag<X.mag and dot(R,X)>0:
if abs(dot(R,Y))/Y.mag<Y.mag and dot(R,Y)>0:
if abs(dot(R,Z))/Z.mag< Z.mag and dot(R,Z)>0:
continue
B+=cross(J,(R.norm()))*dP*dtheta*dL*r/R.mag2
#B+=cross( R, dL*line.pos.norm() )/R.mag2
#Rx dline /R^2
B*=mui/(4*pi)
s+=dot(B,p*10/pi*B.norm() )
f.plot(pos=(p,s))
rate(1000)
#for phi in arange(0,2*pi,dtheta):
#a=arrow(pos=sun.pos,color=color.black,axis=B)
#scene,center forward