Dynamischen Ball an statischem Ball abprallen lassen



  • TGGC schrieb:

    rapso schrieb:

    berechne den vector vom blobby-zentrum zum ball-zentrum, normalisiert diesen vektor, multiplizier ihn mit deiner wunschgeschwindigkeit und schon hasst du die neue ball-velocity πŸ™‚

    Das ist physikalisch nicht korrekt.

    so war es aber bei dem spiel als ich es das letzte mal sah.

    Man muss den alten Bewegungsvektor an der Tangente des Beruehrungspunktes spiegeln

    gespiegelt wird an der normale



  • Ich spreche auch nicht von einem Spiel, sondern der Realitaet.

    rapso schrieb:

    Man muss den alten Bewegungsvektor an der Tangente des Beruehrungspunktes spiegeln

    gespiegelt wird an der normale

    Du entaeuscht mich, wenn dir solch simples Grundwissen fehlt. Denk mal drueber nach, wenn du das naechste mal vorm Spiegel stehst. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • TGGC schrieb:

    Ich spreche auch nicht von einem Spiel, sondern der Realitaet.

    rapso schrieb:

    Man muss den alten Bewegungsvektor an der Tangente des Beruehrungspunktes spiegeln

    gespiegelt wird an der normale

    Du entaeuscht mich, wenn dir solch simples Grundwissen fehlt. Denk mal drueber nach, wenn du das naechste mal vorm Spiegel stehst. f'`8k

    Mir tut es leid wenn dir dein Autocogito selbst fehlt, wenn du den ball an der tangenten deines spiegels spiegeln wuerdest, wuerde der ball in der wand stecken und nicht abprallen, deswegen spiegeln wir in der physic, mathematik und graphik an der normalen um wen reflektionsvektor zu erhalten.



  • Ein Lichtstrahl wird am Spiegel gespiegelt. Ein Ball wird an einer Wand reflektiert. Immer das gleiche Prinzip. Es gibt in der Realitaet noch nicht mal eine Normale, sie ist ein rein mathematisches Konstrukt, eine Hilfslinie. Aber nein, beim Herrn rapso wird natuerlich an der Normale gespiegelt. Aber du gibst deinen Fehler ehh nicht zu. Also vergiss es rapso, ich hab keine Lust mehr drauf. f'`8k

    Autocogito

    Gruß, TGGC (making great games since 1992)



  • ich glaube die grundlagendiskussion ob die allgemeine reflection formel mittels normale

    Out = 2 * (N.In) * N - In
    

    eher durch deine tangent-idee ersetzt werden sollte, bedarf viel mehr fachkenntniss als wir hier im Spieleprogrammierung liefern koennen. damit also der threadstarter zum glueck kommt, verschieb ich das mal zu den leuten vom fach mit denen du das klaeren kannst.



  • Dieser Thread wurde von Moderator/in rapso aus dem Forum Spiele-/Grafikprogrammierung in das Forum Mathematik verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Eine wunderbare Diskussion, die man der Nachwelt unbedingt erhalten sollte.



  • Ja ^^

    Kann mir ma jemad so ein kokretes Beispiel anzeigen, sonst dauerts bei mir wieder so ewig bis ich drauf komme -.-^^



  • Hallo RobthaR,

    Im Prinzip geht es so wie es TGGC bereits gesagt hat. Mal angenommen die Position des Balls sei p⃗\vec{p} im Moment der Kollision mit dem Blobby. Die Position des Blobbys sei q⃗\vec{q}. Dann reicht es aus, den Geschwindigkeitsvektor v⃗\vec{v} in einen Anteil senkrecht zur Tangentialebene durch den Berührungspunkt und in einen Anteil parallel zu dieser Ebene zu zerlegen.
    Da es sich beide Male um Kugel handeln, ist die Senkrechte der Ebene mit pβƒ—βˆ’qβƒ—\vec{p}-\vec{q} gegeben.

    Der Vektor der senkrecht auf der BerΓΌhrungsebene steht mit der LΓ€nge 1 ist dann
    nβƒ—=(pβƒ—βˆ’qβƒ—)/∣pβƒ—βˆ’qβƒ—βˆ£\vec{n}=(\vec{p}-\vec{q})/|\vec{p}-\vec{q}|

    Dann teilt man v⃗\vec{v} in den senkrechten und parallelen Anteil auf:
    vβƒ—=(vβƒ—βˆ—nβƒ—)βˆ—nβƒ—+(vβƒ—βˆ’(vβƒ—βˆ—nβƒ—)βˆ—nβƒ—)\vec{v}=(\vec{v}* \vec{n}) * \vec{n} + (\vec{v}-(\vec{v}* \vec{n}) * \vec{n})

    Bei der Reflektion wird die Richtung des senkrechten Anteils umgedreht. Damit erhÀlt man den neuen Vektor u⃗\vec{u} nach der Kollision
    uβƒ—=βˆ’(vβƒ—βˆ—nβƒ—)βˆ—nβƒ—+(vβƒ—βˆ’(vβƒ—βˆ—nβƒ—)βˆ—nβƒ—)\vec{u}=-(\vec{v}* \vec{n}) * \vec{n} + (\vec{v}-(\vec{v}* \vec{n}) * \vec{n})
    bzw.:
    uβƒ—=vβƒ—βˆ’2(vβƒ—βˆ—nβƒ—)βˆ—nβƒ—\vec{u}=\vec{v}-2(\vec{v}* \vec{n}) * \vec{n}

    Interessant fΓΌr Dich kΓΆnnte auch noch dieser Beitrag sein. Weiter kann ich Dir nur empfehlen gleich mit Vektoren im Code zu rechnen statt mit x und y - das ist relativ fehleranfΓ€llig. Ein Beispiel fΓΌr einen Vektor findest Du hier.

    Gruß
    Werner



  • RobthaR schrieb:

    Ja ^^

    Kann mir ma jemad so ein kokretes Beispiel anzeigen, sonst dauerts bei mir wieder so ewig bis ich drauf komme -.-^^

    in etwa

    vec Reflect(Ball,Blobby)
    {
    //normale berechnen
    vec Nrm = normalize(Ball.Position-Blobby.Position);
    
    //in die reflektionsformel einsetzen
    vec NeueRichtung =  2.f * dot(Nrm,Ball.Bewegungsrichtung) * Nrm - Ball.Bewegungsrichtung;
    
    //eventuell normalisieren?
    return normalize(-NeueRichtung);
    }
    

    hab es nicht ausprobiert, sondern nur hingeschmiert, sollte so aber hinkommen *hehe*



  • die beiden verfahren machen doch genau das selbe: Bei dem einem mit der normalen, wird halt(bildlich) ein vektor um 180Β° um die normale gedreht,
    beim anderen verfahren um die (binormale?), bzw. umgeklappt, und 180Β° um die tangente gedreht.

    --> Beides ist das selbe



  • So habs jetzt hinbekommen, muss aber erstmal ne ordentliche Vektorklasse programmieren, weil der code so vermatscht is ^^ πŸ˜‰


Anmelden zum Antworten