![]() |
Formelfindung
Hallo,
Ich brauche Hilfe beim finden einer Formel. Es geht darum, dass ich prüfen will ob bei den Einstellungen zu meiner Flugbahn Simulation die Werte zu groß werden, um dann enstsprechend die Geschwindigkeit zu regulieren. Hier mal der relevante Quelltext (gekürtzt und ohne proceduren)
Delphi-Quellcode:
Um das Problem bei einer kleinen Rechnung zu verdeutlichen:
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; 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. Deswegen such ich jetzt eine Formel die ausrechnet ob die Werte noch gültig sind oder ob sie zu groß sind prüft und gegebenenfalls v reguliert. Inzwischen hab ich schon einige Formeln getestet doch auch nach dem regulieren gab es noch ein Error. Ich hoffe ihr könnt mir weiterhelfen. Danke schonmal! MFG Maximus |
Re: Formelfindung
Setzt ein try except end; - Block drum herum und geb als Fehlermeldung aus, das der Wert zu groß ist.
Oder darf das auch nicht sein? MfG freak |
Re: Formelfindung
Zitat:
MFG Maximus |
Re: Formelfindung
Zitat:
Deshalb vermute ich, dass der Fehler in irgendeiner der Formeln steckt. MfG Binärbaum |
Re: Formelfindung
Ich glaub eher nicht das ein Fehler in der Formel steckt, da es bei normalen Werten (Gofball + Luft/Erde) ohne Probleme funktioniert.
Aber trotzdem mal den kompletten Code
Delphi-Quellcode:
MFG
type
TBallEngine = class private vorz_vw : Integer; Breite, Hoehe: Integer; public V : Extended; W : Extended; G : Extended; E : Extended; K : Extended; Vw : Extended; Vx : Extended; Vy : Extended; Tau : Extended; X : Extended; Y : Extended; function Set_K(ro, r, m, cw: Extended) : Extended; procedure Init(valueX, valueY: Extended; B, H: Integer); procedure Move; end; implementation function TBallEngine.Set_K(ro, r, m, cw: Extended) : Extended; begin Result := cw * Pi * ro * r * r / (2*m); end; procedure TBallEngine.Init(valueX, valueY: Extended; B, H: Integer); begin W := W * PI / 180; Vx := v * cos(w); Vy := v * sin(w); if vw < 0 then vorz_vw := -1 else vorz_vw := 1; X := valueX; Y := valueY; Breite := B; Hoehe := H; end; procedure TBallEngine.Move; var aw, ax, ay, lookX, lookY: Extended; vor_vx, vor_vy: Integer; begin lookX := x + vx * tau; lookY := y + vy * tau; if (lookX > 700-Breite) or (lookX < 0) then vx := -e * vx; if (lookY > 300) or (lookY < Hoehe) then vy := -e * vy; if x < 0 then x := 0; if x > 700-Breite then x := 700-Breite; if y < Hoehe then y := Hoehe; if y > 300 then y := 300; aw := k * vw * vw; ax := k * vx * vx; ay := k * vy * vy; if vx < 0 then vor_vx := 1 else vor_vx := -1; if vy < 0 then vor_vy := 1 else vor_vy := -1; vx := vx + vorz_vw * aw * tau + vor_vx * ax * tau; vy := vy - g * tau + vor_vy * ay * tau; x := x + vx * tau; y := y + vy * tau; end; Maximus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz