Hacer rebotar una pelota contra una superficie

Actualmente estoy en el medio de escribir un juego como Breakout, y me preguntaba cómo podría hacer rebotar adecuadamente una pelota en una superficie.

Seguí la ingenua forma de rotar la velocidad en 90 grados, que era:

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

Lo cual (como era de esperar) no funcionó tan bien. Si conozco la posición y la veocidad de la pelota, así como el punto en el que golpearía la pelota (pero en cambio va a rebotar), ¿cómo puedo rebotarla en ese punto?

Restricciones:

Estoy usando matemática entera (sin FP en ningún lado)Todas mis superficies son superficies planas simples (vertical, horizontal o un bloque)Solo quiero rebotar en un ángulo de 90 gradosTodas las colisiones son puramente elásticas (esto es una ruptura, sin necesidad de fricción, etc.)

No necesito ningún código de idioma específico. Si alguien pudiera proporcionar una pequeña fórmula matemática sobre cómo hacer esto correctamente, eso funcionaría bien para mí.

¡Gracias!

Respuestas a la pregunta(7)

Su respuesta a la pregunta