tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
490
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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
    Geändert von Cromon (22.04.10 um 13:24 Uhr)
     

  2. #2
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    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!
    Geändert von Artorius (22.04.10 um 13:43 Uhr)
     
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  3. #3
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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?
     

  4. #4
    Avatar von Artorius
    Artorius Artorius ist offline Mitglied Plutonium
    Registriert seit
    Feb 2010
    Beiträge
    222
    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...
    Geändert von Artorius (22.04.10 um 14:02 Uhr)
     
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen.
    (Johann Wolfgang von Goethe)
    ----------------------------------------------------------------------
    FLEXibler Java Entwickler

  5. #5
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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
     

  6. #6
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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!
     

  7. #7
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    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

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  8. #8
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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.
     

  9. #9
    Avatar von chmee
    chmee chmee ist offline mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.629
    Blog-Einträge
    4
    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 Sry!

    mfg chmee
     
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  10. #10
    Cromon Cromon ist offline Mitglied Brillant
    Registriert seit
    Apr 2008
    Beiträge
    819
    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

    /EDIT2:
    Folgende Änderung hat erstaunlicherweise zum korrekten Ergebnis geführt:
    Code :
    1
    2
    
            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.
    Geändert von Cromon (22.04.10 um 21:36 Uhr)
     

Ähnliche Themen

  1. Korrekte Rückgabe eines Objekts
    Von Cyraid im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 15.05.10, 20:37
  2. Polygone eines Objekts unterteilen
    Von ProWick im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 13.01.10, 17:26
  3. Referenznummer eines Objekts
    Von greggy80 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 16.09.09, 16:31
  4. Nachbelichten eines Ai-Objekts
    Von jassebutter im Forum Vektor-Programme
    Antworten: 7
    Letzter Beitrag: 20.08.09, 14:23
  5. Rekonvertierung eines Objekts möglich?
    Von pixels pix im Forum Cinema 4D
    Antworten: 3
    Letzter Beitrag: 07.06.07, 22:04