Die Idee ist, dass ein Benutzer irgendwo auf den Bildschirm drückt und das Programm ein Objekt in Parabelform von einer definierten Startposition abfeuert, deren Scheitelpunkt dort liegt, wo der Benutzer den Bildschirm berührt hat.
Ich habe es geschafft, die beiden Punkte zu verwenden, um die quadratische Gleichung in Scheitelpunktform zu erhalten, und sie in die Standardform ok zu konvertieren, aber ich weiß nicht, wie ich die für setLinearVelocity vx und vy erforderlichen Werte in corona sdk erhalten kann.
Der aktuelle Code lautet:
-- given vertex and another point find the parabola formula in vertex form
-- y=a(x−h)2+k
local y, a, x, h, k, xh
h = event.x
k = event.y
x = xStartPos
y = yStartPos
-- solve for a
xh = (x - h) * (x - h)
y = y + (k * -1)
a = y / xh
-- convert to quadratic formula
-- y = ax^2 + bx + c
local b, c
b = -2 * a * h
c = a * (h * h) + k
local vx, vy = -- calculate something here
proj:setLinearVelocity( vx,vy )
physics
mathematics
lua
corona-sdk
Ralph
quelle
quelle
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).Antworten:
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 (alsovx
konstant ist), während er nicht in diey
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 undg
als Beschleunigung aufgrund der Schwerkraft definiert werden.Das Lösen dieser beiden Gleichungen ergibt
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 dery
Richtung.Wie Sie in der verknüpften Frage gefunden haben, ist das
vy
Erforderliche gegeben durch:Sie können dann die Gleichung oben für die Verwendung
vy
von in Bezugvx
zu lösen fürvx
die gibt,quelle
George hat dies richtig beantwortet - ich wollte nur den Arbeitscode einfügen, falls jemand ihn in Zukunft benötigt. Am Ende musste ich die Werte nicht in eine quadratische Gleichung umwandeln
Die zusätzlichen Summen im Code wie dy * 30 sind die Konvertierung zwischen Pixel und Meter und wieder zurück und waren eine Hauptursache dafür, dass die Mathematik nicht in Code konvertiert werden konnte.
quelle