Thema: Delphi Der Schiefe Wurf

Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Der Schiefe Wurf

  Alt 5. Feb 2008, 17:29
Ich habe mal diese analytischen Formeln völlig links liegen gelassen und lieber Variante 2 gewählt:
Weg ist Integral der Geschwindigkeit und Geschwindigkeit ist Integral der Beschleunigung. Also müssen wir nur immer die Beschleunigung zur Geschwindigkeit addieren und die Geschwindigkeit zum Weg (oder zur Position)
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    Pos:array of TPoint;
    PosX,PosY:double;
    Vx,Vy:double;
    Ax,Ay:double;
    procedure add(x,y:double);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

const ScaleX=1;
      ScaleY=2;

implementation

{$R *.dfm}

procedure TForm1.FormPaint(Sender: TObject);
begin
  if length(Pos)>1 then canvas.Polyline(Pos);
end;

procedure TForm1.add(x,y:double);
var p:integer;
begin
  p:=length(Pos);
  setlength(Pos,length(Pos)+1);
  Pos[p].X:=round(X*scaleX);
  Pos[p].Y:=clientheight-round(Y*scaleY);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PosX:=0;
  PosY:=0;
  Vx:=10;
  Vy:=12;
  Ax:=0;
  Ay:=-1;
  setlength(pos,0);
  add(PosX,PosY);
  timer1.Interval:=20;
  timer1.Enabled:=true;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  PosX:=PosX+Vx;
  PosY:=PosY+Vy;

  if PosY<=0 then
  begin //Korrektur bei Abprall (kann noch verbessert werden)
    PosY:=-PosY+Vy;
    Vy:=-Vy;
    if PosY<>0 then add(Posx-Vx/2,0); //Abprallpunkt auf der Hälfte des Weges zeichnen
  end;


  Vx:=Vx+Ax;
  Vy:=Vy+Ay;

  add(PosX,PosY);

  if Pos[high(pos)].X>clientwidth then timer1.enabled:=false;

  repaint;

end;
Und wenn du jetzt Wind haben willst, dann setze eben Ax auf einen Wert<>0 (z.B. -0.1)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat