Dynamischen Ball an statischem Ball abprallen lassen
-
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
AutocogitoGruß, 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
AutocogitoGruß, 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 im Moment der Kollision mit dem Blobby. Die Position des Blobbys sei . Dann reicht es aus, den Geschwindigkeitsvektor 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 gegeben.Der Vektor der senkrecht auf der Berührungsebene steht mit der Länge 1 ist dann
Dann teilt man in den senkrechten und parallelen Anteil auf:
Bei der Reflektion wird die Richtung des senkrechten Anteils umgedreht. Damit erhält man den neuen Vektor nach der Kollision
bzw.:
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 ^^