Ergebnis 1 bis 14 von 14

Thema: Physik: Enfallswinkel gleich Ausfallswinkel

  1. #1

    Physik: Enfallswinkel gleich Ausfallswinkel

    Hallo! o/
    Also, ich habe eine Frage. Und zwar geht es darum, dass ich ein Programm schreibe, bei dem eine Kugel simuliert wird, wie sie von Wänden abprallt etc. Das Prog ist in einer Sideview-Sicht, also wie ein Jump'n'Run und 2D. Nun mein eigentliches Problem: Wenn der Ball auf eine Wand trifft, prallt er ja mit dem gleichen Winkel ab, in dem er eingeflogen ist. Hier ein Bild zum besseren Verständnis:


    Joah, auf horizontalen, vertikalen Ebenen oder auf einer 45° Schräge ist das ja leicht zu berechnen (VY*-1; VX*-1; VX und VY tauschen), jedoch auf solchen schrägen ist das schwieriger. Hoffe, jemand kann mir helfen!

  2. #2
    Die einfachste Lösung ist das natürliche Skalarprodukt:

    Seien v, w Vektoren des R², x das natürliche Skalarprodukt auf R² (Summe der komponentenweisen Multiplikation, (a,b)x(c,d) = a*c + b*d) dann gilt:
    v x w = |v|*|w|*cos(v,w)
    (tatsächlich definiert man in abstrakteren (Prä-Hilbert-)Räumen den Winkel über das Skalarprodukt)

    du kennst |v| und |w| (|(a,b)| = sqrt(a² + b²)), dadurch bekommst du den Cosinus raus und somit den Winkel zwischen der Fläche und dem einfallenden Strahl, rechnest darüber aus, wie der Winkel zum Lot ist (90 - Winkel zwischen Fläche und Strahl) und berechnest dadurch den Ausfallswinkel zur Fläche, bestimmst einen Vektor, der diesen hat (das is ein wenig kompliziert, müsstest du aber mit Skalarprodukt und umstellen hinbekommen), normierst ihn und nimmst ihn mit dem Betrag des einfallenden Strahls mal damit er diesselbe "Geschwindigkeit" hat, fertig

    Geändert von Dhan (13.05.2008 um 15:08 Uhr)

  3. #3
    O__O Oha...
    Naja, nicht ganz oha, denn dead_orc hat mich schon im Chat darauf hingewiesen, jedoch hab ich das nicht hundertprozentig verstanden @_@
    Und jetzt leider immer noch nicht. Deswegen wär es echt Supernett, wenn du (oder jemand anderes) es mir an einem Beispiel vorrechnen könntest! =D

    €dit:
    Hm...k, jetzt konnt ich in Erfahrung bringen, was ungefähr Vektoren sind. Dennoch hab ich nicht ganz verstanden, was v und w sind, von R² ganz zu schweigen o.o°
    Aber ich denk mal mit sqrt ist die Quadratwurzel gemeint?

    Geändert von Teflo (13.05.2008 um 16:02 Uhr)

  4. #4
    @Dhan: Die mathematische Präzision in Ehren, didaktisch und anwendbar sind die Informationen aber nicht gerade. BTW, der Betrag der Geschwindigkeit wird in der Physik als Schnelligkeit bezeichnet.

    Also überlassen wir das mal einem künftigen Ingenieur.

    Zum Problem: Du hast zuerst eine Geschwindigkeit gegeben und du hast den Verbindungsvektor von und gegeben als . Du suchst nun den Geschwindigkeitsektor , der die Eigenschaft haben soll, dass der Einfallswinkel dem Ausfallswinkel entspricht.

    Der Winkel lässt sich über die Definition des Skalarproduktes einfach berechnen:

    Um das Problem zu lösen, nimmst du eine Senkrechte zu , definiert als und berechnest über den Winkel zum Lot (je nachdem, ob du Grad- oder Bogenmass verwendest). Anschliessend kannst du den neuen Vektor wieder über das Skalarprodukt bestimmen: . Du wählst irgendeine Zahl für und bestimmst über die Formel das , nun sollte die Richtung für stimmen. Dieser Vektor muss nun noch auf die richtige Schnelligkeit normiert werden, dies geht einfach mit der Formel:

    Ein Beispiel mach ich später vielleicht. Ausserdem könnte ich schwören, es gäbe noch eine einfachere Methode, aber mir kommt gerade nichts mehr in den Sinn.


    EDIT: Du weisst nicht was Vektoren sind? Weia.

    Na dann: Ein Vektor ist vereinfacht gesagt eine Anordnung von Zahlen, um Punkte oder Pfeile zu beschreiben, z.B. ist ein Vektor. Die und werden als Komponenten des Vektors bezeichnet. Sie wiederspiegeln hier die Koordinaten der Puntke bzw. Pfeilen. Man kann dann die Komponenten des Vektors und den Zwischenwinkel von Vektoren durch das Skalarprodukt verknüpfen, welches definiert ist als: . Und ein Mathematiker/Informatiker wie Dhan () könnte dir dann beweisen, dass gilt, wobei alpha der Zwischenwinkel ist und der Betrag eines Vektors über den Satz des Pythagoras definiert ist als . Soviel zum Thema Vektoren, zusätzlich lassen sie sich auf beliebig viele Dimensionen erweitern, das Konzept nennt man dann Vektorräume, wie (2-dimensionale Ebene) auch einer ist, aber das geht hier wohl zu weit.


    EDIT2: Ich wollte eigentlich dein Beispiel ausrechnen, doch irgendetwas stimmt noch nicht. Die letzte Gleichung hat unendlich viele Lösungen, was eigentlich gar nicht sein darf. Irgendwo ist noch der Wurm drin, nur finde ich ihn gerade nicht. ^^

    Geändert von TheBiber (13.05.2008 um 16:45 Uhr)

  5. #5
    Mhm, interessant! Übrigens danke für die schnellen Antworten. Trotzdem warte ich noch auf die Beispielaufgabe, um sicher zu gehn!

  6. #6
    V' = 2*Q - V
    Q = ( (P2 - P1) / Länge von (P2 - P1) ) * x
    x = Länge von V * sin(alpha)
    alpha über Skalarprodukt berechnen. So hätte ich es gemacht.

  7. #7
    Zitat Zitat von Drakes Beitrag anzeigen
    V' = 2*Q - V
    Q = ( (P2 - P1) / Länge von (P2 - P1) ) * x
    x = Länge von V * sin(alpha)
    alpha über Skalarprodukt berechnen. So hätte ich es gemacht.
    Also zu deutsch ?

    Jetzt wäre nur noch eine Begründung oder ein Beweis angebracht. Ich habe herausgefunden, dass man den ersten Vektor lediglich um 2 alpha drehen muss, um das Ergebnis zu erhalten, was deutlich einfacher ist als die erste Methode. Drehungen werden mit Rotationsmatrizen modelliert, möglicherweise resultiert dann genau deine Lösung. Aber ich überprüfe das später, muss Essen.

  8. #8
    Zitat Zitat von TheBiber Beitrag anzeigen
    Also zu deutsch ?

    Jetzt wäre nur noch eine Begründung oder ein Beweis angebracht. Ich habe herausgefunden, dass man den ersten Vektor lediglich um 2 alpha drehen muss, um das Ergebnis zu erhalten, was deutlich einfacher ist als die erste Methode. Drehungen werden mit Rotationsmatrizen modelliert, möglicherweise resultiert dann genau deine Lösung. Aber ich überprüfe das später, muss Essen.
    Glaube nicht, denn die Rotationsmatrix für 2D ist ja eigentlich:

    Mein Beweiss ist, dass man da ein gleichschenkliges Dreieck konstruieren kann.

  9. #9
    Zitat Zitat von Drakes Beitrag anzeigen
    Glaube nicht, denn die Rotationsmatrix für 2D ist ja eigentlich:

    Mein Beweiss ist, dass man da ein gleichschenkliges Dreieck konstruieren kann.
    Deine Formel kann nicht stimmen: Wenn der Einfallswinkel 0° beträgt, dann müsste v = v' gelten, nach deiner Formel ist dann aber v = -v'. Dies hingegen müsste gerade bei 90° gelten, nach dir erhält man hierbei allerdings einen Ausfalsswinkel von 30°, wenn man es aufzeichnet.

    Also, ich habs endgültig raus, mit der Rotationsmatrix funktioniert das ganz einfach, ich wende es gleich auf das erste Beispiel an mit (y-Achse wird nach oben positiv gezählt, deshalb minus 1) und (es ist wichtig, dass die Vektoren als Spaltenvektoren geschrieben werden, dazu später mehr):

    1. Den Einfallswinkel berechnen:

    Beispiel: , woraus folgt .

    2. Da der Vektor um den doppelten Winkel gedreht werden muss, wird dieser verdoppelt:

    Beispiel:

    3. Die Rotationsmatrix aufstellen:

    Beispiel:

    4. Der gesuchte Vektor berechnet sich dann einfach durch Linksmultiplikation mit der Rotationsmatrix:

    Beispiel:


    Achtung: Die Vektoren müssen zwingend als Spaltenvektoren geschrieben werden, damit die Matrixmultiplikation richtig funktioniert!
    Die Multiplikation einer 2x2-Matrix mit einem 2-dimensionalen Spaltenvektor ist wiederum ein Vektor und so definiert:


    Die Methode wird zwar nur dann funktionieren, wenn von aus gesehen rechts näher ist als links, das müsste man vorher also noch abklären. Falls von aus gesehen links näher ist, kann man einfach das Vorzeichen von umkehren, d.h. ein minus davor hängen, dann sollte es wieder stimmen.


    So, ich hoffe, geholfen zu haben.

    Geändert von TheBiber (13.05.2008 um 20:29 Uhr)

  10. #10
    Hmm... So wie ich es gedacht habe gibt Dann würde sein. Wo liegt mein Fehler?

  11. #11
    Zitat Zitat von Drakes Beitrag anzeigen
    Hmm... So wie ich es gedacht habe gibt Dann würde sein. Wo liegt mein Fehler?
    Nicht in dieser Gleichung.

    Deine beiden anderen Gleichungen besagen:



    Da Q die Richtung von p hat, stimmt sicher die Richtung, also liegts wohl am Betrag.



    Hier ist der Haken: Wenn du das Dreieck zeichnest, dann hast du für den Winkel die Ankathete und die Hypothenuse gegeben. Durch Verwendung des Cosinus erhält man tatsächlich dasselbe Ergebnis wie ich.

    Also funktioniert ebenso wie meine Methode, insbesondere auch für die Gegenrichtung. Und einfacher ist sie obendrein auch noch. Für 90° erhält man dann v'=-v, wie es sein sollte und für 0° erhält man v'=2v-v = v, was ebenso stimmt.

    Irgendwie gewöhnt man es sich im Alter einfach ab, auf einfache Art die Lösung zu suchen.

  12. #12
    Hab ich irgendwann mal im Internet gefunden und ich verwende die Formel für Reflexionen in einem Ray Tracer, stimmen tut sie also. Zumindest für Strahlen.

    c1 = -dot(N, V);
    Vr = V + (N*c1*2);

    Mit Tex kenn ich mich leider nicht aus, daher diese bescheidene Angabe.
    dot(a, b) bedeutet einfach das Punktprodukt von a und b.
    N ist der Normalenvektor der Wand/Geraden g, an der der Strahl abprallt.
    V ist der Richtungsvektor der Kugel in Richtung Wand.
    Sowohl V als auch N sind Richtungsvektoren, müssen also eine Länge von 1 haben.
    Vr ist der von der Wand im richtigen Winkel ausgehende Richtungsvektor.


    Geändert von nudelsalat (13.05.2008 um 22:25 Uhr)

  13. #13
    @TheBiber: Ah, sehr gut! Danke!
    Hab's grad mit einem Idealfall (Ball fällt senkrecht auf 45° Fläche) nachgerechnet und es funktioniert!
    So, jetzt muss ich das nur noch in Code umwandeln...

    Edit: Hab noch ein schönes Problemchen
    Ich muss kontrollieren, ob ein bestimmter Punkt zwischen zwei anderen Punkten ist! Leider weiß ich keinen Begriff, mit dem man danach googlen könnt :/
    Naja, hoffe, jemand kann mir weiterhelfen!

    Geändert von Teflo (27.05.2008 um 12:25 Uhr)

  14. #14
    Du hast Glück, dass ich per Zufall hier hereinschaue. Der Edit macht sich nämlich nicht bemerkbar. Nächstes mal besser neuen Thread eröffnen.

    Zitat Zitat von Lloyd64 Beitrag anzeigen
    Edit: Hab noch ein schönes Problemchen
    Ich muss kontrollieren, ob ein bestimmter Punkt zwischen zwei anderen Punkten ist! Leider weiß ich keinen Begriff, mit dem man danach googlen könnt :/
    Naja, hoffe, jemand kann mir weiterhelfen!
    Was heisst, der bestimmte Punkt soll sich zwischen zwei anderen Punkten befinden? Also dass der bestimmte Punkt auf der Verbindungsstrecke liegt?

    Dieses Problem kann man als zwei Einzelprobleme auffassen, nennen wir den bestimmten Punkt mal P und die zwei anderen Punkte A und B:

    1. Der Punkt liegt auf der Verbindungsgerade. Hierzu berechnest du z.B. die beiden Vektoren: und und überprüfst, ob sie linear abhängig sind, d.h. dass der eine Vektor ein skalares Vielfaches des anderen Vektors ist. Programmiertechnisch machst du das am einfachsten, wenn du die Komponenten der beiden Vektoren einzeln teilst und nachprüfst, ob beide dieselbe Zahl ergeben, konkret muss gelten:

    2. Die erste Bedingung sagt noch nichts darüber aus, ob P tatsächlich zwischen A und B liegt, sondern lediglich, dass er in der Verbindungslinie liegt. Um zu überprüfen, ob P zwischen A und B liegt, kann man einfach die Vorzeichen überprüfen: und müssen komponentenweise die gleichen Vorzeichen haben, während gleichzeitig komponentenweise das entgegengesetzte Vorzeichen haben müsste. Programmiertechnisch kann man das Vorzeichen glaub ich mit einer Funktion namens sign(...) oder signum(...) überprüfen, welche einfach 1, 0 oder -1 zurückgeben.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •