2012-03-27 5 views
2

Ich habe an einem Spiel gearbeitet und habe einige Probleme mit dem Bounce-Effekt. Ich habe im Internet nach verschiedenen Ressourcen gesucht, aber nicht den richtigen Weg gefunden.Berechnen des Winkels auf einem Ball zurückprallen

Ich frage mich, ob es einen Weg gibt, um die Grade oder den Winkel zu berechnen, die der Ball zurückschlagen wird, nachdem er eine Wand getroffen hat.

exampel, der Ball in einem bestimmten Winkel bewegt, ich frage mich, wie man den Winkel zu berechnen, wenn ich

bollX += bollspeed*Math.cos(Math.toRadians(angle)); 
bollY += bollspeed*Math.sin(Math.toRadians(angel)); 

enter image description here

Danke für die Hilfe abprallen.

+3

Winkel in = Winkel aus – Nanne

+0

Wenn die Wände alle vertikal oder horizontal sind, Sie könnten nur die x oder y Geschwindigkeit umgekehrt, je an welcher Wand du schlägst. – Derek

+0

Sie sind alle vertikal und horizontal. Die Berechnung, die ich herausfinden möchte, ist, wenn der Ball sich zum Beispiel um 315 Grad bewegt und auf der horizontalen (90 Grad) Wand springt, sollte er in 275 Grad zurückspringen. –

Antwort

1

Dieses Problem ist viel einfacher als Sie es machen. Sie müssen sich eigentlich gar nicht um Winkel kümmern, denken Sie nur an Komponenten. Wenn der Ball etwas auf einer vertikalen Seite trifft, wird die x-Komponente seiner Geschwindigkeit umgedreht. Wenn der Ball etwas auf einer horizontalen Seite trifft, wird die y-Komponente seiner Geschwindigkeit umgedreht.

Zum Beispiel Pseudo-Code für Ihre Kollisionsbehandlung könnte wie folgt aussehen:

if (hits on left or right side of brick) 
    ball.velocity.x = -ball.velocity.x; 
else if (hits on top or bottom side of brick) 
    ball.velocity.y = -ball.velocity.y; 
endif 

aus dem Code versehen, kann ich nicht genau sagen, ob Sie irgendeine Art von Geschwindigkeitskomponenten wie diese haben. Um Ihre Geschwindigkeit darzustellen, müssen Sie entweder einen Winkel und eine Magnitude oder eine x- und y-Komponente haben. Wenn Sie sich bei der Gestaltung Ihres Spiels für Ersteres entschieden haben, empfehle ich Ihnen dringend, zu den Komponenten zu wechseln, da dies die gesamte Mathematik auf dem Weg vereinfacht, da Sie am Ende ohnehin alles in Komponenten umwandeln werden.

Beachten Sie, dass diese Antwort davon ausgeht, dass Sie nur genau horizontal oder vertikal springen.

0

Sie sollten den Einheitsnormalenvektor "n" kennen, der ein lotrechter Vektor zur Kantenlinie ist, auf der der Ball anfängt und zurückspringt und (n/md; n) = 1.

Wenn Sie sagen Einheitsnormalvektor n und Ihr Geschwindigkeitsvektor v dann Ihr neues Geschwindigkeitsvektor wird, v neue = v-2 (v & middot; n) n, wobei fettgedruckte Zeichen Vektoren darstellen und "& ciddot;" das Skalarprodukt darstellt.

Link unten ist die visuelle Darstellung dieser Berechnung, die Einblick geben kann besser http://mathworld.wolfram.com/images/eps-gif/Reflection2_751.gif

Verwandte Themen