Kurzer Hinweis: Ich kenne Lua nicht, aber ich bin ziemlich gut in Mathematik / Physik und bitte nehmen Sie Kontakt mit mir auf, wenn ich Ideen behandele, mit denen Sie bereits vertraut sind.
Für jedes Objekt unter der Schwerkraft vx
bleibt die horizontale Komponente der Geschwindigkeit während der gesamten Bewegung konstant.
In diesem Bild werden die roten Punkte zu gleichen Zeiten gemacht, so dass der Ball bei x
jedem Tick gleiche Entfernungen in die Richtung zurücklegt (also vx
konstant ist), während er nicht in die y
Richtung geht.
Das Folgende beantwortet Ihre Frage nicht direkt, ist aber nützlich, daher habe ich sie belassen
Es ist möglich, das Problem bei einer Startposition (x0, y0)
und einer Endposition zu lösen, (xf,yf)
welche Geschwindigkeit das Objekt anfänglich benötigt, um den Endpunkt zu erreichen. Dies kann unter Verwendung von Bewegungsgleichungen gelöst werden , die (vx,vy)
als Anfangsgeschwindigkeiten, T
als Zeit zum Vervollständigen der Bewegung und g
als Beschleunigung aufgrund der Schwerkraft definiert werden.
xf = x0 + vx*T // This has no acceleration part as it is zero for x
yf = y0 + vy*T - g*T^2/2
Das Lösen dieser beiden Gleichungen ergibt
vy = vx * (yf - y0)/(xf - x) + g * (xf - x0)/(2 * vx).
Dies ist keine vollständige Lösung, da Sie wissen, dass die Bewegung parabolisch ist, aber es sind drei Punkte erforderlich, um eine Parabel zu definieren. Sie müssen also entweder die Zeit wählen, die das Partikel benötigt, um seinen endgültigen Punkt zu erreichen, oder die Geschwindigkeit in x-Richtung.
Aktuelle Antwort
Sie wählen, dass der Endpunkt (xf,yf)
der Scheitelpunkt der Parabel ist. Dies führt tatsächlich eine dritte Einschränkung ein, wie Sie in den Kommentaren erwähnt haben, diesmal für die Geschwindigkeit in der y
Richtung.
Wie Sie in der verknüpften Frage gefunden haben, ist das vy
Erforderliche gegeben durch:
vy = sqrt(2 * g * (yf - y0)).
Sie können dann die Gleichung oben für die Verwendung vy
von in Bezug vx
zu lösen für vx
die gibt,
vx = (xf - x0) * sqrt(g / (2 * (yf - y0))).
yStartPos = event.y
Sie feststellena = 0
, dass Sie keine Parabel mehr haben. Fühlen Sie sich frei, mich zu korrigieren. (Ich werde morgen einen weiteren Riss bei einer Antwort haben, möchte aber auch überprüfen, ob Sie eine Art Schwerkraft simulieren, dh eine Kanonenkugel abfeuern, da ich nicht genau weiß, was Sie versuchen zu tun).