Einzelnen Beitrag anzeigen

static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#1

Flugbahn mit äusseren Einwirkungen berechnen

  Alt 16. Okt 2005, 22:21
Hoi,

ich brauche mal eure Hilfe da ich nicht wirklich das Matheformel Genie bin
und zwar geht es um eine Flugbahn mit äusseren Einwirkungen. Hier mal soweit wie ich es habe, nur nun weiß ich nicht weiter


Delphi-Quellcode:
type
  TTrajectory = record
    Steps : Integer;
    Course : Array of TPoint;
  end;

  TProjectile = class(TPersistent)
  private
    FGround : Integer;
    FPosition : TPoint;
    FAngle : Extended;
    FPower : Extended;
    FGravity : Extended;
    FWeight : Extended;
    FWind : Extended;
    FRange : Integer;
  public
    constructor Create;
    destructor Destroy; override;
    function Trajectory:TTrajectory;
  published
    property Angle:Extended read FAngle write FAngle; // Abschusswinkel
    property Power:Extended read FPower write FPower; // Abschussgeschwindigkeit
    property Weight:Extended read FWeight write FWeight; // Masse bzw Gewicht
    property Gravity:Extended read FGravity write FGravity; // Anziehungskraft
    property Wind:Extended read FWind write FWind; // Windgeschwindigkeit (positiv = Links, negativ = rechts)
    property Range:Integer read FRange write FRange; // Reichweitenbeschränkung
    property Position:TPoint read FPosition write FPosition; // Ausgangsposition des Projektils
    property Ground:Integer read FGround write FGround; // Boden
  end;
Delphi-Quellcode:
constructor TProjectile.Create;
begin
  inherited;
  FGravity:=9.80665; // 9,80665 m/s² auf dem 45.Breitengrad in Meereshöhe. 9,780 m/s² am Äquator.
end;

destructor TProjectile.Destroy;
begin
  inherited;
end;

function TProjectile.Trajectory: TTrajectory;
begin
  Result.Steps:=0;

  repeat
    Inc(Result.Steps);
    SetLength(Result.Course,Result.Steps);

    Result.Course[Result.Steps-1].X:=(FPosition.X) + Trunc(FPower * Cos(FAngle / 180 * Pi ) * Result.Steps);
    Result.Course[Result.Steps-1].Y:=Trunc(-(FPower * Sin(FAngle / 180 * Pi ) * Result.Steps - 0.5 * FGravity * Result.Steps * Result.Steps) + (FPosition.Y));

    if FRange > 0 then
      if Result.Course[Result.Steps-1].X >= Result.Course[Result.Steps-1].X + FRange then
      begin
        Inc(Result.Steps);
        SetLength(Result.Course,Result.Steps);
        Result.Course[Result.Steps-1].X:=Result.Course[Result.Steps-2].X;
        Result.Course[Result.Steps-1].Y:=FGround;
        Break;
      end;
  until Result.Course[Result.Steps-1].Y >= FGround;
end;
Ich hoffe ihr könnt mir dabei helfen

Viele Grüße,
Daniel
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat