ja nikolas, ich habe ganz einfach y nicht mit der höhe gleichgesetzt, sondern mit den bild-koordinaten (also 300-höhe), was ja nicht funktionieren konnte und so hat er immer falsch gerechnet. ich musste die koordinaten später beim kreismalen nur anpassen und nun klappts.
also, ich habe die berechnung jetzt hinbekommen, allerdings immer noch ein problem:
es gibt nun die 2 formeln:
x = v * t
y = g/2 * t²
daraus ergibt sich für die zeit:
t = x / v
t = sqrt(2*y/g)
daraus ergeben sich für x und y:
x = v * sqrt(2*y/g)
y = g/2 * x*x / (v*v)
hiermit wird die zeit einfach nicht mehr benötigt!
demzufolge ergibt sich nun folgender code:
Delphi-Quellcode:
procedure circle (x,y: Real);
begin
with frm.img.canvas do
begin
// Loch & Kreise
brush.color:=$00FF6666;
pen.color:=$00884444;
ellipse(round(x),frm.img.height-round(y),round(x)+5,frm.img.height-round(y)+5);
end;
end;
procedure Tfrm.Button1Click(Sender: TObject);
begin
// Eingabe
a:=9.81/2;
h:=strtoint(edt_in_h.text);
v:=strtofloat(edt_in_v.text);
e:=strtoint(edt_in_e.text);
if (h<300) and (h>-1) and (e<281) and (e>19) and (v>0) then
begin
i:=0;
x:=15;
y:=h;
buildimg(e);
circle(x,y);
frm.tmr.enabled:=true;
end
else
edt_out_w.text:='Eingaben falsch!';
end;
procedure Tfrm.tmrTimer(Sender: TObject);
begin
if (y>5) then // Versuch, abzufangen
begin
y:=y-((a * x*x / (v*v))/frm.tmr.interval);
x:=x+((v * sqrt(y/a))/frm.tmr.interval);
circle(x,y);
end
else
begin
w:=round(x);
if (w>e-1) and (w<e+21) then
begin
edt_out_w.text:=inttostr(w)+' Treffer!';
frm.tmr.enabled:=false;
end
else
begin
edt_out_w.text:=inttostr(w)+' Daneben!';
frm.tmr.enabled:=false;
end;
end;
end;
das problem ist nun, dass das programm y irgendwie nicht immer rechtzeitig abfangen kann und dann einen fehler erzeugt:
"invaliding float point operation." und auf diese zeile verweist:
Delphi-Quellcode:
y:=y-((a * x*x / (v*v))/frm.tmr.interval);
x:=x+((v * sqrt(y/a))/frm.tmr.interval); // <-- diese
nur habe ich das aber doch schon abgefangen mit y>5, so dass er gar nicht "über den bildrand" darf?
und wieso kann er nicht mit y<5 rechnen? selbst wenn y negativ wär? den kreis würde man ja eh nicht mehr sehen.