Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 08:34

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollision - Reflexionsvektor
BeitragVerfasst: So Aug 26, 2007 20:25 
Offline
DGL Member

Registriert: Mi Mär 28, 2007 17:45
Beiträge: 131
Hallo,

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.

Bild

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?

Gruß,
erin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 26, 2007 20:56 
Offline
DGL Member
Benutzeravatar

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.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 01:54 
Offline
DGL Member
Benutzeravatar

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.

b:=a-2n(na)

also in 2d:

b.x=a.x-2*n.x*(n.x*a.x+n.y*a.y)
b.y=a.y-2*n.y*(n.x*a.x+n.y*a.y)

(hab grade par Bier getrunken, kann also sein, dass ein oder zwei Vorzeichen falsch sind :roll: )

natürlich müssen die Vektoren noermiert sein!

umrechnen in Winkel sollte auf jeden fall höheren Rechenaufwand erzeugen.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 07:53 
Offline
DGL Member

Registriert: Mi Mär 28, 2007 17:45
Beiträge: 131
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?

erin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 13:17 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 27, 2007 20:10 
Offline
DGL Member

Registriert: Mi Mär 28, 2007 17:45
Beiträge: 131
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:
Bild
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.

Danke,
erin


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 17 Queries | GZIP : On ]