Hättest du vielleicht einen konkreten gedanken was da schief läuft ? bin am verzweifeln aufgrund der unendlichen suche -.-
schicke hier eben den kompletten code rein , eventuell hilft das mehr
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from IPython.display import HTML
import matplotlib.patches as patches
%matplotlib inline
t_max = 10 # Zeitfenster für die Animation in s
v_0 = 0 # Anfangsgeschw. in LE/s
y_0 = 0.9 # 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)
m= 0.05 # vorgegebene Masse aus Aufgabenstellung
g= -0.00001 # negativ da Beschleunigung nach unten
p_wasser = 997 # Dichte Wasser 997KG/m^3
r = 0.05 #Radius des Kreises
vsk_Wasser = 1 #Viskusität Wasser
F_Gr=m*g
grenze_ball_wasser = 0.45 #Höhe des Balls wo dieser genau am Wasser grenzt
v = np.zeros(npts) # 300 x 1 Matrix da nur eine eindimensionale Bewegung vorliegt
v[0] = v_0 # Anfangsgeschwindingkeit
y = np.zeros(npts) # y Vektor für den Ort, bzw Höhe
y[0] = y_0 # Anfangshöhe
h = np.zeros(npts)
h[0] = 0
Vr = np.zeros(npts)
Vr[0] = 0
FA = np.zeros(npts)
FA[0] = 0
FR = np.zeros(npts)
FR[0] = 0
F_Ges = np.zeros(npts)
F_Ges[0] = 0
for k in np.arange(npts-1):
if y[k+1] <= grenze_ball_wasser: #Ball tritt grade ins wasser ein
h[k+1] = grenze_ball_wasser-y[k] #tiefe des balls im wasser
Vr[k+1]=(np.pi/3)*(h[k]**2)*(3*r-h[k])
FR[k+1] =6*np.pi*0.05*v[k]*vsk_Wasser #FR = Reibungskraft
FA[k+1] = p_wasser*Vr[k]*F_Gr #Auftriebskraft
F_Ges[k+1] = F_Gr + FR[k] + FA[k]
elif y[k+1] <= grenze_ball_wasser-(2*r): #Ball taucht komplett unters wasser
Vr[k+1]= (4/3)*np.pi*r**3 #Volumen Kugel
FR[k+1] =6*np.pi*0.05*v[k]*vsk_Wasser #FR = Reibungskraft
FA[k+1] = p_wasser*Vr[k]*F_Gr #Auftriebskraft
F_Ges[k+1] = F_Gr + FR[k] + FA[k]
else: #Ball ist ausserhalb des wassers
F_Ges[k] = F_Gr
v[k+1] = v[k] + dt*(F_Ges[k]/m) #bewegungsgleichung
y[k+1] = y[k] + v[k]*dt #positionsgleichung
def animate(k, y):
x, z = patch.center
x = 0.5 #5 + 3 * np.sin(np.radians(k))
z = y[k]
patch.center = (x, z)
return patch,
fig = plt.figure(figsize=(5,5))
#fig.set_dpi(100)
#fig.set_size_inches(7, 6.5)
ax = plt.axes(xlim=(0, 1), ylim=(0, 1))
patch = plt.Circle((5, -5), 0.05, fc='r')
rect = patches.Rectangle((0.2,0),0.6,0.4,linewidth=1,edgecolor='r',facecolor='b')
ax.add_patch(rect)
plt.grid()
def init():
patch.center = (0.5, 0.9)
ax.add_patch(patch)
return patch,
anim = animation.FuncAnimation(fig, func = animate,
init_func=init, fargs = (y,),
frames=npts,
interval=1./frame_rate*1000.,
blit=True,repeat=False)
HTML(anim.to_html5_video())
wenn ich mir dann die aktuellen positionswerte und die animation des balls ansehe fällt mir nix mehr zu ein.
hier zb y:
9.00000000e-001, 9.00000000e-001, 9.00000000e-001,
8.99999989e-001, 8.99999967e-001, 8.99999933e-001,
8.99998472e-001, 8.99995577e-001, 8.99991240e-001,
8.99984565e-001, 8.99974649e-001, 8.99960588e-001,
8.99940912e-001, 8.99913586e-001, 8.99876004e-001,
8.99824640e-001, 8.99754685e-001, 8.99659697e-001,
8.99531015e-001, 8.99356960e-001, 8.99121802e-001,
8.98804372e-001, 8.98376161e-001, 8.97798778e-001,
8.97020532e-001, 8.95971818e-001, 8.94558911e-001,
8.92655607e-001, 8.90091970e-001, 8.86639175e-001,
8.81989104e-001, 8.75726867e-001, 8.67293800e-001,
8.55937649e-001, 8.40645481e-001, 8.20053353e-001,
7.92324674e-001, 7.54986420e-001, 7.04708594e-001,
6.37007251e-001, 5.45844623e-001, 4.23090668e-001,
2.57798024e-001, 3.52257099e-002, -2.64475505e-001,
-6.68033298e-001, -1.21143744e+000, -1.94314942e+000,
-2.92842423e+000, -4.25512942e+000, -6.04157947e+000,
-8.44708191e+000, -1.16861294e+001, -1.60474876e+001,
-2.19198401e+001, -2.98261763e+001, -4.04697345e+001,
-5.47949684e+001, -7.40674202e+001, -9.99758030e+001,
-1.34756008e+002, -1.81325100e+002, -2.43380982e+002,
-3.25339265e+002, -4.31767285e+002, -5.65454274e+002,
-7.21996238e+002, -8.75790198e+002, -9.45515856e+002,
-7.12648480e+002, 3.59934491e+002, 3.49052530e+003,
1.11407151e+004, 2.72680950e+004, 5.51808392e+004,
9.21060409e+004, 1.38625232e+005, -2.90496195e+005,
-1.67352839e+007, -2.68345011e+008, -2.46933605e+009,
-1.37450783e+010, -5.60821768e+010, 1.84581309e+011,
5.43730742e+016, 2.24270670e+020, 1.75119910e+023,
3.04747285e+025, 2.10701110e+027, -6.87695575e+028,
-1.86480288e+045, -1.30857526e+056, -6.22999711e+064,
-3.28322743e+071, -1.08513648e+077, 3.77263660e+081,
7.52280944e+130, 2.59942556e+163, 2.80507710e+189,
4.10567123e+209, 1.48229404e+226, -6.22896928e+239,
-inf, -inf, -inf,
-inf, -inf, nan,
nan, nan, nan,