Bouncing einen Ball von einer Oberfläche

Ich bin gerade dabei, ein Spiel wie Breakout zu schreiben, und ich habe mich gefragt, wie ich einen Ball richtig von einer Oberfläche abprallen kann.

Ich habe mich für die naive Art entschieden, die Geschwindigkeit um 90 Grad zu drehen:

[vx, vy] -> [-vy, vx]

Welche (nicht überraschend) hat nicht so gut funktioniert. Wenn ich die Position und Geschwindigkeit des Balls sowie den Punkt kenne, den der Ball treffen würde (aber stattdessen abprallen wird), wie kann ich ihn an diesem Punkt abprallen?

Einschränkungen:

Ich verwende Ganzzahl-Mathematik (nirgends FP)Alle meine Flächen sind einfache ebene Flächen (vertikal, horizontal oder ein Block)Ich möchte nur in einem Winkel von 90 Grad abprallenAlle Kollisionen sind rein elastisch (Dies ist ein Ausbruch - keine Reibung usw.)

Ich benötige keinen sprachspezifischen Code. Wenn jemand eine kleine mathematische Formel bereitstellen könnte, wie man das richtig macht, würde das für mich gut funktionieren.

Vielen Dank

Antworten auf die Frage(14)

Ihre Antwort auf die Frage