Guten Tan an alle Programmierer, ich habe in meinem Programm leider keine Idee zur weiteren Lösung.
Es sollen zwei Bälle in entgegengesetzter Richtung und etwas Abstand in der Y achse an einander vorbeifliegen dabei soll die Gravitation zwischen den beiden( FG = G * (m1*m2)/r^2)
sie von ihrer Bahn leicht ablenken (vorher ist die Bewegungsrichtung nur in x Richtung).
Mein Programm ist jetzt soweit, dass die Animation der Bälle und ihre bewegungsrichtung funktioniert.
Jetzt frage ich mich wie ich die Gravitation zwischen den beiden punkten einbauen kann.
Hier der Aktuelle 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.5, 0]) # Anfangsgeschw. in LE/s
r1_0 = np.array([1.0, 0.5]) # Angangsposition in LE
v2_0 = np.array([0.5, 0]) # Anfangsgeschw. in LE/s
r2_0 = np.array([-1.0, -0.5]) # Angangsposition in LE
g = np.array([0, 0]) # Gravitation in LE/s^2
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 = 1
m2 = 2
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
for k in np.arange(npts-1):
v1[k+1] = v1[k] + g * dt
r1[k+1] = r1[k] + v1[k] * dt
for k in np.arange(npts-1):
v2[k+1] = v2[k] + g * dt
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
diffrx = diffrx**2
diffry = diffry**2
diff = diffrx + diffry
d = np.sqrt(diff) #Berechnung des aktuellen abstands
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())
Hat jemand eine idee wie es funktionieren könnte?
Bälle mit gegenseitiger Anziehung
-
- User
- Beiträge: 219
- Registriert: Donnerstag 21. Juli 2011, 07:01
- Wohnort: Stade / Hamburg
- Kontaktdaten:
Benutze doch bitte die code -Tags für deinen Code, das macht ihn hier besser lesbar.
Zum Thema kann ich nichts beitragen, ist nicht mein Fachgebiet. Aber ich habe da mal vor ein paar Jahren was gelesen, was ich ganz gut fand. Ist nicht Python, hilft aber vielleich ttrotzdem: Kapital 2.9
https://natureofcode.com/book/chapter-2-forces/
Zum Thema kann ich nichts beitragen, ist nicht mein Fachgebiet. Aber ich habe da mal vor ein paar Jahren was gelesen, was ich ganz gut fand. Ist nicht Python, hilft aber vielleich ttrotzdem: Kapital 2.9
https://natureofcode.com/book/chapter-2-forces/
Natureofcode ist mir auch als erstes eingefallen.
Hier die Playlist zum Buch: https://www.youtube.com/watch?v=II1A3bB ... mBLiGD8n4O
Ansonsten schau mal hier: https://www.google.de/search?&q=python+ ... two+masses
Hier die Playlist zum Buch: https://www.youtube.com/watch?v=II1A3bB ... mBLiGD8n4O
Ansonsten schau mal hier: https://www.google.de/search?&q=python+ ... two+masses
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png