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?