Tout d'abord, pour calculer la détection de collision entre une sphère (cercle en 2D) et une ligne, vous devez calculer le vecteur perpendiculaire entre le centre de la balle en mouvement et la ligne, afin de calculer cette distance, vous devez procéder comme suit:
Donc, pour calculer d dans la figure ci-dessus, nous devons faire quelques étapes.
- Supposons que votre ligne utilise l'équation paramétrique P (t) = S + t V notez que V est la direction de la ligne peut être obtenue en soustrayant (P2 - P1).
- Depuis Pythagore:
d ^ 2 = len ( Q - S ) ^ 2 - len (proj ( Q - S )) ^ 2
Ensuite, vous développez l'équation pour obtenir ce qui suit, cela semble un peu compliqué, mais ce n'est pas le cas.
d = sqrt (len ( Q - S ) ^ 2 - len (( Q - S ) point V ) ^ 2 / V ^ 2)
Où Q est le centre du cercle et S est n'importe quel point sur la ligne. Une fois que la distance est inférieure au rayon du cercle / sphère, vous devez déclencher la réponse à la collision, ce qui est expliqué au point suivant.
Il est incorrect de toujours retourner la composante x ou y pour faire rebondir la balle, ce que vous devez faire est de refléter le vecteur de vitesse, pour ce faire, vous devez calculer le vecteur normal de la surface et utiliser cette normale pour calculer la réflexion vecteur en utilisant l'équation suivante
R = 2 * ( V point N ) * N - V
où R est le vecteur de réflexion, N est la normale de la surface et V est le vecteur de vitesse.
En cas de 45 degrés, votre normale de surface sera N = (1,1,0) avec un signe variable selon la direction dans laquelle les faces normales (position ou négatif).