AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Formelfindung

Ein Thema von Maximus · begonnen am 18. Apr 2005 · letzter Beitrag vom 18. Apr 2005
Antwort Antwort
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#1

Formelfindung

  Alt 18. Apr 2005, 15:58
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:
 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.
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
  Mit Zitat antworten Zitat
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Formelfindung

  Alt 18. Apr 2005, 16:04
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
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#3

Re: Formelfindung

  Alt 18. Apr 2005, 16:26
Zitat von freak4fun:
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?
Eigentlich sollte es erst gar nicht dazu kommen und wenn die Werte zu groß werden sollte es gleich beim speichern der Einstellungen erkannt und korrigiert werden.

MFG
Maximus
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Formelfindung

  Alt 18. Apr 2005, 16:48
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Maximus

Registriert seit: 26. Okt 2003
169 Beiträge
 
#5

Re: Formelfindung

  Alt 18. Apr 2005, 18:57
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:
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;
MFG
Maximus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz