Zitat von
Maximus:
Delphi-Quellcode:
var
v, w: Extended // v Geschwindigkeit; w Abschusswinkel
ro : Extended // Dichte der Luft
r : Extended // Radius der Kugel
cw : Extended // Wiederstandsbeiwert
m : Extended // Masse
ax : Extended // Bremsbeschleunigung X-Richtung
vx : Extended // Geschwindigkeit X-Richtung
vor_vx: Integer
k := Pi * ro * r * r * cw / (2*m); // Wird am anfang berechnet
vx := v * cos (w);
ax := k * vx * vx; // Bei jedem "Tick" vom Timer wird ab hier gerechnet
if vx > 0 then vor_vx := -1 else vor_vx := 1; //Bremsbeschleunigung entgegen Wirken lassen
vx := vx + vor_vx * ax * 0.05;
Um das Problem bei einer kleinen Rechnung zu verdeutlichen:
Nehmen wir an:
k := 5;
vx := 10;
dan würde ax = 5 * 10² = 500
vx = 10 - 1 * 500 * 0,05 = - 15
Schon beim nächsten durchlauf würde sich vx weiter vergrößern bis es irgendwan den Extended Bereich übersteigt und das Programm abstürzen lässt.
Wenn die Werte so schnell ansteigen, ist das bei der Berechnung einer Flugbahn schon ziemlich ungewöhnlich. Und selbst wenn sich die Geschwindigkeit vergrößern sollte, dann nicht so stark, dass der Bereich von Extended überschritten wird. das scheint doch sehr unrealistisch.
Deshalb vermute ich, dass der Fehler in irgendeiner der Formeln steckt.
MfG
Binärbaum