Hallo, heute möchte ich Ihnen eine visuelle Hilfe zum Modellieren einiger physikalischer Prozesse anbieten und zeigen, wie Sie schöne Bilder und Animationen erhalten. Achtung viele Bilder.
Der gesamte Code ist in Google Colab zu finden .Theorie
Erstens brauchen wir ein kleines theoretisches Minimum zu diesem Thema. Beginnen wir damit, zu verstehen, was Spannungslinien sind und wie man sie zÀhlt. TatsÀchlich sind diese Linien die Verschmelzung vieler Spannungsvektoren, die wie folgt berechnet werden können:.
E Berechnungsmethode
Ich habe den Spannungsvektor durch die Ăhnlichkeit von Dreiecken berechnet und dabei Projektionen auf die x- und y-Achse dx bzw. dy erhalten.
Aus der Ăhnlichkeit folgt, dass der Radius des Vektors von der Ladung zum Punkt im Raum r und die LĂ€nge des IntensitĂ€tsvektors E gleich dem VerhĂ€ltnis der Projektionen dieser Vektoren (x1 bzw. dx) sind.. Formel des resultierenden VektorsMit diesem Wissen erhalten wir das erste Ergebnis.
Projektionsberechnungsfunktiondef 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
Linienbauweise
Zuerst mĂŒssen Sie den Start- und Endpunkt festlegen, von dem aus die Linie und das Dokument ausgehen. Der Anfang sind Punkte auf einem Kreis mit einem Radius r um die Ladung, und die Endpunkte sind nicht mehr als r von den Ladungen entfernt.Code fĂŒr Startpunktetheta = 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]
Es ist also erwĂ€hnenswert, dass die Leitungen nur aus positiven Ladungen gebaut werden.Und schlieĂlich der Bau von Linien. Dazu bauen wir die Linie des darin enthaltenen Spannungsvektors vom Startpunkt aus auf, aktualisieren den Startpunkt am Ende der konstruierten Linie und wiederholen, bis die oben genannten Endbedingungen erreicht sind.
Linienkoordinatenberechnungsfunktiondef 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
Interaktion zwischen GebĂŒhren
Um ihre Interaktion widerzuspiegeln, ist es notwendig, ihre Koordinaten und Geschwindigkeit nach jeder kleinen Zeit dt zu Àndern.

Funktion zum Aktualisieren von Koordinaten und Projektionen von Ladegeschwindigkeitendef 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
Schwere
Basierend auf dem vorhandenen Code habe ich einen Simulator geschrieben, der die Bewegungen von Körpern unter dem Einfluss der Schwerkraft widerspiegelt. Ănderungen im Code betreffen seitdem hauptsĂ€chlich die Spannungsfunktion Die Beschleunigung wird nun unter Verwendung einer Ă€hnlichen Formel betrachtet.
Planeten starten von der x-Achse in Perihelentfernung und mit Perihelgeschwindigkeit. Alle Werte der Planeten und der Sonne (Masse, Entfernung, ExtremitĂ€ten) aus dem Verzeichnis.Animation fĂŒr die ersten 4 Planeten + Sonne.
Warten auf Kritik und VorschlÀge. Auf Wiedersehen.