Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Andorra 2D Schiefer Wurf (https://www.delphipraxis.net/143331-andorra-2d-schiefer-wurf.html)

sabbert 13. Nov 2009 13:29


Andorra 2D Schiefer Wurf
 
Hallo zusammen,

habe folgendes Problem.

Will einen schiefen Wurf in Andorra 2D simulieren.

Habe Formeln gesucht und diese versucht in Delphi zu übersetzen, was eigentlich auch funktioniert hat-
Habe es erfolgreich,glaube ich zumindest :D, mit 45° getestet, also das Objekt fliegt eine Kurve.

Doch bei anderen Winkeln ist das Objekt gar nicht mehr zu sehen.

Hier einfach mal der Code:
Delphi-Quellcode:
procedure TBall.DoMove(TimeGap: double);
var v0,t,vx,alpha : double;
begin
  inherited;
  v0 := 50;
  vx := 50;
  t := timegap; //Zeit
  alpha := 45 ; //Abschusswinkel
  if Y <= 559 then//wenn kleiner als 559, also wenn "Boden" erreicht dann
   begin
     Y := 559 + -(-(9.81/2)*sqr(x)/(sqr(v0)*sqr(cos(alpha)))+x*tan(alpha));
     X := x + abs(vx*t*cos(alpha));
   end else
    begin
      Y := 561;// soll sozusagen den boden darstellen , also "0";soll verschoben werden
      X := sqr(v0) * sin(2*alpha) / 9.81; //Wurfweite ausrechnen
    end;
end;
Keine Ahnung was falsch ist will nur das ein Objekt, hier Ball, eine Parabel fliegt.

mfg

igel457 13. Nov 2009 13:41

Re: Andorra 2D Schiefer Wurf
 
Ich habe mir deinen Code jetzt nicht genau angeschaut, aber denke daran, dass du simulierst und nicht berechnest. Das bedeutet, dass du jeweils die Veränderung zum letzten Bild berechnen musst. Dazu benötigst du jeweils die Ableitung deiner verwendeten Funktionen.

Namenloser 13. Nov 2009 13:56

Re: Andorra 2D Schiefer Wurf
 
Delphi-Quellcode:
type
  TBall = class(TAdSprite)
  public
    VelocityX,
    VelocityY: double;
    procedure DoMove(TimeGap: double); override;
    procedure Launch(Alpha, Velocity: double);
  end;

procedure TBall.DoMove(TimeGap: double);
const
  g = 9.81;
begin
  X := X+VelocityX*TimeGap;
  Y := Y+VelocityY*TimeGap;
  VelocityY := VelocityY + g*TimeGap;
end;

procedure TBall.Launch(Alpha, Velocity: double);
begin
  VelocityX := cos(Alpha)*Velocity;
  VelocityY := sin(Alpha)*Velocity;
end;
Sollte es nicht so gehen? (Ohne Gewähr, nur schnell im Editorfenster zusammengebastelt) Wie Andreas schon sagt, handelt es sich dabei um eine Simulation, keine Berechnung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:40 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