Guten Tag , ich habe ein problem bei der Einberechnung der Gravitation zwischen zwei Bällen, es muss irgendwo ein Denkfehler vorliegen.
Die Punkte bleiben auf der Stelle stehen.
Die v1 v2 arrays habe ich erstellt für den nächsten fall wenn die bälle eine anfangsgeschwindigkeit haben und aneinander vorbeifliegen während die kraft fg wirkt.
mir geht es um die einberechnung von FG in die schleifenformel d12 und die dadurch änderung von r1[k+1] und r2 [k+1]
hier kommt der code
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from IPython.display import HTML
%matplotlib inline
t_max = 10 # Zeitfenster für die Animation in s
v1_0 = np.array([0, 0]) # Anfangsgeschw. in LE/s
r1_0 = np.array([0, 0.75]) # Angangsposition in LE
v2_0 = np.array([0, 0]) # Anfangsgeschw. in LE/s
r2_0 = np.array([0, -0.75]) # Angangsposition in LE
frame_rate = 30 # Anzahl der Frames pro s
dt = 1. / frame_rate # Zeitdelay zwischen 2 Frames in sec
t = np.arange(0, t_max, dt)
npts = len(t); npts
m1 = 10000
m2 = 20000
g_const = 6.67259 * 10**(-11)
v1 = np.zeros((npts, 2)) # eine 300 x 2 Nuller-Matrix wird erstellt
v1[0] = v1_0 # als Startwerte werden die Geschwindigkeiten und Richtungen aus der Abbildung von der Aufgabenstellung
r1 = np.zeros((npts, 2)) # hier reingeschrieben. Startwerte werden bei 1.2 definiert
r1[0] = r1_0
v2 = np.zeros((npts, 2))
v2[0] = v2_0
r2 = np.zeros((npts, 2))
r2[0] = r2_0
d12 = np.zeros((npts,2))
FG =((g_const*m1*m2)/d[0]**2) #Schleife zur Abstandsberechnung
d12[0] = FG
for i in np.arange(npts-1):
d12[i+1] = g_const*m1*m2/d**2
for k in np.arange(npts-1):
v1[k+1] = v1[k] - dt*d12[k]
r1[k+1] = r1[k] + v1[k] * dt
for k in np.arange(npts-1):
v2[k+1] = v2[k] + dt*d12[k]
r2[k+1] = r2[k] + v2[k] * dt
r1x = r1[:, 0]
r1y = r1[:, 1]
r2x = r2[:, 0]
r2y = r2[:, 1]
diffrx = r2x - r1x
diffry = r2y - r1y
#Berechnung des Abstandes der zwei punkte
diffrx = diffrx**2
diffry = diffry**2
d = np.sqrt(diff)
def animate(k, t, r):
point1.set_data(r1[k, 0], r1[k, 1])
point2.set_data(r2[k, 0], r2[k, 1])
time_text.set_text(time_template %(t[k]))
return (point1, point2, time_text)
# Erzeuge ein figure-Objekt (so etwas wie eine canvas)
fig = plt.figure(figsize=(5, 5))
# Erzeuge ein axes-Objekt (artist) innerhalb der Figure
ax = fig.add_subplot()
#fig, ax = plt.subplots(figsize=(5, 5))
# Definiere die Achsenabschnitte
ax.set_xlim((-1, 1))
ax.set_ylim((-1, 1))
# Definiere die Objekte `point` und `time_text`, die animiert werden sollen
point1, = ax.plot([], [],"o", lw=2)
point2, = ax.plot([], [],"o", lw=2)
time_template = "t = %1.2f s"
time_text = ax.text(0.5, 1.05, '', horizontalalignment='center',
transform=ax.transAxes)
plt.grid()
# Initialisierungsfunktion für die Animation
def init():
point1.set_data([], [])
point2.set_data([], [])
time_text.set_text("")
return (point1, point2, time_text)
# Animationsfunktion, die sequentiel aufgerufen wird
anim1 = animation.FuncAnimation(fig, func=animate, frames=npts, init_func=init,
fargs=(t,r1),
interval=1./frame_rate*1000.,
blit=True, repeat=False)
anim2 = animation.FuncAnimation(fig, func=animate, frames=npts, init_func=init,
fargs=(t,r2),
interval=1./frame_rate*1000.,
blit=True, repeat=False)
HTML(anim1.to_html5_video())
HTML(anim2.to_html5_video())
#HTML(anim.to_jshtml())
Vielleicht hat ja jemand eine idee und hilft einem sehr verzweifelten pythonneuling
Gravitation zwischen 2 bällen
-
- User
- Beiträge: 23
- Registriert: Montag 16. November 2020, 15:11
Du brauchst mir garnix "Anheimstellen" , ich habe nicht gefunden wo diese code tags sind und ein neues Thema habe ich eröffnet weil mir die antworten nicht geholfen haben.
Im vollständigen Editor gibt es den Knopf </>.
Und wenn Du beim ersten Beitrag keine hilfreiche Hilfestellung bekommen hast, was läßt Dich vermuten, dass die exakt gleiche Frage jetzt was anderes liefert?
Was meist hilfreich ist, um Hilfe zu bekommen, ist, das Problem kürzer zu beschreiben, weil viele potentiel Helfende von 130 Zeilen Code abgeschreckt werden.
Und wenn Du beim ersten Beitrag keine hilfreiche Hilfestellung bekommen hast, was läßt Dich vermuten, dass die exakt gleiche Frage jetzt was anderes liefert?
Was meist hilfreich ist, um Hilfe zu bekommen, ist, das Problem kürzer zu beschreiben, weil viele potentiel Helfende von 130 Zeilen Code abgeschreckt werden.
-
- User
- Beiträge: 219
- Registriert: Donnerstag 21. Juli 2011, 07:01
- Wohnort: Stade / Hamburg
- Kontaktdaten:
Wenn einem antworten nicht geholfen haben, kann man doch trotzdem im gleichen Thread schreiben. Verstehe ich nicht und empfinde ich auch als dreist. Ich nehme mir hier Zeit, um anderen zu helfen. Und manche kommen hier mit der Vorstellung an man müssen ihnen den roten Teppich ausrollen und sie brauchen schon mal gar nicht ihre Frage so vorzutragen, dass es den Helfern entgegenkommt.
Und die 2 Minuten rumsuchen, oder ggf nachfragen wie es geht, sind schon Zuviel des guten? Mit der Problemlösekompetenz und Einstellung wirst du es weit bringenbremen_hs_1992 hat geschrieben: Mittwoch 25. November 2020, 12:07 Du brauchst mir garnix "Anheimstellen" , ich habe nicht gefunden wo diese code tags sind und ein neues Thema habe ich eröffnet weil mir die antworten nicht geholfen haben.
