En primer lugar, para calcular la detección de colisión entre una esfera (círculo en 2D) y una línea, debe calcular el vector perpendicular entre el centro de la bola en movimiento y la línea, para calcular esta distancia debe hacer lo siguiente:
Entonces, para calcular d en la figura anterior, necesitamos hacer algunos pasos.
- Suponga que su línea está utilizando la ecuación paramétrica P (t) = S + t V tenga en cuenta que V es la dirección de la línea que se puede obtener restando (P2 - P1).
- De Pitágoras:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Luego expande la ecuación para obtener lo siguiente, parece un poco complicado, pero en realidad no lo es.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) punto V ) ^ 2 / V ^ 2)
Donde Q es el centro del círculo y S es cualquier punto de la línea. Una vez que la distancia es menor que el radio del círculo / esfera, debe activar la respuesta de colisión que se explica en el siguiente punto.
Es incorrecto voltear siempre el componente x o y para hacer rebotar la pelota, lo que debe hacer es reflejar el vector de velocidad, para hacerlo debe calcular el vector Normal de la superficie y usar ese normal para calcular la reflexión vector usando la siguiente ecuación
R = 2 * ( V punto N ) * N - V
donde R es el vector de reflexión, N es la normal de la superficie y V es el vector de velocidad.
En el caso de 45 grados, su superficie normal será N = (1,1,0) con signo variable dependiendo de en qué dirección se enfrenta la normal (posición o negativo).