Wurf eines Objekts

Cromon

Erfahrenes Mitglied
Hallo zusammen!

Ich schreibe momentan gerade ein Plugin für einen Server. Da ist es auch möglich dem Clienten zu sagen, dass er ein Objekt "rumfliegen" lassen soll, in einem schiefen Wurf. Es ist möglich dem Clienten die horizontale und die vertikale Geschwindigkeit so wie die horizontale Geschwindigkeit anzugeben. Ich möchte aber eigentlich in meinem Plugin folgendes realisieren:
Der User wählt die Zielposition und die maximale Höhe und den Rest berechnet das Plugin.

Bedenken muss man, dass sich das ganze im 3-dimensionalen abspielt, die Zielposition kann in allen 3 Koordinate verschieden sein von der Ausgangsposition. Ich möchte nun gerne die Paramter für den direkten Weg berechnen. Mit dem direkten Weg meine ich, dass ich voraussetze, dass der User klug genug ist daran zu denken kein Hinderniss in den Weg zu stellen (das regelt der Client dann aber automatisch, denn wenn ein Objekt in ein Hinderniss prallt fällt es nach unten).

/EDIT:
Meine bisherigen Überlegungen:
Die totale Zeit berechnet sich ja grundsätzlich durch die gewünschte Endgeschwindigkeit (bei mir 7 Einheiten pro Sekunde) und der Distanz, die zurückgelegt werden soll. Also habe ich die Zeit berechnet, die das Objekt für die Differenz der Positionen benögit, das nenn ich jetzt t. In x-Richtung wird das Objekt ja dx zurücklegen, daher muss es mit dx / t Geschwindigkeit unterwegs sein, in y-Richtung mit dy / t Geschwindigkeit. In z-Richtung muss einerseits die Höhe und andererseits die z-Differenz zurückgelegt werden, daher muss das mit (dz + h) / t unterwegs sein.

Für die horizontale Geschw. ergibt das dann v_xy = sqrt(vx * vx + vy * vy);

Ich hoffe mir kann da jemand behilflich sein. Mit besten Grüssen
Cromon
 
Zuletzt bearbeitet:
Hi!
Zum Beispiel hier http://de.wikipedia.org/wiki/Wurfparabel
findest du die Formeln für die maximale Höhe und die max. Reichweite. Diese hängen von der Anfagnsgeschwindkeit und dem Winkel ab.
Max. Reichweite und max. Höhe kennst du ja. Dann hast du nur noch 2 Gleichungen mit 2 Parametern, die es mit einem Gleichungssystem zu lösen gilt.
Hast diese beiden Parameter berechnet, kannst du ganz normal deinen schiefen Wurf ausführen..

Grüße!
 
Zuletzt bearbeitet:
Ja, das habe ich auch schon gesehen, nur ist das Problem da ja, dass grundsätzlich auch die Anfangshöhe und die Endhöhe nicht identisch sind. So wie ich das da gelesen habe müssten ja aber diese beiden Grössen identisch sein, nicht?
 
Hi,
ja bei diesen Formeln wird davon ausgeggangen, dass Anfangs- und Endhöhe identisch sind.
Sind diese unterschiedlich, dann errechnet sich die maximale Höhe einfach dadurch, dass du die Anfangshöhe dazu addierst.
Die Reichweite ist ein wenig komplexer, da muss ich mal schauen, ob ich die Formel noch irgendwo finde...

Grüße!

Edit: Hier findet man zum Beispiel auch die Reichweitenformel:
http://www.walter-fendt.de/phys/mech/wurf.pdf
Es wird zwar alles im 2 Dimensionalen beschrieben, ist aber grundsätzlich auch aufs 3dimensionale übertragbar...
Diese Gleichungen aufzulösen wird aber bestimmt nicht viel Spaß machen... ;)
 
Zuletzt bearbeitet:
Hehe, ich werde mir das mal anschauen, danke dir! Gleichungen umformen mache ich allerdings relativ gern, von daher dürfte das nicht das Problem werden ;)
 
Die Formel, die ich umgeformt habe hat sich eigentlich relativ schön aufgelöst und funktioniert auch tiptop. Ich habe irgendwo noch in der Berechnung meines Programms bezüglich der Höhen einen Denkfehler drin, daher schiesst man wahnsinnig hoch hinaus, aber die Position wird exact getroffen, hat daher also nichts mit der Wurfformel an sich zu tun.

Danke für deine Hilfe!
 
Naja, wenn man einen Moment überlegt, gibt es unendlich viele Winkel, die zum Ziel führen (die Geschwindigkeit wird dann eben nur angepasst).. Wie Du den Optimalwinkel findest, sei Dir überlassen :D

mfg chmee
 
Jein. Die Höhe des Scheitelpunktes ist ja vorgegeben, Veränderung der Geschwindigkeiten um den Winkel zu ändern würden dann dazu führen, dass diese Bedingung nicht mehr erfüllt ist.

Dank dieser Festlegung habe ich ja mit Wurfhöhe und Wurfweite nur 2 Unbekannte mit 2 Gleichungen und ist daher eindeutig lösbar.
 
Wenn Du schon beschrieben hast, wie der Scheitelpunkt definiert ist, dann bitte ich um Entschuldigung. Ich pack trotzdem noch ne Zeichnung rein, warum ich denke, wo ein Fehler sein könnte.. Einen Moment +kritzel++..--abgebrochen-- AH, -> die maximale Höhe durch den User <- ok..

Und Du meinst (im letzten Beitrag) sicherlich anstatt Wurfhöhe -> Initalgeschwindigkeit, oder? Denn Wurfhöhe und Scheitelpunkt sind doch quasi das Selbe, oder nicht? Ach je, ich bin konfus, ich lese nach dem Abendbrot nochmal in Ruhe den ganzen Thread :D Sry!

mfg chmee
 
Ja, genau, der Scheitelpunkt ist gegeben, daher kann ich auch die Gleichungen für W und h_max bis auf 2 Unbekannte bestimmen. Dann habe ich das ganze bisschen umgeformt für tan(alpha) = ... und v_0 = ...

Die xy-Geschwindkeit scheint zu stimmen, da ich ziemlich genau da lande, wo ich angegeben habe (Rundungsfehler und so), aber in z-Richung rase ich heftig nach oben :p. Werde mich da heute Abend nochmals drüberbeugen und schauen, ob ich irgendwo einen Index verwechselt habe (h_max und h_0, usw).

/EDIT:
Fehler 1 ist gefunden, ich habe eine Wurzel vergessen mitzunehmen, die war für die exorbitant hohe Höhe verantwortlich, jetzt habe ich aber unterwegs wohl einen Faktor sqrt(2) liegengelassen, da ich genau die halbe gewünschte Distanz zurücklege, obwohl mir das ausrechnen von W genau das gleiche gibt wie die Berechnung der Distanz. Na ja, auch den Fehler werd ich noch finden :D

/EDIT2:
Folgende Änderung hat erstaunlicherweise zum korrekten Ergebnis geführt:
Code:
		float vxy = v0 * cosf(alpha) * sqrtf(2.0f);
		float vz = v0 * sinf(alpha) * sqrtf(2.0f);

Jetzt stimmt alles bis auf kleine rundungsbedingte Abweichungen bei grossen Flugdistanzen und grossen Höhenunterschieden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück