Einzelnen Beitrag anzeigen

rajuneon
(Gast)

n/a Beiträge
 
#7

Re: Timer + Zeichnen(+Bewegen) im Koordinatensystem - WIE?

  Alt 24. Feb 2009, 18:34
achso...naja, das war wohl fast zu viel der mühe =) ich hab ja die formel schon...soll ja ein wurf dargestellt werden.
Was du mir hier vorgeschlagen hast, ist ja ein Canvas...aber ich meine, irgendwo gelesen zu haben, dass das wohl irgendwie flimmert. Meinst du, ich kann das getrost verwenden?


Hier mal ein Teil dessen, was ich bis jetzt habe:

Delphi-Quellcode:
var // Deklaration aller benötigten Variablen
  Form1: TForm1;

  h0 : real; // Abwurfhöhe
  v0 : real; // Abwurfgeschwindigkeit
  winkel0, winkel0bogen : real; // Abwurfwinkel (+Bogenmaß)
  m : real; // Masse
  g : real; // Fallbeschleunigung
  x,y : real; // x,y-Koordinate
  t : real; // Zeit
  Dauer : real; // Wurfdauer
  W : real; // Wurfweite
  hmax : real; // maximale Wurfhöhe
  v : real; // aktuelle Geschwindigkeit
  vx,vy : real; // aktuelle Geschwindigkeit in x- und y-Richtung
  winkel, winkelbogen : real; // aktueller Winkel (+Bogenmaß)
  a : real; // Beschleunigung
  F : real; // Kraft (zum Erdmittelpunkt)
  Ekin,Epot,Eges : real; // kinetische, potentielle und gesamte Energie

  implementation

{$R *.dfm}

procedure TForm1.PlayClick(Sender: TObject); // PLAY-Taste gedrückt
begin

h0 := StrToFloat(Wurfhoehe.Text);
v0 := StrToFloat(Wurfgeschwindigkeit.Text);
winkel0 := StrToFloat(Wurfwinkel.Text);
winkel0bogen := DegToRad(winkel0); // Abwurfwinkel ins Bogenmaß bringen
m := StrToFloat(Masse.Text);
case Fallbeschleunigung.ItemIndex of // Auswahl eines Planeten bzw. Eingabe einer Wunsch-Fallbeschleunigung
  0: g := 9.81; // Erde
  1: g := 1.62; // Mond
  2: g := 3.69; // Mars
  3: g := 3.7; // Merkur
  4: g := 8.87; // Venus
  5: g := 23.13; // Jupiter
  6: g := 8.96; // Saturn
  7: g := 8.69; // Uranus
  8: g := 11; // Neptun
else g := StrToFloat(Fallbeschleunigung.Text); // wenn g nicht aus der Liste gewählt wird
  end;
// einlesen der variablen Werte

Dauer := ((v0*sin(winkel0bogen))+sqrt((sqr(v0)*sqr(sin(winkel0bogen)))+(2*g*h0)))/g;
  Wurfdauer.Caption := FloatToStr(Dauer);
W := (v0*cos(winkel0bogen)*((v0*sin(winkel0bogen))+sqrt((sqr(v0)*sqr(sin(winkel0bogen)))+(2*g*h0))))/g;
  Wurfweite.Caption := FloatToStr(W);
hmax := h0+((sqr(v0)*sqr(sin(winkel0bogen)))/(2*g));
  Maximalhoehe.Caption := FloatToStr(hmax);
F := m*g;
  Kraft.Caption := FloatToStr(F);
x := v0*t*cos(winkel0bogen);
  KoordinateX.Caption := FloatToStr(x);
y := h0+(v0*t*sin(winkel0bogen))-(g*sqr(t)/2);
  KoordinateY.Caption := FloatToStr(y);
v := sqrt(sqr(v0)-(2*v0*g*t*sin(winkel0bogen))+(sqr(g)*sqr(t)));
  Geschwindigkeit.Caption := FloatToStr(v);
vx := v0*cos(winkel0bogen);
  GeschwindigkeitX.Caption := FloatToStr(vx);
vy := (v0*sin(winkel0bogen))-(g*t));
  GeschwindigkeitY.Caption := FloatToStr(vy);
Ekin := (m/2)*(sqr(v0)-(2*v0*g*t*sin(winkel0bogen))+(sqr(g)*sqr(t)));
  Ekinetisch.Caption := FloatToStr(Ekin);
Epot := m*g(h0+(v0*t*sin(winkel0bogen))-(g*sqr(t)/2));
  Epotentiell.Caption := FloatToStr(Epot);
Eges := (m*sqr(v0)/2)+(m*g*h0);
  Egesamt.Caption := FloatToStr(Eges);
Noch eine Frage, wo du schon dabei bist

- kann ich die Simulation irgendwie pausieren und wiedder fortfahren lassen und vllt. auch mit einer progressbar darstellen?
  Mit Zitat antworten Zitat