嗨,今天,我想为您提供视觉帮助,以对一些物理过程进行建模,并展示如何获取精美的图像和动画。注意很多图片。
所有代码都可以在google colab中找到。理论
首先,我们需要在这个主题上有一个小的理论上的下限。让我们首先了解什么是张力线以及如何计算它们。实际上,这些线是许多张力矢量的合并,可以按以下方式计算:。
E计算方法
我通过三角形的相似性计算了张力矢量,从而分别获得了x和y轴dx和dy的投影。
从相似性出发,可以得出从电荷到空间r中的点的向量的半径以及强度向量E的长度等于这些向量的投影比(分别为x1和dx)。。所得向量的公式有了这些知识,我们得到了第一个结果。
投影计算功能def E(q_prop, xs, ys, nq):
l=1
k=9*10**9
Ex=0
Ey=0
c=0
for c in range(len(q_prop)):
q=q_prop[c]
r=((xs-q[0])**2+(ys-q[1])**2)**0.5
dEv=(k*q[2])/r**2
dEx=(xs-q[0])*(dEv/r)*l
dEy=(ys-q[1])*(dEv/r)*l
Ex+=dEx
Ey+=dEy
return Ex, Ey
线施工方法
首先,您需要确定直线和文档的起点和终点。起点是围绕装药的半径为r的圆上的点,终点与装药之间的距离不超过r。起点代码theta = np.linspace(0, 2*np.pi, n)
mask=q_prop[ q_prop[:,2]>0 ]
for cq in range(len(mask)):
qmask=mask[cq]
xr = r_q*np.cos(theta)+qmask[0]
yr = r_q*np.sin(theta)+qmask[1]
因此,值得一提的是,这些线仅由正电荷构成。最后,建造线。为此,我们从起点开始在其中构建张力矢量线,在构造的线的末端更新起点,然后重复直到达到上述结束条件。
线坐标计算功能def Draw(size, q_prop,r_q, n):
linen=np.empty((np.count_nonzero(q_prop[:,2]>0),n, 2000000), dtype=np.float64)
linen[:] = np.nan
theta = np.linspace(0, 2*np.pi, n)
mask=q_prop[ q_prop[:,2]>0 ][ q_prop[q_prop[:,2]>0][:,3]==1 ]
for cq in range(len(mask)):
qmask=mask[cq]
x11 = r_q*np.cos(theta)+qmask[0]
x22 = r_q*np.sin(theta)+qmask[1]
for c in range(len(x11)):
xs=x11[c]
ys=x22[c]
lines=np.empty((2,1000000), dtype=np.float64)
lines[:]=np.nan
stop=0
nnn=0
lines[0][nnn]=xs
lines[1][nnn]=ys
while abs(xs)<size+2 and abs(ys)<size+2:
nnn+=1
for cq1 in range(len(q_prop)):
q=q_prop[cq1]
if ((ys-q[1])**2+(xs-q[0])**2)**0.5<r_q/2 :
stop=1
break
if stop==1:
break
dx, dy = E1(q_prop,xs,ys)
xs+=dx
ys+=dy
lines[0][nnn]=xs
lines[1][nnn]=ys
linen[cq,c,:]=lines.reshape(-1)
return linen
收费之间的互动
为了反映它们的相互作用,必须在每个小时间dt之后更改其坐标和速度。

用于更新充电速度的坐标和投影的功能def Update_all(q_prop):
vx=0
vy=0
x=0
y=0
q_prop_1=np.copy(q_prop)
for c in range(len(q_prop)):
xs=q_prop[c][0]
ys=q_prop[c][1]
q =q_prop[c][2]
m =q_prop[c][3]
vx=q_prop[c][4]
vy=q_prop[c][5]
Ex, Ey= E(q_prop, xs, ys, c)
x=(((Ex*q)/m)*dt**2)/2+vx*dt+xs
y=(((Ey*q)/m)*dt**2)/2+vy*dt+ys
vx+=((Ex*q)/m)*dt
vy+=((Ey*q)/m)*dt
q_prop_1[c]=[x,y,q,m,vx,vy]
return q_prop_1
重力
在现有代码的基础上,我编写了一个模拟器,该模拟器反映了重力作用下物体的运动。代码的更改主要是针对张力函数,因为 现在将使用类似公式考虑加速度。
行星从x轴以近日点距离和近日点速度开始。目录中所有行星和太阳的值(质量,距离,末端)。前4个行星+太阳的动画。
等待批评和建议。再见