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."