Innanzitutto per calcolare il rilevamento delle collisioni tra una sfera (cerchio in 2D) e una linea è necessario calcolare il vettore perpendicolare tra il centro della palla in movimento e la linea, per calcolare questa distanza è necessario effettuare le seguenti operazioni:
Quindi, per calcolare d nella figura sopra, dobbiamo fare alcuni passaggi.
- Supponiamo che la tua linea stia usando l'equazione parametrica P (t) = S + t V nota che V è la direzione della linea che puoi ottenere sottraendo (P2 - P1).
- Da Pitagora:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Quindi espandi l'equazione per ottenere quanto segue, sembra un po 'complicato ma in realtà non lo è.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) punto V ) ^ 2 / V ^ 2)
Dove Q è il centro del cerchio e S è un punto qualsiasi della linea. Una volta che la distanza è inferiore al raggio del cerchio / sfera, è necessario innescare la risposta alla collisione che è spiegata nel punto successivo.
È errato capovolgere sempre il componente x o y per far rimbalzare la palla, quello che devi fare è riflettere il vettore di velocità, per farlo devi calcolare il vettore normale della superficie e usare quello normale per calcolare il riflesso vettore usando la seguente equazione
R = 2 * ( V punto N ) * N - V
dove R è il vettore di riflessione, N è la normale della superficie e V è il vettore di velocità.
In caso di 45 gradi la normale della tua superficie sarà N = (1,1,0) con segno variabile a seconda della direzione in cui le facce normali (posizione o negativo).