Registriert seit: 26. Okt 2003
169 Beiträge
|
Re: Formelfindung
18. Apr 2005, 19:57
Ich glaub eher nicht das ein Fehler in der Formel steckt, da es bei normalen Werten (Gofball + Luft/Erde) ohne Probleme funktioniert.
Aber trotzdem mal den kompletten Code
Delphi-Quellcode:
type
TBallEngine = class
private
vorz_vw : Integer;
Breite, Hoehe: Integer;
public
V : Extended;
W : Extended;
G : Extended;
E : Extended;
K : Extended;
Vw : Extended;
Vx : Extended;
Vy : Extended;
Tau : Extended;
X : Extended;
Y : Extended;
function Set_K(ro, r, m, cw: Extended) : Extended;
procedure Init(valueX, valueY: Extended; B, H: Integer);
procedure Move;
end;
implementation
function TBallEngine.Set_K(ro, r, m, cw: Extended) : Extended;
begin
Result := cw * Pi * ro * r * r / (2*m);
end;
procedure TBallEngine.Init(valueX, valueY: Extended; B, H: Integer);
begin
W := W * PI / 180;
Vx := v * cos(w);
Vy := v * sin(w);
if vw < 0 then
vorz_vw := -1
else
vorz_vw := 1;
X := valueX;
Y := valueY;
Breite := B;
Hoehe := H;
end;
procedure TBallEngine.Move;
var aw, ax, ay, lookX, lookY: Extended;
vor_vx, vor_vy: Integer;
begin
lookX := x + vx * tau;
lookY := y + vy * tau;
if (lookX > 700-Breite) or (lookX < 0) then vx := -e * vx;
if (lookY > 300) or (lookY < Hoehe) then vy := -e * vy;
if x < 0 then x := 0;
if x > 700-Breite then x := 700-Breite;
if y < Hoehe then y := Hoehe;
if y > 300 then y := 300;
aw := k * vw * vw;
ax := k * vx * vx;
ay := k * vy * vy;
if vx < 0 then vor_vx := 1 else vor_vx := -1;
if vy < 0 then vor_vy := 1 else vor_vy := -1;
vx := vx + vorz_vw * aw * tau + vor_vx * ax * tau;
vy := vy - g * tau + vor_vy * ay * tau;
x := x + vx * tau;
y := y + vy * tau;
end;
MFG
Maximus
|
|
Zitat
|