ich stecke irgendwie fest, wahrscheinlich Brett vorm Kopf. Das Problem: Eine Kugel prallt auf eine schräge Wand und soll im richtigen Winkel zurückgeschickt werden.
Rot ist der normierte Vektor, mit der die Kugel gegen die Wand prallt, schwarz ist die Normale der Wand, und blau - na ja, den Vektor suche ich. Das Ganze spielt sich praktisch im 2D-Bereich ab, weil die Kugel auf einer Ebene rollt.
So ganz dumpf habe ich das Gefühl, dass man eine Rotationsmatrix dafür braucht, aber lässt sich dieser schiddrige Vektor nicht einfacher ausrechnen? Irgendetwas ganz Simples, das ich nur nicht sehe?
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Über Polarkoordinaten kannst du leicht 2D-Vektoren und Winkel umrechnen.
Mit Winkeln hatte ich das Probleme erst letztlich in Matrionx, als ich an Ellipsennormalen spiegeln müsste. Ich hoffe, ich lüge jetzt nicht, aber der Ausfallswinkel müsste dabei 2N-(E-180°) sein, wenn N der Normalenwinkel und E der Einfallswinkel ist. 2N-E kannst du dir (hoffentlich) einfach erklären, wenn du dir die Symmetrie vorstellst, wenn du den roten bzw. blauen Pfeil an N spiegelst.
Die 180°-Drehung muss sein, weil dein Einfallswinkel in die andere Richtung zeigt, und somit wird das Bild nach der 180°-Drehung (dh. die Pfeilspitze ist am anderen Ende des Pfeils) wirklich achsensymmetrisch zu N.
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
also:
wenn a der Einfallsvektor und n der Normalenvektor ist, dann ergibt n skalliert mit dem Skalarprodukt aus n und a den teil von a in richtung von n. diesen Vektor muss mann zweimal von a abziehen um den Ausfallsvektor zu erhalten.
So was ähnliches schwebte mir vor. Wenn ich mit Polarkoordinaten arbeite, benötige ich ja wohl die Winkel, aber das Ganze ist so ausgelegt, dass die Bewegung der Kugel mit der Position (Punkt) und der Geschwindigkeit (Vektor) gesteuert wird, eine einfache und klare Sache - nur Koordinaten. Dass durch das Skalarprodukt bei normierten Vektoren der Cosisinus des Winkels ausgeliefert wird, hatte ich schon im Hinterkopf verankert, aber den Winkel selbst wollte ich gern vermeiden.
Ich werde deinen Vorschlag heute abend umsetzen und ausprobieren. Evtl. falsche Vorzeichen? Macht nichts, ich trinke auch ein paar Bier vorher, dann heben sich die Vorzeichenfehler auf (-1 * -1 = +1).
Aber im Ernst: Diese Art von Kollisionsbehandlung müsste doch zum Standard der 3D-Programmierung gehören. Wie wird es denn üblicherweise gemacht, ich meine dreidimensional. Doch Rotationsmatrix?
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
das kannste in 3d genauso machen wie in 2d, nur das skalarprodukt wird halt eine Summe länger.
Problematischer wirds erst bei dezentralen Stößen und wenn du Dremomente übertragen willst beim Stoß... da kann mann dann über Energieerhaltung, Drehimpuls und Impulserhaltung gehen. wird recht kompliziert. (noch schöner wirds dann mit reibung )
Aber rotationsmatrixen kommen da meines wissens nicht vor
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Funktioniert hervorragend, und die Vorzeichen stimmen. Man muss nur drauf achten, dass der Einfallsvektor nicht gedreht wird, er muss auf den Kollisionspunkt zeigen, bildet also mit der Normalen einen stumpfen Winkel.
Ich hab das Ding dann in meinen "Kugelkasten" eingebaut (nichts weiter als ein Testprogramm, mit dem ich Kollisionen untersuche und lerne). Hier ein kleiner Screenshot:
Nein, es geht nicht um die Kollision an den Banden, das ist trivial. Es geht um den Zylinder in der Mitte. Die Gerade, an der reflektiert wird, ist die Tangente im Kollisionspunkt. Schön zu beobachten, wie die Kugel nur abgelenkt wird, wenn der Zylinder leicht gestreift wird, und bei einem direkteren Aufprall fast senkrecht zurückgeworfen wird.
Mitglieder in diesem Forum: Bing [Bot] und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.