naja andere Idee wäre:
Funktion schreiben, die die Wurfparabel abhängig von den Parametern
(Höhe über Grund=Null und Geschwindgkeit) ausrechnet, also
function Wurfhoehe_y(yNull: Double; vNull: Double): Double;
So wie Du es machst wird es auch gehen, halt punktweise gemäß der Integer-Zählvariablen.
In meinem Vorschlag scheint leider ein Schriebfehler.
Es sollte heissen
Code: Alles auswählen
if (abs(y[i]) )< cEpsilon then xmax:=i;
Wenn y kleiner als 0,000001 oder grösser als -0,000001 ,
dann wird es als Null erkannt.
Insofern muss es < heissen, nicht >...
Habe nachgesehen.. round(double) liefert einen Integer - geht also. Allerdings wird 0,49 auch zu Null.
Das mit dem Epsilon (und dem kleiner Zeichen) sollte funktionieren.
Keine Ahnung warum niemeand sonst kommentiert. Jedenfalls wird die Hilfe wesentlich erleichtert,
wenn Du den gesamten code postest.
Probiers aber mal so:
Code: Alles auswählen
begin
xmax:=-1;
if y[i] < 0 then xmax:=i-1;
end;
x-1 ist dann der Index kurz vor dem Aufschlag.
Wenn x=-1 bleibt, dann weist Du, dass etwas schief gelaufen ist bzw. kein Einschlag erfolgte.
Nochmal, es ist nicht ganz klar was Du überhaupt bezweckst.
Daher ist der komplette code sicher hilfreich für mehr Ideen.
Bezüglich Skalierung wäre eine Funktion sicher gut. Überlicherweise macht man die Skalierung
für Erde, Mond, Jupiert etc. dann mit dem g.
Bezüglich Canvas kannst Du Dir TAChart oder die von mir veröffentlichte Komponente
https://github.com/gyrotron/MAAplot ansehen.
Grüße, Stefan