2012-04-06 6 views
2

Ich versuche, dem Benutzer ein Paddel zu zeichnen, mit dem er dann einen Ball schlagen kann. Allerdings kann ich den Ball nicht dazu bringen, richtig zu springen, weil die x- und y-Komponenten der Ballgeschwindigkeit nicht an der Wand ausgerichtet sind. Wie kann ich das umgehen?Einen Ball mit beliebigem Winkel von einer Wand abprallen lassen?

Ich versuchte den Rat von Gareth Rees here, aber anscheinend weiß ich nicht genug über Vektoren, um es folgen zu können. Zum Beispiel, ich weiß nicht, was genau Sie in einem Vektor speichern - ich weiß, es ist ein Wert, mit Richtung ist, aber speichern Sie die 2 Punkte, es ist zwischen der Neigung, der Winkel?

Was ich wirklich den Winkel der Wand und die x- und y-Geschwindigkeiten gegeben muß, wie der Ball, die neuen x- und y-Geschwindigkeiten danach zu finden.

Antwort

6

Gareth Rees hat die Formel richtig, aber ich finde die Bilder und Erklärung here ein wenig klarer. Das heißt, die Grundformel ist:

Vnew = -2*(V dot N)*N + V 
where 
V = Incoming Velocity Vector 
N = The Normal Vector of the wall 

Da Sie nicht vertraut mit Vektor-Notation sind, ist hier, was Sie für diese Formel wissen müssen: Vektoren sind im Grunde nur x, y-Paare, so V = (v.x, v.y) und N = (n.x, n.y). Ebenen werden am besten durch die Normale zur Ebene beschrieben, dh einen Vektor der Einheitslänge, der senkrecht zur Ebene steht. Dann ein paar Formeln, b*V = (b*v.x, b*v.y); V dot N = v.x*n.x+v.y*n.y, das ist ein Skalar; und A + B = (a.x+b.x, a.y+b.y). Um schließlich einen Einheitsvektor zu finden, der auf einem beliebigen Vektor basiert, ist es N = M/sqrt(M dot M).

Wenn die Oberfläche gekrümmt ist, die Verwendung am Berührungspunkt die normal.

+0

Ein schönes Vektor-Tutorial in einem einzigen Absatz! Sie definieren nicht Teilung obwohl (notwendig, den Einheitsvektor für die Suche), aber es ist nicht schwer zu ergründen, dass die gleichen Regeln wie für das Produkt gelten ... teilen Sie einfach jede Komponente des Vektors durch den Skalar. – MattJ

Verwandte Themen